From b8962990ddb75b874a49c83d8eeaba7b7e45c196 Mon Sep 17 00:00:00 2001 From: Matheus Date: Wed, 10 Sep 2025 12:34:20 -0300 Subject: Centralização da lógica de distância. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/Utils/Grid.cs | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) (limited to 'scripts/Utils') diff --git a/scripts/Utils/Grid.cs b/scripts/Utils/Grid.cs index b744c60..e1fcde6 100644 --- a/scripts/Utils/Grid.cs +++ b/scripts/Utils/Grid.cs @@ -10,15 +10,46 @@ namespace TheLegendOfGustav.Utils; /// public abstract partial class Grid : GodotObject { + /// + /// Tamanho de cada tile em pixels. + /// public static readonly Vector2I tileSize = new(16, 16); + /// + /// Converte coordenadas do mundo (em pixels) para coordenadas do mapa (tiles). + /// + /// Coordenada em pixels. + /// Coordenada em tiles. public static Vector2I WorldToGrid(Vector2 coord) { return (Vector2I)(coord / tileSize); } + /// + /// Converte coordenadas do mapa (em tiles) para coordenadas do mundo (em pixels) + /// + /// Coordenada em tiles + /// Coordenada em pixels. public static Vector2 GridToWorld(Vector2I coord) { return coord * tileSize; } + + /// + /// Calcula a distância entre pontos A e B no mapa. + /// + /// + /// A distância retornada não é a distância real mas sim a + /// maior distância em um único eixo. + /// Isso significa que uma área em volta de um ponto não é um + /// círculo, mas um quadrado. + /// Veja: https://en.wikipedia.org/wiki/Chebyshev_distance + /// + /// Um ponto no mapa + /// Um ponto no mapa + /// A distância entre pontos a e b. + public static int Distance(Vector2I a, Vector2I b) { + Vector2I distanceVector = b - a; + return int.Max(int.Abs(distanceVector.X), int.Abs(distanceVector.Y)); + } } -- cgit v1.2.3