using GFramework.Game.input; using Godot; namespace GFramework.Godot.input; /// /// 将Godot引擎的输入事件转换为游戏通用输入事件的翻译器 /// public sealed class GodotInputTranslator : IInputTranslator { /// /// 尝试将原始输入对象转换为游戏输入事件 /// /// 原始输入对象,应为Godot的InputEvent类型 /// 输出参数,转换成功时返回对应的游戏输入事件,失败时返回null /// 转换成功返回true,否则返回false public bool TryTranslate(object rawInput, out IGameInputEvent gameEvent) { gameEvent = null!; if (rawInput is not GodotRawInput raw) return false; var evt = raw.Event; // 示例规则:只在 Bubble 阶段生成游戏输入 if (raw.Phase != GodotInputPhase.Bubble) return false; // Action if (evt is InputEventAction action) { gameEvent = new InputEvents.KeyInputEvent( action.Action, action.Pressed, false ); return true; } // Mouse button if (evt is InputEventMouseButton mb) { gameEvent = new InputEvents.PointerInputEvent( mb.Position, Vector2.Zero, (int)mb.ButtonIndex, mb.Pressed ); return true; } // Mouse motion if (evt is InputEventMouseMotion mm) { gameEvent = new InputEvents.PointerInputEvent( mm.Position, mm.Relative, 0, false ); return true; } return false; } }