using Godot;
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
{
private Godot.Collections.Dictionary inputHandlers = [];
[Export]
private InputHandlers startingInputHandler;
private BaseInputHandler selectedInputHandler;
public override void _Ready()
{
base._Ready();
// Controles para quando o jogador está vivo e jogando normalmente.
inputHandlers.Add(InputHandlers.MainGame, GetNode("MainGameInputHandler"));
// Controles para quando o jogador está morto.
inputHandlers.Add(InputHandlers.GameOver, GetNode("GameOverInputHandler"));
inputHandlers.Add(InputHandlers.Inspect, GetNode("InspectInputHandler"));
inputHandlers.Add(InputHandlers.Pickup, GetNode("PickupInputHandler"));
inputHandlers.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 = inputHandlers[inputhandler];
selectedInputHandler.Enter();
}
}