Zgadza się. Czasami jednak w "ferworze walki" można namieszać i zaczyna się debuging :)
Dodano: 25 Września 2012, 09:34:15
Mój problem dotyczy ograniczeń prędkości dla AI.
Dążę do tego, żeby nie wstawiać
Velocity w torach. W zamian tego chciałbym ograniczać prędkość przez zdarzenie
PutValues z parametrem
SetVelocity umieszczone w inc'u przypisanym do toru gdzie ma się zaczynać i kończyć ograniczenie prędkości.
Rozwiązanie to ma taką zaletę, że nie trzeba używać n-razy tego samego wpisu dla całej grupy torów. Potrzebne są tylko 2 wpisy w torach.
Jako, że
_distinfo przestał działać, zmodyfikowałem więc odpowiednio w9.inc:
// ograniczenie prędkości, parametry:
//---------------w9---------------
//param: textura, x, z, y, kat
//początek ograniczenia
event (p1)_wja putvalues 0.0 none (p2) (p3) (p4) SetVelocity (p8) (p8) endevent
//minięciu końca ograniczenia
event (p1)_wyj putvalues 0.0 none (p2) (p3) (p4) SetVelocity -1 -1 endevent
origin (p2) (p3) (p4)
rotate (p6) (p5) (p7)
node 400 0 none model 0 0 0 0 ip/pkp/w9.t3d none endmodel
rotate 0 0 0
endorigin
Zdarzenie
ogr1_wja podpięte do toru, przy którym stoi w9 o nazwie ogr1.
Zdarzenie
ogr2_wyj podpięte do toru, przy którym stoi w9 o nazwie ogr2.
1. Wjazd AI na ograniczenie.
W exe 355 były problemy ze zbyt gwałtowną reakcją - opisywałem to tu:
http://eu07.pl/forum/index.php/topic,22058.msg307544.html#msg307544.
W exe 372 @Ra znacząco poprawił hamowanie - teraz wygląda to naprawdę dobrze. Siła hamowania jest tak dobrana, żeby płynnie osiągnąć właściwą prędkość przy ogr1.
2. Wyjazd z ograniczenia.
W exe 355 AI zaczynał przywracać prędkość rozkładową już kilkadziesiąt metrów przed ogr2. Ratowałem się takim rozwiązaniem:
// ograniczenie prędkości, parametry:
//---------------w9---------------
//param: textura, x, z, y, kat
//komorka do warunku zawsze spelnionego
node -1 0 DoNiczego memcell 111.0 111.0 111.0 Wait_for_orders 0 0 none endmemcell
//poczatek ograniczenia w9:
event (p1)_wja putvalues 0.0 none (p2) (p3) (p4) SetVelocity (p8) (p8) endevent
//
//koniec ograniczenia - ominiecie zbyt wczesnego przyspieszania wywolanego
//skanowaniem torow przez dodanie zawsze spelnionego warunku
//teraz AI nie widzi wczesniej predkosci przy skanowaniu
//i dowiaduje sie o niej dopiero gdy najezdza na tor z eventem
event (p1)_wyj multiple 1.0 DoNiczego (p1)_y condition memcompare * 0 0 endevent
event (p1)_y putvalues 0.0 none (p2) (p3) (p4) SetVelocity -1 -1 endevent
origin (p2) (p3) (p4)
rotate (p6) (p5) (p7)
node 400 0 none model 0 0 0 0 ip/pkp/w9.t3d none endmodel
rotate 0 0 0
endorigin
I to działało całkiem dobrze.
W exe 372 nie zmieniło się zachowanie AI dla pierwszego przykładu inc'a, ale niestety przestał działać zabieg z przykładu drugiego- zdarzenie się wywołuje, ale AI nie reaguje na nie.
W związku z powyższym mam 2 pytania (wiedząc że 372 jest wersją do testowania):
1) Czy docelowo możliwe jest zmuszenie AI do odpowiedniej reakcji na koniec ograniczenia?
Widziałbym to tak: gdy AI wyskanuje zdarzenie
PutValues z parametrem
SetVelocity nakazujące zwiększyć prędkość, AI czeka aż do wjechania na tor do którego to zdarzenie jest przypisane. W przypadku zdarzenia nakazującego zmniejszenie prędkości nic zmieniać nie trzeba, bo jest OK.
2) Jeśli odp. na pytanie pierwsze jest negatywna, to czy jest szansa żeby docelowo zdarzenie
PutValues z parametrem
SetVelocity działało też w przypadku wywołania go z innego zdarzenia
condition (tak jak to było w 355)?