using Godot; using TheLegendOfGustav.Entities.Actions; using TheLegendOfGustav.Entities.Actors; namespace TheLegendOfGustav.InputHandling; public enum InputHandlers { MainGame, GameOver, Inspect, Pickup, Inventory } /// /// Máquina de estado que obtém ações do usuário conforme o estado atual do jogo. /// public partial class InputHandler : Node { [Export] private InputHandlers StartingInputHandler { get; set; } private Godot.Collections.Dictionary InputHandlerDict { get; set; } = []; private BaseInputHandler SelectedInputHandler { get; set; } public override void _Ready() { base._Ready(); // Controles para quando o jogador está vivo e jogando normalmente. InputHandlerDict.Add(InputHandlers.MainGame, GetNode("MainGameInputHandler")); // Controles para quando o jogador está morto. InputHandlerDict.Add(InputHandlers.GameOver, GetNode("GameOverInputHandler")); InputHandlerDict.Add(InputHandlers.Inspect, GetNode("InspectInputHandler")); InputHandlerDict.Add(InputHandlers.Pickup, GetNode("PickupInputHandler")); InputHandlerDict.Add(InputHandlers.Inventory, GetNode("InventoryInputHandler")); SetInputHandler(StartingInputHandler); } public Action GetAction(Player player) { return SelectedInputHandler.GetAction(player); } /// /// Define o esquema de controle atual do jogo /// para o estado informado. /// /// Estado do jogo. public void SetInputHandler(InputHandlers inputhandler) { SelectedInputHandler?.Exit(); SelectedInputHandler = InputHandlerDict[inputhandler]; SelectedInputHandler.Enter(); } }