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 Pop(IInputContext ctx) { // 检查堆栈顶部元素是否与指定上下文匹配,如果不匹配则返回false if (!_stack.TryPeek(out var top) || top != ctx) return false; _stack.Pop(); return true; } /// /// 获取堆栈顶部的输入上下文但不移除它 /// /// 堆栈顶部的输入上下文 public IInputContext Peek() => _stack.Peek(); /// /// 处理游戏输入事件 /// /// 要处理的游戏输入事件 /// 如果任何一个输入上下文成功处理了输入事件则返回true,否则返回false public bool Handle(IGameInputEvent input) { // 从堆栈顶部开始遍历输入上下文,尝试处理输入事件 return _stack.Any(ctx => ctx.Handle(input)); } }