Autor Wątek:  change_vel-zmiana prędkości AI  (Przeczytany 4367 razy)

0 użytkowników i 1 Gość przegląda ten wątek.

Offline Benek

  • Moderator
  • Wiadomości: 4504
  • fb.com/benek.maszyna
    • Zobacz profil
    • Moja strona o MaSzynie
  • Otrzymane polubienia: 17
change_vel-zmiana prędkości AI
« dnia: 08 Stycznia 2011, 09:43:19 »
Pojawił się problem przy pisaniu scenariusza w następującej sytuacji:
Lokomotywa AI startuje ze stacji. Dostaje wyjazd na sygnał S10 (jazda z prędkością 40 km/h, a potem z największą dozwoloną prędkością). Po przejechaniu zwrotnicy AI nie potrafił się rozpędzić, podążał z małą prędkością. Ogólnie czasem zachodzi potrzeba zmiany prędkości w sytuacji, gdy AI nie mija semafora. Z tego względu stworzyłem plik change_vel.inc. Kod przedstawia się następująco:

//"Semafor" fizycznie nieistniejący, pozwalający zadać AI różne prędkości.
//Autor: Benek

//Przykładowy wpis ma postać:  include;change_vel.inc;unvissem;;;;;;;end    gdzie unvissem to dowolna nazwa, wpisana przez //usera

// PODSTAWOWE ZDARZENIA:


//odczyt z pamieci (zdarzenie przypisane do toru, z którego chcemy nadać wybraną prędkość):
event (p1)_change_vel getvalues 1.0 (p1)_mem endevent


//ustawienie prędkości, którą chcemy nadać AI
event (p1)_0 updatevalues 1.0 (p1)_mem SetVelocity 0.0 0.0 endevent
event (p1)_20 updatevalues 1.0 (p1)_mem SetVelocity 20 * endevent
event (p1)_30 updatevalues 1.0 (p1)_mem SetVelocity 30 * endevent
event (p1)_40 updatevalues 1.0 (p1)_mem SetVelocity 40 * endevent
event (p1)_50 updatevalues 1.0 (p1)_mem SetVelocity 50 * endevent
event (p1)_60 updatevalues 1.0 (p1)_mem SetVelocity 60 * endevent
event (p1)_70 updatevalues 1.0 (p1)_mem SetVelocity 70 * endevent
event (p1)_80 updatevalues 1.0 (p1)_mem SetVelocity 80 * endevent
event (p1)_90 updatevalues 1.0 (p1)_mem SetVelocity 90 * endevent
event (p1)_100 updatevalues 1.0 (p1)_mem SetVelocity 100 * endevent
event (p1)_120 updatevalues 1.0 (p1)_mem SetVelocity 120 * endevent
event (p1)_140 updatevalues 1.0 (p1)_mem SetVelocity 140 * endevent
event (p1)_160 updatevalues 1.0 (p1)_mem SetVelocity 160 * endevent
event (p1)_max updatevalues 1.0 (p1)_mem SetVelocity -1 * endevent


//memcell do pamietania predkosci:
node -1 0 (p1)_mem memcell 0.0 0.0 0.0 SetVelocity 0.0 0.0 none endmemcell
Jak widać, pozwala on zmienić prędkości AI w dość dużym zakresie i z małym skokiem, aczkolwiek obawiam się, że nie zauważy się różnic między 70 a 80 km/h. Można dostrzec, iż ten "semafor" opisuje tylko 1 parametr: p1. Zaczepiony on jest defualtowo w początku układu współrzędnych. Używa się go identycznie jak semafora. Ba, jak się sprytnie użyje eventów, to wystarczy zaincludować tylko jeden plik change_vel.inc.
Post napisałem, ponieważ niebawem wyjdzie nowa sceneria z załączonym tymże plikiem. Jeśli ktoś pisze scenariusze, to warto by wiedział o jego istnieniu. Również jeżeli ktoś ma jakieś uwagi co do składni, to proszę pisać.
 
« Ostatnia zmiana: 08 Stycznia 2011, 15:11:50 wysłana przez Benek »

Offline Quark-t

  • Administrator
  • Wiadomości: 3590
  • Automaty liczą...
    • Zobacz profil
  • Otrzymane polubienia: 47
Odp: change_vel-zmiana prędkości AI
« Odpowiedź #1 dnia: 08 Stycznia 2011, 13:56:06 »
Pytanie - jak "inicjalizujesz" skład? Czasem ignorowanie velocity przy semaforze wynika z "wystartowania" składu z zadaną prędkością początkową. Gdy go uruchomisz np. przez memcelle, to skład może zareagować.
Pozdrawiam, dr inż. Quark-t

Offline AtapiCl

  • Zasłużony dla Symulatora
  • Wiadomości: 4426
    • Zobacz profil
    • O warszawskiej części linii kolejowej nr 7 Warszawa – Lublin i nie tylko ;)
  • Otrzymane polubienia: 212
Odp: change_vel-zmiana prędkości AI
« Odpowiedź #2 dnia: 08 Stycznia 2011, 14:05:32 »
Tylko że od zmiany prędkości AI przy wyjeździe na szlak jest wskaźnik W5 i jego event :)

Offline Benek

  • Moderator
  • Wiadomości: 4504
  • fb.com/benek.maszyna
    • Zobacz profil
    • Moja strona o MaSzynie
  • Otrzymane polubienia: 17
Odp: change_vel-zmiana prędkości AI
« Odpowiedź #3 dnia: 08 Stycznia 2011, 15:02:48 »
Pytanie - jak "inicjalizujesz" skład? Czasem ignorowanie velocity przy semaforze wynika z "wystartowania" składu z zadaną prędkością początkową. Gdy go uruchomisz np. przez memcelle, to skład może zareagować.
Skład ma prędkość początkową 0.1, nabiera prędkości poprzez wyzwolenie eventu0/event2. O event0 dla jadącego pojazdu pisał Bohun.
Tylko że od zmiany prędkości AI przy wyjeździe na szlak jest wskaźnik W5 i jego event :)
Przyjrzę się temu...


   « Dodano: 08 Stycznia 2011, 22:49:47 »
Rzeczywiście, sposób ze wskaźnikiem W5 jest równie dobry. Czasem tylko trzeba dopisać do odcinków torów parametr velocity i w ten sposób ograniczyć prędkość AI. Podsumowując, na razie nie będę korzystał z tego inc-a, chociaż idea nie była całkowicie zła. Wątek zamykam.
« Ostatnia zmiana: 08 Stycznia 2011, 22:49:47 wysłana przez Benek »