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));
}
}