//Semafor Samoczynnej Blokady Liniowej (SBL), trzykomorowy (sama głowica do bramki) - jako siódmy parametr we wpisie należy podać nazwę poprzedniego semafora SBL.
//Autorzy: Kudłacz, ZiomalCl

origin (p2) (p3) (p4)
rotate 0 (p5) 0
//model semafora 3komorowego blokady liniowej:
node 1000 0 (p1) model 0.415 1.2 0 0 sem/glowice/S3YPzcp_dd.t3d tabl/(p6) Lights 1 0 0 endmodel                  //glowica 

// pas awers
node 400 0 none triangle_strip material ambient: 150.0 150.0 150.0 diffuse: 220.0 220.0 220.0 specular: 154.0 154.0 154.0  endmaterial pkp/wskazniki2.BMP
0.1 9.3 0.32 	0.0 0.0 -1.0  0.00269513 0.756031 end
0.1 7.8 0.32 	0.0 0.0 -1.0  0.00269479 0.3411 end
-0.1 9.3 0.32 	0.0 0.0 -1.0  0.180528 0.75603 end
-0.1 7.8 0.32 	0.0 0.0 -1.0  0.182 0.3411 
endtri

// pas rewers
node 400 0 none triangle_strip material ambient: 150.0 150.0 150.0 diffuse: 220.0 220.0 220.0 specular: 154.0 154.0 154.0  endmaterial pkp/bial-czerw-pas.BMP
-0.1 9.3 0.32 	0 0 1.0  0.0 0.7 end
-0.1 7.8 0.32 	0 0 1.0  0.0 0.6 end
0.1 9.3 0.32 	0 0 1.0  1.0 0.7 end
0.1 7.8 0.32 	0 0 1.0  1.0 0.6 
endtri

rotate 0 0 0
endorigin

node -1 0 (p1)_sem_mem memcell (p2) (p3) (p4) SetVelocity -1 -1 none endmemcell

//zdarzenia okreslajace predkosc przy tym semaforze
event (p1)_sem_info_stop updatevalues 10.0 (p1)_sem_mem SetVelocity 0.0 20 endevent
event (p1)_sem_info_vmax updatevalues 1.0 (p1)_sem_mem SetVelocity -1 -1 endevent
event (p1)_sem_info_nextstop updatevalues 1.0 (p1)_sem_mem SetVelocity -1 0 endevent

//czerwone (tylko gdy sie swieci inne niz czerwone)
event (p1)_s1 multiple 2 (p1)_sem_mem (p1)_sem_ligh0 (p1)_sem_ligh1 (p1)_sem_info_stop (p7)_s5 condition memcompare * -1 * endevent
event (p1)_sem_ligh1 lights 1 (p1) 0 1 0 endevent

//zielone (tylko gdy sie swieci zolte)
event (p1)_s2 multiple 2 (p1)_sem_mem (p1)_sem_ligh0 (p1)_sem_ligh2 (p1)_sem_info_vmax  condition memcompare * -1 0 endevent
event (p1)_sem_ligh2 lights 1 (p1) 1 0 0 endevent

//zolte (tylko gdy sie swieci czerwone)
event (p1)_s5 multiple 2 (p1)_sem_mem (p1)_sem_ligh0 (p1)_sem_ligh5 (p1)_sem_info_nextstop (p7)_s2 condition memcompare * 0 20 endevent
event (p1)_sem_ligh5 lights 1 (p1) 0 0 1 endevent

//odczyt z pamieci (zdarzenie przypisane do toru przy semaforze):
event (p1)_sem_info getvalues 0 (p1)_sem_mem endevent

//dodatkowo mozliwosc wygaszenia tego i poprzednich semaforow:
event (p1)_ciemny multiple 20 none (p1)_sem_ligh0 (p1)_sem_info_vmax (p7)_ciemny endevent
event (p1)_sem_ligh0 lights 0.0 (p1) 0 0 0 endevent

// uszkodzony semafor - nieoswietlony:
event (p1)_uszk multiple 0 none (p1)_sem_ligh0 (p7)_s1 (p1)_sem_info_stop endevent