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));
}
}