namespace GFramework.Game.input; /// /// 输入上下文堆栈管理器,用于管理多个输入上下文的堆栈结构 /// public class InputContextStack { private readonly Stack _stack = new(); /// /// 将指定的输入上下文压入堆栈顶部 /// /// 要压入堆栈的输入上下文对象 public void Push(IInputContext context) => _stack.Push(context); /// /// 弹出堆栈顶部的输入上下文 /// public void Pop() => _stack.Pop(); /// /// 处理游戏输入事件,遍历堆栈中的所有上下文直到找到能够处理该事件的上下文 /// /// 要处理的游戏输入事件 /// 如果堆栈中任意一个上下文成功处理了输入事件则返回true,否则返回false public bool Handle(IGameInputEvent input) { // 遍历堆栈中的所有上下文,调用其Handle方法处理输入事件 // Any方法会在第一个返回true的上下文处停止遍历 return _stack.Any(ctx => ctx.Handle(input)); } }