Como garantir a simetria do campo de visão em um Roguelike?

10

Estou trabalhando em um Roguelike e, para isso, criei um algoritmo de campo de visão (FOV) de rastreamento de raios / vazamento que consiste em plotar as linhas de Bresenham em todos os pontos de um círculo sólido. É livre de artefatos (e razoavelmente eficiente), mas está faltando um requisito importante meu: simetria (se você pode ver um monstro, ele também deve ser capaz de vê-lo).

insira a descrição da imagem aqui

Aqui está um exemplo do comportamento não simétrico do meu código. Na imagem da esquerda, estou em um canto (blocos vermelhos 'X' = parede). Consigo ver os ladrilhos do canto superior direito. No entanto, se eu mudar para um desses blocos (imagem à direita), não consigo mais ver o bloco de onde vim.

Acho que posso estar atrás de uma forma de campo de visão permissivo , mas apenas porque o artigo de Roguebasin sugeriu que ele permitia simetria. Existem meios alternativos para obter simetria?

Senhor Smith
fonte
1
Apenas verifique se o ponto do olho está na mesma posição que você está lançando o raio ao testar a visibilidade.
MichaelHouse

Respostas:

8

Parece que você inclui um quadrado quando pode ver qualquer ponto nele enquanto o olho está no único ponto fixo.

No entanto, você deve incluir apenas um quadrado quando puder vê-lo no meio (supondo que o "olho" também esteja no meio). Ou você pode desenhar raios de cada canto do quadrado inicial para os cantos do quadrado testado, se puder ver algum de qualquer um deles incluir.

O ponto principal é que a caixa de acerto de um quadrado também deve ser todos os locais onde o olho deve estar.

catraca arrepiante
fonte