Jak mogę zapewnić symetrię pola widzenia w Roguelike?

10

Pracuję nad Roguelike i do tego stworzyłem algorytm śledzenia pola widzenia (FoV), który polega na kreśleniu linii Bresenhama do każdego punktu w jednolitym okręgu. Jest wolny od artefaktów (i dość wydajny), ale brakuje mi ważnego wymogu mojego: symetrii (jeśli widzisz potwora, musi on także cię widzieć).

wprowadź opis zdjęcia tutaj

Oto przykład niesymetrycznego zachowania mojego kodu. Na lewym obrazku stoję w rogu (czerwone „X” bloki = ściana). Widzę kafelki w prawym górnym rogu. Jeśli jednak przejdę do jednego z tych kafelków (prawy obraz), nie widzę już kafelka, z którego pochodzę.

Wydaje mi się, że mogę mieć formę Permissive Field of View , ale tylko dlatego, że artykuł Roguebasina sugerował, że dopuszcza to symetrię. Czy istnieją alternatywne sposoby uzyskania symetrii?

Pan Smith
źródło
1
Upewnij się tylko, że punkt oka znajduje się w tej samej pozycji, w której rzucasz promień podczas testowania widoczności.
MichaelHouse

Odpowiedzi:

8

Wygląda na to, że dołączasz kwadrat, gdy widzisz w nim dowolny punkt, gdy oko znajduje się w jednym stałym punkcie.

Należy jednak uwzględnić kwadrat tylko wtedy, gdy widać jego środek (zakładając, że „oko” znajduje się również na środku). Lub możesz narysować promienie z każdego rogu kwadratu początkowego do narożników testowanego kwadratu, jeśli widzisz dowolny z nich, to dołącz.

Kluczową kwestią jest to, że hitbox kwadratu powinien także obejmować wszystkie miejsca, w których musi znajdować się oko.

maniak zapadkowy
źródło