A co robi skrypt gdy bohater bedzie stał na tym polu z terrain tagiem.
Chodzi o taką sytuację?
Szczerze to nie mam pojęcia, bo skrypt pisałem z założeniem, że do takiej sytuacji nigdy nie dojdzie, ale zapewne nie jest wtedy widoczny w ogóle.
Chodzi o to żeby przeciwnik widział naszego bohatera kiedy stoi na pierwszym z kolejności od przeciwnika polu z terrain tagiem.
Zauważ, że te rozwiązanie też ma spore wady - jeśli gracz i event ułożą się równolegle do ściany o kącie 45 stopni to gracz nie zostanie zauważony.
Znów mamy do czynienia z większym błędem po naprawie mniejszego.
Ale jakby połączyć moje rozwiązanie z rozwiązaniem Lyserga:
A więc tak kolor żółty to inny terrain tag, jak którego skrypt napotka to sprawdza od następnej "rysowanej" kratki te dwie po bokach, jeśli obie są na nie widzi - przerywa sprawdzanie, jeśli chociaż jedna jest na widzi - sprawdza dalej.
To wymagało by zapisanie współrzędnych tej pierwszej napotkanej kratki (x1,y1) z terrain tagiem (nie tym blokującym) i następnej(x2,y2), potem od współrzędnych tej pierwszej odjąć tej drugiej i sprawdzić kratki: (x2+(x1-x2), y2) i (x2, y2+(y1-y2)) - myślę że się nie pomyliłem.
To wymagało by zapisanie współrzędnych tej pierwszej napotkanej kratki (x1,y1) z terrain tagiem (nie tym blokującym)
Tylko nie jestem pewien czy da się sprawdzić, czy dany tile jest zablokowany czy nie.
Mimo wszystko metoda Lyserga będzie chyba najlepsza, bo nie trzeba budować mapy w określony sposób (czego chciałeś raczej uniknąć), nie trzeba zapisywać żadnych współrzędnych etc.
Wystarczy tylko określić na początku położenie gracza względem eventu, w której ćwiartce układu współrzędnych o środku o współrzędnych równych lokacji eventu (można pominąć sprawdzanie zupełnie jeśli gracz znajduje się centralnie w linii prostej przed eventem) i potem dodać tylko sprawdzenie odpowiednich kratek obok piksela rysowanej linii.
Jutro może się tym zajmę.
Mógłbyś przy okazji też dodać ten pierwszy warunek o który pytałem? Ten z przyleganiem do ściany. Raczej nie będzie to problem i chyba najlepiej by był sprawdzony na początku, zanim skrypt zacznie sprawdzać pola. Przed sprawdzaniem sprawdzi czy różnica współrzędnych X = 1 i różnica współrzędnych Y = 1 i czy któreś z pól z 2 sąsiednich dla obu zdarzeń pól ma terrain tag i wtedy zwraca FALSE, w przeciwnym razie zaczyna dopiero sprawdzanie tych pól wszystkich. No i żeby sprawdzało to przyleganie najlepiej dla Switcha jakiegoś. Nie jest to wprawdzie idealne rozwiązanie ale powinno wystarczyć na moje potrzeby.
Taki szkic warunku mniej więcej
|x| - wartości bezwzględne
&& - AND
|| - OR
a metody itp. są zmyślone, po prostu chodzi mi o pokazanie sensu tego.
px=player.x
py=player.y
ex=event.x
ey=event.y
if switch == true
if (|px-ex|==1 && |px-ey|==1) && (pole(px,ey).tag==ustalony_tag || pole(ex,py).tag==ustalony_tag)
return false
end
end
...
INSTRUKCJE DALSZE (SPRAWDZANIE PÓL)
Przeciwnik 2 powinien nas logicznie widzieć, a warunek będzie spełniony więc zwróci FALSE. Załatanie tego to więcej roboty bo chyba musiałyby być 4 warianty, dla przylegania do każdej z 4 krawędzi. Po prostu trzeba nie robić mapek które takie coś mogą spowodować : )
----------------------------------------------------------------------
EDIT2:
Jeszcze jedno pytanie, dałoby radę w jakiś sposób zablokować widzenie dla eventa? Bo jak dasz np. event między Tobą a wrogiem, to on Cie widzi. Chciałbym mieć możliwość zablokowania tego (dla konkretnych eventów powiedzmy, np. dodając komentarz jakiś w tym evencie).
Niech za przykład poruszy ruchoma skrzynia za którą musimy się chować, a ona się porusza.
Jak tam, coś ruszyło w tej sprawie? Jeśli nie to spróbuje sam to sobie zrobić na eventach (najlepiej common żeby nie musieć kopiować to do każdego). Tylko nie wiem jak z wydajnością.