Primeiro - eu sei que estou sendo superdensa aqui.
Com isso fora do caminho, estou tentando escrever uma implementação em C # deste algoritmo:
var results = []
for each -N ≤ dx ≤ N:
for each max(-N, -dx-N) ≤ dy ≤ min(N, -dx+N):
var dz = -dx-dy
results.append(cube_add(center, Cube(dx, dy, dz)))
Eu tirei isso deste tremendo recurso.
Meu problema é que todas as implementações que tentei até agora tiveram resultados loucos. Por exemplo, o código mostrado abaixo atualmente resulta nisso:
e isto:
Meu código atualmente fica assim:
for (int x = this.CellPositionX - distance; x <= this.CellPositionX + distance; x++)
{
for (int y = this.CellPositionY - Math.Max(-distance, -x - distance); y <= this.CellPositionY + Math.Min(distance, -x + distance); y++)
{
HexPosition rangePosition = new HexPosition(x, y);
range.Add(rangePosition);
}
}
Alguém pode encontrar algo errado aqui? Todas as sugestões são bem-vindas. Eu tenho batido minha cabeça nisso há um tempo agora.
Obrigado!
Nota atualizada: estou usando coordenadas axiais na grade. Atualização # 2: como indicado abaixo, eu tive meu loop for..each errado e não estava usando deltas para o trabalho. Obrigado pela ajuda!
Atualmente, tenho um problema, como mostrado abaixo, com a implementação das respostas:
Vou continuar investigando - se eu descobrir, postarei os resultados completos aqui. Obrigado a todos!