using Godot; /// /// Classe principal do jogo. /// Lar da lógica central do jogo. /// public partial class Game : Node { /// /// Definição de um jogador. /// private static readonly ActorDefinition playerDefinition = GD.Load("res://assets/definitions/actor/Player.tres"); /// /// O jogo possui o mapa. /// private Map Map; /// /// Objeto para obter input do usuário. /// private InputHandler inputHandler; /// /// Gerenciador de turnos /// private TurnManager turnManager; private Hud hud; public override void _Ready() { base._Ready(); Map = GetNode("Map"); inputHandler = GetNode("InputHandler"); hud = GetNode("HUD"); // O jogador é criado pelo jogo. Player player = new Player(Vector2I.Zero, null, playerDefinition); Camera2D camera = GetNode("Camera2D"); RemoveChild(camera); player.HealthChanged += (int hp, int maxHp) => hud.OnHealthChanged(hp, maxHp); player.Died += () => inputHandler.SetInputHandler(InputHandlers.GameOver); player.AddChild(camera); Map.Generate(player); Map.UpdateFOV(player.GridPosition); turnManager = new(Map); MessageLogData.Instance.AddMessage("Boa sorte!"); } /// /// Método executa aproximadamente 60 vezes por segundo. /// /// public override void _PhysicsProcess(double delta) { base._PhysicsProcess(delta); Player player = Map.Map_Data.Player; // Pegamos uma ação do usuário Action action = inputHandler.GetAction(player); if (action != null) { turnManager.InsertPlayerAction(action); } // Computamos um turno. turnManager.Tick(); } }