using Godot; namespace TheLegendOfGustav.Utils; /// /// Classe utilitária para converter coordenadas da malha dos tiles /// em coordenadas em pixels. /// Esta classe é necessária porque o Godot trata posições em pixels, /// mas faz mais sentido tratarmos as posições em tiles. /// 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)); } }