using GFramework.Core.extensions;
using GFramework.Core.system;
namespace GFramework.Game.input;
///
/// 输入系统类,负责管理输入上下文堆栈并处理游戏输入事件
///
public class InputSystem : AbstractSystem
{
private readonly InputContextStack _contextStack = new();
///
/// 将输入上下文推入上下文堆栈
///
/// 要推入的输入上下文对象
public void PushContext(IInputContext ctx)
=> _contextStack.Push(ctx);
///
/// 从上下文堆栈中弹出顶层输入上下文
///
public void PopContext()
=> _contextStack.Pop();
///
/// 处理游戏输入事件,首先尝试通过上下文堆栈处理,如果未被处理则发送事件
///
/// 要处理的游戏输入事件
public void Handle(IGameInputEvent input)
{
// 尝试通过上下文堆栈处理输入事件
if (_contextStack.Handle(input))
return;
// 如果上下文堆栈未能处理,则发送该事件
this.SendEvent(input);
}
///
/// 系统初始化方法,在系统启动时调用
///
protected override void OnInit()
{
}
}