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