From 9953c9a5818baa392a48a4d18339c73f3b7a814e Mon Sep 17 00:00:00 2001 From: Matheus Date: Thu, 4 Sep 2025 16:18:17 -0300 Subject: Prepare --- scripts/actors/Actor.cs | 248 ------------------------------------------------ 1 file changed, 248 deletions(-) delete mode 100644 scripts/actors/Actor.cs (limited to 'scripts/actors/Actor.cs') diff --git a/scripts/actors/Actor.cs b/scripts/actors/Actor.cs deleted file mode 100644 index 80e8c1d..0000000 --- a/scripts/actors/Actor.cs +++ /dev/null @@ -1,248 +0,0 @@ -using Godot; - -/// -/// A classe de ator define um personagem no jogo. -/// -[GlobalClass] -public partial class Actor : Sprite2D -{ - /// - /// Sinal emitido toda vez que o HP mudar. - /// - /// Novo HP - /// Quantidade máxima de HP. - [Signal] - public delegate void HealthChangedEventHandler(int hp, int maxHp); - - /// - /// Sinal emitido se o ator morrer. - /// - [Signal] - public delegate void DiedEventHandler(); - - - /// - /// A definição do ator possui caracterísitcas padrões que definem - /// o ator em questão. - /// - protected ActorDefinition definition; - /// - /// É conveniente ter acesso ao mapa dentro do ator. Isto porque suas ações são feitas dentro - /// do mapa, então é necessário ter acesso à algumas informações. - /// - public MapData Map_Data { get; set; } - - /// - /// Se o ator está vivo. - /// - public bool IsAlive { get => Hp > 0; } - - private int energy; - /// - /// Utilizado no sistema de turnos. - /// Enquanto o ator tiver energia, ele poderá realizar turnos. - /// - public int Energy - { - get => energy; - set - { - if (value > Speed) { - energy = Speed; - } else { - energy = value; - } - } - } - /// - /// Taxa de recarga de energia. - /// - public int Speed { get => definition.Speed; } - - /// - /// Executado uma vez por turno, - /// - public void RechargeEnergy() { - Energy += Speed; - } - - private Vector2I gridPosition = Vector2I.Zero; - /// - /// Posição do ator no mapa do jogo. Diferentemente de Position, GridPosition tem como formato - /// os tiles do mapa. - /// - public Vector2I GridPosition { - set { - gridPosition = value; - // O sistema de coordenadas do Godot é em pixels, mas faz mais sentido para o jogo utilizar coordenadas em tiles. - // Esta propriedade converte um sistema para o outro automaticamente. - Position = Grid.GridToWorld(value); - } - get => gridPosition; - } - - private bool blocksMovement; - /// - /// Se o ator bloqueia movimento (não pode oculpar a mesma célula de outro ator.) - /// - public bool BlocksMovement { - get => blocksMovement; - } - - private string actorName; - /// - /// Nome do ator. - /// - public string ActorName { - get => actorName; - } - - private int hp; - /// - /// HP máximo do ator. - /// - public int MaxHp { get; private set; } - /// - /// HP atual do ator. - /// - public int Hp { - get => hp; - set { - // Esta propriedade impede que o HP seja maior que o máximo. - hp = int.Clamp(value, 0, MaxHp); - EmitSignal(SignalName.HealthChanged, Hp, MaxHp); - if (hp <= 0) { - Die(); - } - } - } - - private int mp; - /// - /// Máximo de mana do ator. - /// - public int MaxMp { get; private set; } - /// - /// Mana atual do ator. - /// - public int Mp { - get => mp; - set { - mp = int.Clamp(value, 0, MaxMp); - } - } - - /// - /// Estatística de ataque - /// - public int Atk { get; private set; } - - /// - /// Estatística de defesa. - /// - public int Def { get; private set; } - - /// - /// Estatística mental. - /// - public int Men { get; private set; } - - public override void _Ready() - { - base._Ready(); - // Quando o ator for carregado completamente, atualizamos sua posição para refletir - // sua posição real. - GridPosition = Grid.WorldToGrid(Position); - } - - /// - /// Move o ator para uma localização. Veja MovementAction. - /// - /// Vetor que parte da posição do ator até o seu destino. - public void Walk(Vector2I offset) { - // Cada ator tem um peso no sistema de pathfinding. - // Sempre que ele se mover, removemos seu peso da posição antiga - Map_Data.UnregisterBlockingActor(this); - GridPosition += offset; - // E colocamos na próxima. - Map_Data.RegisterBlockingActor(this); - // Este peso influencia o algoritmo de pathfinding. - // Atores evitam caminhos bloqueados. por outros atores. - } - - public Actor(Vector2I initialPosition, MapData map, ActorDefinition definition) { - GridPosition = initialPosition; - Map_Data = map; - Centered = false; - - SetDefinition(definition); - } - - /// - /// Aplica uma definição de NPC para o ator. - /// Se o ator for um boneco de barro, este método é como um - /// sopro de vida. - /// - /// A definição do ator. - public virtual void SetDefinition(ActorDefinition definition) { - this.definition = definition; - blocksMovement = definition.blocksMovement; - actorName = definition.name; - ZIndex = 1; - Texture = definition.texture; - - MaxHp = definition.Hp; - Hp = definition.Hp; - MaxMp = definition.Mp; - Mp = definition.Mp; - - Atk = definition.Atk; - Def = definition.Def; - Men = definition.Men; - } - - public virtual void Die() { - //⠀⠀⠀⠀⢠⣤⣤⣤⢠⣤⣤⣤⣤⣄⢀⣠⣤⣤⣄⠀⠀⠀⢀⣠⣤⣤⣄⠀⣤⣤⠀⠀⣠⣤⣤⣤⣤⣤⡄⢠⣤⣤⣤⣄⠀⠀ - //⠀⠀⠀⠀⠈⢹⣿⠉⠈⠉⣿⣿⠉⠉⢾⣿⣉⣉⠙⠀⠀⢀⣾⡟⠉⠉⣿⣧⢸⣿⡄⢠⣿⠏⣿⣿⣉⣉⡁⢸⣿⡏⢉⣿⡷⠀ - //⠀⠀⠀⠀⠀⢸⣿⠀⠀⠀⣿⣿⠀⠀⠈⠿⠿⣿⣿⡀⠀⠸⣿⡇⠀⠀⣾⣿⠀⢿⣿⣸⡿⠀⣿⣿⠿⠿⠇⢸⣿⣿⣿⣿⠀⠀ - //⠀⠀⠀⠀⢠⣼⣿⣤⠀⠀⣿⣿⠀⠀⢷⣦⣤⣼⡿⠁⠀⠀⠹⣿⣤⣴⡿⠋⠀⠘⣿⣿⠃⠀⣿⣿⣤⣤⡄⢸⣿⡇⠙⢿⣦⡀ - //⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - //⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - //⠀⠀⠀⠀⠀⠀⠀⠀⢀⣰⣶⣶⣶⣿⣿⣿⣿⣷⣶⣤⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - //⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - //⠀⠀⠀⠀⠀⠀⢀⣾⣿⣿⣿⣿⣿⠿⠛⠛⠻⢿⣿⣿⣿⣿⣿⣿⣿⣶⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - //⠀⠀⠀⠀⠀⢀⢾⣿⣿⣿⣿⠟⠁⠀⠀⠀⠀⠀⠈⠉⠉⠉⠻⢿⢿⣿⣿⣦⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - //⠀⠀⠀⠀⢠⠏⢸⣿⣿⡿⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠛⠿⢻⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - //⠀⠀⠀⢀⠇⠀⠈⠿⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⡿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - //⠀⠀⢀⡞⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠰⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - //⠀⠀⡸⠀⠀⠀⠀⠀⠀⠀⠀⡼⠛⠳⣄⡀⠀⠐⢿⣦⡀⠀⠀⠀⢠⠃⠀⣸⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - //⠀⢠⠇⠀⠀⠀⠀⠀⠀⠀⠀⠉⠀⠀⠀⠉⣳⠟⠒⠻⣿⣦⡀⠀⡘⠀⢰⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - //⢀⠞⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⠃⢠⣄⡀⠈⠙⢿⡌⠁⠀⡞⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - //⠞⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠳⣄⣈⢻⡿⠃⢰⠟⠲⣼⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - //⠀⠀⠀⡰⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⡶⢴⠋⠀⠀⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - //⠀⠀⡴⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠞⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - //⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⡴⢟⠒⠀⠀⠀⠀⢰⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - //⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⠏⠀⠀⠈⠉⣿⠇⠀⢀⡎⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - //⣷⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⠠⣤⣤⣀⢰⠏⠉⠙⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - //⣿⣿⣆⠀⠀⠀⠀⠀⠀⠀⣀⣀⣀⣀⣠⠴⠢⠦⠽⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - //⣿⣿⣿⣷⡄⣀⡀⠈⠉⠋⢹⠋⠁⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - //⠿⠿⠿⠿⠿⠦⠈⠀⠀⠀⠸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - - string deathMessage; - - if (Map_Data.Player == this) { - deathMessage = "Você morreu!"; - } else { - deathMessage = $"{ActorName} morreu!"; - } - - MessageLogData.Instance.AddMessage(deathMessage); - - Texture = definition.deathTexture; - blocksMovement = false; - ZIndex = 0; - actorName = $"Restos mortais de {actorName}"; - Map_Data.UnregisterBlockingActor(this); - EmitSignal(SignalName.Died); - } -} \ No newline at end of file -- cgit v1.2.3