mirror of
https://github.com/GeWuYou/GFramework.git
synced 2026-03-22 10:34:30 +08:00
- 新增 IGameInputEvent 接口定义游戏输入事件 - 新增 IInputContext 接口用于处理输入事件的上下文 - 新增 InputContextStack 类管理输入上下文堆栈 - 新增 InputSystem 类负责整体输入事件分发与处理 - 移除旧版 Godot 输入系统相关实现代码 - 定义输入事件处理流程:上下文堆栈 -> 事件发送机制
47 lines
1.3 KiB
C#
47 lines
1.3 KiB
C#
using GFramework.Core.extensions;
|
|
using GFramework.Core.system;
|
|
|
|
namespace GFramework.Game.input;
|
|
|
|
/// <summary>
|
|
/// 输入系统类,负责管理输入上下文堆栈并处理游戏输入事件
|
|
/// </summary>
|
|
public class InputSystem : AbstractSystem
|
|
{
|
|
private readonly InputContextStack _contextStack = new();
|
|
|
|
/// <summary>
|
|
/// 将输入上下文推入上下文堆栈
|
|
/// </summary>
|
|
/// <param name="ctx">要推入的输入上下文对象</param>
|
|
public void PushContext(IInputContext ctx)
|
|
=> _contextStack.Push(ctx);
|
|
|
|
/// <summary>
|
|
/// 从上下文堆栈中弹出顶层输入上下文
|
|
/// </summary>
|
|
public void PopContext()
|
|
=> _contextStack.Pop();
|
|
|
|
/// <summary>
|
|
/// 处理游戏输入事件,首先尝试通过上下文堆栈处理,如果未被处理则发送事件
|
|
/// </summary>
|
|
/// <param name="input">要处理的游戏输入事件</param>
|
|
public void Handle(IGameInputEvent input)
|
|
{
|
|
// 尝试通过上下文堆栈处理输入事件
|
|
if (_contextStack.Handle(input))
|
|
return;
|
|
// 如果上下文堆栈未能处理,则发送该事件
|
|
this.SendEvent(input);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 系统初始化方法,在系统启动时调用
|
|
/// </summary>
|
|
protected override void OnInit()
|
|
{
|
|
|
|
}
|
|
}
|