diff options
| author | Matheus <matheus.guedes.mg.m@gmail.com> | 2025-08-28 00:38:48 -0300 |
|---|---|---|
| committer | Matheus <matheus.guedes.mg.m@gmail.com> | 2025-08-28 00:38:48 -0300 |
| commit | 2fb787a744d4f7a37d81233d2913a5ef39122f73 (patch) | |
| tree | f9595d6757203146aa8201a86275c2c842bae03b /scripts/Game.cs | |
| parent | 6c7e2ac133986efa57b43df52a5498c6f7efcf75 (diff) | |
Comentarios
Diffstat (limited to 'scripts/Game.cs')
| -rw-r--r-- | scripts/Game.cs | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/scripts/Game.cs b/scripts/Game.cs index 818b064..3a70e0c 100644 --- a/scripts/Game.cs +++ b/scripts/Game.cs @@ -1,9 +1,22 @@ using Godot; -using System; + +/// <summary> +/// Classe principal do jogo. +/// Lar da lógica central do jogo. +/// </summary> public partial class Game : Node { + /// <summary> + /// Definição de um jogador. + /// </summary> private static readonly ActorDefinition playerDefinition = GD.Load<ActorDefinition>("res://assets/definitions/actor/Player.tres"); + /// <summary> + /// O jogo possui o mapa. + /// </summary> private Map Map; + /// <summary> + /// Objeto para obter input do usuário. + /// </summary> private InputHandler inputHandler; public override void _Ready() { @@ -13,6 +26,7 @@ public partial class Game : Node { inputHandler = GetNode<InputHandler>("InputHandler"); + // O jogador é criado pelo jogo. Player player = new Player(Vector2I.Zero, null, playerDefinition); Camera2D camera = GetNode<Camera2D>("Camera2D"); RemoveChild(camera); @@ -24,26 +38,40 @@ public partial class Game : Node { Map.UpdateFOV(player.GridPosition); } + /// <summary> + /// Método executa aproximadamente 60 vezes por segundo. + /// </summary> + /// <param name="delta"></param> 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); + // Se realmente houve uma ação, computamos um turno. if (action != null) { Vector2I previousPlayerPos = player.GridPosition; + // Primeiro executamos a ação do jogador action.Perform(); + // Depois computamos os turnos dos outros atores. HandleEnemyTurns(); + // Por fim, se o jogador mudou de lugar, atualizamos seu campo de visão. if (player.GridPosition != previousPlayerPos) { Map.UpdateFOV(player.GridPosition); } } } + /// <summary> + /// Executa um turno para cada ator no mapa. + /// </summary> private void HandleEnemyTurns() { foreach (Actor actor in Map.Map_Data.Actors) { if (actor is Player) continue; + // Se o ator for um inimigo e estiver vivo, deixamos + // que sua IA faça um turno. if (actor is Enemy enemy && enemy.IsAlive) { enemy.Soul.Perform(); } |
