Je veux mettre en surbrillance les dalles à la portée d'une unité qui est placée dans un système de dalles hexagonales. Par exemple si je place une unité avec range = 2 sur 6 | 5, je veux mettre en évidence 5 | 4, 6 | 4, 7 | 4, 7 | 5, 6 | 6, 5 | 5, 4 | 5, 4 | 4, 5 | 3 et ainsi de suite ...Obtenir les coordonnées des dalles hexagonales adjacentes dans un système de coordonnées
Comment puis-je calculer les coordonnées de l'origine des coordonnées et la gamme? En ce moment j'utilise beaucoup si des clauses pour vérifier toutes les possibilités comme ceci:
if (gameField[x, y].IsHighlighted && gameField[x, y].DeployedUnit != null)
{
if (gameField[x, y].DeployedUnit.AttackRange > 0)
{
if (x % 2 == 0)
{
if (x > 0 && y > 0)
{
gameField[x - 1, y - 1].IsGreenRange = true;
}
if (x > 0)
{
gameField[x - 1, y].IsGreenRange = true;
}
if (y < height - 1)
{
gameField[x, y + 1].IsGreenRange = true;
}
if (x < length - 1)
{
gameField[x + 1, y].IsGreenRange = true;
}
if (x < length - 1 && y > 0)
{
gameField[x + 1, y - 1].IsGreenRange = true;
}
if (y > 0)
{
gameField[x, y - 1].IsGreenRange = true;
}
}
else
{
[...]
}
}
}
Mais lorsque la portée augmente, la complexité augmente aussi ... Il doit y avoir une meilleure façon. Des idées?
En outre, cet article est sans doute utile d'avoir un regard sur: [Naidamast] (https://www.codeproject.com/Articles/1119973/Part-I-Creating-a-Digital-Hexagonal- Tuile-Carte) – MartinB