Virtuální realita - úloha č. 3 - Dynamický svět
Každé auto má svuj TouchSensor, TimeSensor a OrientationInterpolator.
Cesta je následující:
Navíc, všechna auta sdílí AudioClip uzel, který je aktivovaný pres TouchSensor.touchTime.
Prvy vozen v rade reaguje Touch senzorom na aktivaciu, nasledkom coho sa spusti animacia ovladana TimeSenzorom zobrazujuca cestu vozika po horskej drahe. V tom istom momente a na zaklade tej istej odoslanej udalosti sa spusti aj zvukovy zaznam uhanajuceho vlaku. Atrakcia obsahuje aj Proximity senzor spinajuci 5 svetiel rozmiestnenych nad celym modelom, a majucich vlastnost menit farbu zo zahlavia prototypu.
1.ROUTE DotykVozna1.touchTime TO CasovacVozna1.startTime 2.ROUTE CasovacVozna1.fraction_changed TO PIVozna1_1.set_fraction 3.ROUTE CasovacVozna1.fraction_changed TO PIVozna1_2.set_fraction 4.ROUTE CasovacVozna1.fraction_changed TO OIVozna1.set_fraction 5.ROUTE PIVozna1_1.value_changed TO Vozen1Rota.translation 6.ROUTE PIVozna1_2.value_changed TO Vozen1.translation 7.ROUTE OIVozna1.value_changed TO Vozen1Rota.rotation 8.ROUTE CasovacVozna1.fraction_changed TO OIVozna1_2.set_fraction 9.ROUTE OIVozna1_2.value_changed TO Vozen314.rotation 10.ROUTE MightyHand.translation_changed TO otocenyVlacik.translation 11.ROUTE DotykVozna1.touchTime TO ZvukVlaku.startTime 22.ROUTE DotykVozna1.touchTime TO CasovacZvuku.startTime 13.ROUTE CasovacZvuku.cycleTime TO skript.dobaVlacika 14.ROUTE skript.vybuch TO CasovacZvuku2.startTime 15.ROUTE CasovacZvuku2.startTime TO ZvukVybuchu.startTime 16.ROUTE CasovacZvuku2.startTime TO ZvukVlaku.stopTime 17.ROUTE ProxySenz.isActive TO VlakoveSvetlo.on
Ukazka routovacich ciest v programe. Prvou cestou je put informacie o dotyku vozika, starteru casovaca. V nasledujucich troch ROUTOCH sa nachadzaju tri koridori na posielanie impulzov trom roznym urovniam transformu prveho vozika. Tri urovne som bol nuteny vytvorit vzhladom na dynamicky meniace sa poziadavky na polohu osi otacania vozika v priebehu jeho cesty drahou. nasledujuce ROUTY, tieto impulzy prevadzaju na jednotlive body na trati, a posielaju ich detaily jednotlivym transformom. ROUTY 8 a 9 sa staraju o spravne natocenie vozika v pripade otocenia sa do protismeru. 9.ROUT je MightyHand manipulator, jeho nazov plynie z toho ze je mozne aktivaciou manipulatora pohybovat celym vozikom po vodorovnej ploche. Jedna sa o vozik umiestneny mimo kolaji. ROUT 11 sa stara o spustenie opakujucej sa slucky zvukoveho zaznamu iduceho vlaku. Taktiez sa spusti casovac zvuku, ktory je pomocnym casovacom a neskor nam umozni odpalit velkolepe zvukove finale animacie. Aby sme dosiahli presnu aktivaciu zvukoveho zaznamu s ohladom na pozadovany cas, pozujijeme skript "skript". Skript "skript" umozni casovacuZvuku2 spustit zvukovy zaznam vybuchu. V tom istom case sa ukonci cinnost zvukovej slucky iduceho vlaku. Posledny ROUT sa tyka proximity senzora, a jeho aktivacie svetla nad atrakciou.
Kolotoc ma tri rezimy: v klidovem rezimu se nehybe, v automatickem rezimu se otaci a ramena se zvedaji automaticky, v manualnim rezimu se aktivni labut ovlada rucne pakou, zbyle se hybou samy.
Tlacitkem na sloupku u kolotoce se kolotoc prepina mezi klidovym a automatickym rezimem.
Kliknutim na labut do ni nasedneme, opetovnym kliknutim vysedneme. Behem jizdy v labuti se avatar nemuze hybat, pouze se muze otacet. Labut, ve ktere avatar sedi, budeme oznacovat jako aktivni.
V labuti je k dispozici ovladaci panel s tlacitkem a pakou. Pomoci tlacitka prepiname mezi klidovym rezimem a manualnim rezimem kolotoce (tj. zapneme otaceni). Pomoci paky nastavujeme aktualni uhel zvednuti celeho ramene.
Pri prechodu do klidoveho stavu labute automaticky sjednou dolu, aby bylo mozne nastupovat resp. vystupovat.
Pri otaceni rotoru kolotoce se zaroven animuje barva kuzele rotoru.
V blizkosti kolotoce se zapne svetlo umistene nad stredem rotoru.
Ramena se generuji na zacatku dynamicky pomoci skriptu.
Nektere - ROUTEs se vytvareji resp. rusi dynamicky.
ROUTE Kototoc_proximity.isActive TO Svetlo_1.on ROUTE OvladaciPanelKolotoce.tlacitkoTouchTime_changed TO Rotor.prepnuti ROUTE OvladaciPanelKolotoce.tlacitkoTouchTime_changed TO Tlacitko_klik.startTime
EXTERNPROTO Rotor [ eventIn SFTime prepnuti eventIn SFBool set_otaceni_vypnuto eventIn SFBool set_otaceni_zapnuto ] "rotor.wrl#Rotor"
ROUTE Rizeni_rotoru.start_changed TO Casovac_rotoru.startTime ROUTE Rizeni_rotoru.stop_changed TO Casovac_rotoru.stopTime ROUTE Casovac_rotoru.fraction_changed TO Rotor_otaceni_interpolator.set_fraction ROUTE Casovac_rotoru.fraction_changed TO Barevny_interpolator.set_fraction ROUTE Barevny_interpolator.value_changed TO Rizeni_rotoru.set_barva_kuzele ROUTE Rotor_otaceni_interpolator.value_changed TO Rotor_T.rotation ROUTE Rizeni_rotoru.novaRamena TO Ramena.addChildren ROUTE Ramena.children_changed TO Rizeni_rotoru.nastavRamena
add ramena[i].aktivniRameno_changed TO Rizeni_rotoru.set_aktivniRameno
add ramena[i].otaceniAktivni_changed TO Rizeni_rotoru.prepnuti
add Rizeni_rotoru.prepnuti TO ramena[i].prepniAutomatickeZvedani
delete Rizeni_rotoru.prepnuto TO ramena[noveAktivni].prepniAutomatickeZvedani
add Rizeni_rotoru.prepnuto TO ramena[puvodniAktivni].prepniAutomatickeZvedani
EXTERNPROTO Labut [ eventOut SFTime touchTime eventOut SFFloat hodnotaPaky_changed eventOut SFBool tlacitkoZapnuto_changed eventOut SFTime tlacitkoTouchTime_changed eventIn SFFloat set_initHodnotaPaky ] "labut.wrl#Labut"
ROUTE Aktivator.touchTime TO Rizeni.set_aktivatorTouchTime ROUTE OvladaciPanel.hodnotaPaky_changed TO Rizeni.set_hodnotaPaky ROUTE OvladaciPanel.tlacitkoZapnuto_changed TO Rizeni.set_tlacitkoZapnuto ROUTE OvladaciPanel.tlacitkoTouchTime_changed TO Rizeni.set_tlacitkoTouchTime ROUTE Rizeni.initHodnotaPaky_changed TO OvladaciPanel.set_initHodnotaPaky ROUTE Rizeni.aktivatorPovolen_changed TO Aktivator.enabled ROUTE Rizeni.panelPovolen_changed TO OvladaciPanel.set_panelPovolen
EXTERNPROTO Paka [ eventOut SFFloat hodnota_changed eventIn SFFloat set_initHodnotaPaky eventIn SFBool set_povolena ] "ovladaci-panel.wrl#Paka"
ROUTE SenzorPaky.rotation_changed TO PakaRotation.rotation ROUTE SenzorPaky.rotation_changed TO Rizeni.set_angle ROUTE Rizeni.povolena_changed TO SenzorPaky.enabled
EXTERNPROTO Tlacitko [ eventOut SFBool zapnuto_changed eventOut SFTime touchTime eventIn SFBool set_povoleno ] "ovladaci-panel.wrl#Tlacitko"
ROUTE Senzor.touchTime TO Rizeni.set_touchTime ROUTE Rizeni.povoleno_changed TO Senzor.enabled
EXTERNPROTO OvladaciPanelLabute [ eventOut SFFloat hodnotaPaky_changed eventOut SFBool tlacitkoZapnuto_changed eventOut SFTime tlacitkoTouchTime_changed eventIn SFFloat set_initHodnotaPaky eventIn SFBool set_panelPovolen ] "ovladaci-panel.wrl#OvladaciPanelLabute"
ROUTE PakaNaUhelRamene.hodnota_changed TO Rizeni.set_hodnotaPaky ROUTE Tlacitko.touchTime TO Rizeni.set_tlacitkoTouchTime ROUTE Tlacitko.zapnuto_changed TO Rizeni.set_tlacitkoZapnuto ROUTE Rizeni.initHodnotaPaky_changed TO PakaNaUhelRamene.set_initHodnotaPaky ROUTE Rizeni.panelPovolen_changed TO PakaNaUhelRamene.set_povolena ROUTE Rizeni.panelPovolen_changed TO Tlacitko.set_povoleno
EXTERNPROTO OvladaciPanelKolotoce [ eventOut SFTime tlacitkoTouchTime_changed ] "ovladaci-panel.wrl#OvladaciPanelKolotoce"
ROUTE Tlacitko.touchTime TO Rizeni.set_tlacitkoTouchTime
EXTERNPROTO Pist_jednoduchy [ eventIn SFFloat set_delka_pistu ] "rameno.wrl#Pist_jednoduchy"
ROUTE Rizeni_pistu.delka_pistu_changed TO Rizeni_pistu.set_delka_pistu
EXTERNPROTO Rameno [ eventIn SFFloat set_uhel_zvednuti_nosniku eventOut SFInt32 aktivniRameno_changed eventOut SFTime otaceniAktivni_changed ] "rameno.wrl#Rameno"
ROUTE Rizeni_ramene.delka_pistu_changed TO Pist_pod_ramenem.set_delka_pistu ROUTE LabutNaRameni.hodnotaPaky_changed TO Rizeni_ramene.set_uhel_zvednuti_fraction ROUTE Rizeni_ramene.uhel_zvednuti_value_changed TO Rizeni_ramene.set_uhel_zvednuti_nosniku ROUTE LabutNaRameni.touchTime TO Rizeni_ramene.set_ramenoKliknuto ROUTE Rizeni_ramene.labutAktivni_changed TO LabutiViewpoint.set_bind ROUTE Rizeni_ramene.labutAktivni_changed TO LabutiNavigation.set_bind ROUTE Rizeni_ramene.labutPripravena_changed TO LabutNaRameni.set_aktivatorPovolen ROUTE Rizeni_ramene.labutAktivni_changed TO LabutNaRameni.set_panelPovolen ROUTE Zigzag_interpolator.value_changed TO Cos_interpolator.set_fraction ROUTE Cos_interpolator.value_changed TO Rizeni_ramene.set_uhel_zvednuti_fraction ROUTE LabutNaRameni.tlacitkoTouchTime_changed TO Rizeni_ramene.set_otaceniAktivni ROUTE Rizeni_ramene.initHodnotaPaky_changed TO LabutNaRameni.set_initHodnotaPaky ROUTE Casovac_ramene_jeden_pohyb.fraction_changed TO Fazovy_posun.set_fraction ROUTE Fazovy_posun.value_changed TO Cos_interpolator.set_fraction
ROUTE Casovac_ramene.fraction_changed TO Zigzag_interpolator.set_fraction
EXTERNPROTO KonkretniRameno [ eventOut SFInt32 aktivniRameno_changed eventOut SFTime otaceniAktivni_changed eventIn SFBool set_labutAktivni eventIn SFBool set_labutPripravena eventIn SFTime prepniAutomatickeZvedani eventIn SFTime spustitRamenoDolu ] "rameno.wrl#KonkretniRameno"
KonkretniRameno slouzi jako proxy pro Rameno.
ROUTE R.aktivniRameno_changed TO Rizeni.set_aktivniRameno ROUTE R.otaceniAktivni_changed TO Rizeni.set_otaceniAktivni ROUTE Rizeni.labutAktivni_changed TO R.set_labutAktivni ROUTE Rizeni.labutPripravena_changed TO R.set_labutPripravena ROUTE Rizeni.prepniAutomatickeZvedani_changed TO R.prepniAutomatickeZvedani ROUTE Rizeni.spustitRamenoDolu_changed TO R.spustitRamenoDolu