Projektor Teil 6 - Das Steuerungs-Script
	
	MoH Projektor-Tutorial: Globales Steuer-Script
	
	
	
	
	
	
	
	
	
	
	
Das Steuer-Script
 
Vorneweg möchte
ich erwähnen, dass das script nur auf Funktionalität und
nicht auf logisches scripten aufbaut. Insofern sieht es in einigen
Teilen ein wenig unbeholfen aus. Hier könnte man durch einige
wenige scriptzeilen die threads „INIT“, „MOVIE_START“
und „MOVIE_MOVE“ ordentlich verkürzen. Wer also mag
kann das tuen und vielleicht seine Version auf unserer Page mal
posten!
 
Diese
Steuerscript beinhaltet alle notwendigen Threads zum Reibungslosen
Ablauf des Projektors mit Bild/Filmwiedergabe, Sound Sowie Qualm und
Funkenflug.
 
Im Nachfolgenden
seht ihr Auszüge der einzelnen Threads und eine kleine Erklärung
der Funktionen.
 
1.) Thread
„init“
 
Dieser wird vom
Map-Script aus aufgerufen und
 
	- Setzt die level-variabel
	„level.projector_isOn” auf 0. Solange dieser Wert „0“
	ist, wird kein Film gezeigt. 
	 
- Startet das verschieben der
	einzelnen, vorbelichteten Bilder auf die Leinwandposition
		 
- Macht die Bilder, das
	Projektorlicht und den Lichtstrahl unsichtbar 
	 
- Schaltet die Animation des
	Rauches und des Funkenflugs ab 
	 
- Initialisiert die Trigger
		 
//-------------------------------------------------------------
init:
//-------------------------------------------------------------
           
level.projector_isOn
= 0
           
           
//iprintlnbold "Warten auf
Film-Initialisierung"
 
           
thread movie_move
           
           
$projector_beam
hide    
           
$projector_corona
hide
           
$projector_sparks
anim stop
           
$projector_smoke
anim stop
           
           
$projector_face0
hide
           
$projector_face1
hide
           
$projector_face2
hide
usw…….
           
$projector_face38
hide
           
$projector_face39
hide
           
           
           
$projector_trigger
thread doprojector
           
$movie_effect_trigger
thread movie_effect
           
           
$projector_off_trigger
thread projector_off
           
$projector_off_trigger_effect
thread projector_off_effect
           
 
end
 
 
 
2.) Thread
„doprojector”
 
Die
Threadausführung wartet auf Aktivierung durch den
“Projector_trigger”, welcher ja im Startraum
durchschritten warden muß. Er startet den Projektorsound, das
Projektlicht und sorgt dafür,
dass der
Projektorlichtstrahl sichtbar wird und ein wenig flackert, solange
die Level-Variabel „level.projector_isOn” den Wert „1“
hat.
//------------------------------------------------------------------
doprojector:
//------------------------------------------------------------------
 
           
self waittill
trigger          
                       
           
$projector_speaker
loopsound projector
           
           
$projector_corona
show
           
           
level.projector_isOn
= 1
           
           
while(
level.projector_isOn == 1 )
           
{                                 
                       
$projector_beam
hide
                       
wait .01
                       
                       
if(level.projector_isOn
== 1 )
                       
                       
{
                                  
$projector_beam
show
                       
}
                       
                       
wait
.01           
           
}
           
           
end
 
 
3.)
Thread “projector_off”
 
Wird durch den
“projector_off_trigger” ausgelöst. Er stellt die
Level-Variabel „level.projector_isOn” wieder auf den Wert
„0“ und stellt das Projektorlicht und den Lichtstrahl auf
unsichtbar.
//-------------------------------------------------------------------
projector_off:
//-------------------------------------------------------------------
           
           
self waittill
trigger
           
           
level.projector_isOn
= 0
           
$projector_corona
hide
           
           
$projector_beam
hide    
           
 
end
 
4.)
Thread “projector_off_effect”
 
Wird durch den
“projector_off_trigger_effect” ausgelöst. Er
schaltet das Projektorgesurre ab, und startet und beendet die
Animation des Qualms und der Funken. Der Rauch wird nach jeweils 10
Sekunden weiter verkleinert und schließlich ganz gelöscht.
//---------------------------------------------------------------------
projector_off_effect:
//---------------------------------------------------------------------
 
           
self waittill
trigger
           
           
$projector_speaker
stoploopsound
           
$projector_sparks
anim start
           
wait 0.5
           
$projector_smoke
anim start
           
wait 10
           
$projector_smoke
scale 0.2
           
wait 10
           
$projector_smoke
scale 0.05
           
wait 10
           
$projector_smoke
anim stop
           
wait 2
           
$projector_smoke
delete
           
wait 5
           
$projector_sparks
anim stop
           
wait 1
           
$projector_sparks
delete
                       
 
           
end
 
 
5.)
Thread „movie_effect“
 
Wird ebenfalls
im Startraum durch den Player ausgelöst. Er
startet den thread „MOVIE_START“. Sonst nichts.
Warum ich dies so gelöst habe, weiß ich heute nicht mehr,
nur ging es irgendwie nicht anders.
//---------------------------------------------------------------------
movie_effect:
//---------------------------------------------------------------------
 
self
waittill trigger
 
thread
movie_start
 
end
 
 
 
6.) Thread
„movie_start“
 
Regelt das Ein-
und Ausblenden der bereits auf die Leinwandposition verschobenen
script_objects mit den Bildtexturen, unserem Film.
In Abhängingkeit
des Variabelnwertes „level.projector_isOn” werden
nacheinander alle Befehle abgearbeitet. Sollte sich zwischenzeitlich
der Variabelnwertes „level.projector_isOn” auf „0“
ändern, wird augenblicklich die Bilddarstellung gestoppt.
Der Wait-Befehl
0.04 zwischen dem Ein- und dem Ausblenden der Bildträger
erscheint zwar zuerst sehr klein, aber bedeutet das innerhalb einer
Sekunde 25 Bilder nacheinander dargestellt werden.
25 Bilder pro
Sekunde erlauben eine flüssige Darstellung von Bewegungen und
liegt etwa in der Framerate von AVI-Files.
 
movie_start:
 
if
(level.projector_isOn = = 1)
{
                       
$projector_face0
show
                       
wait 0.04
                       
$projector_face0
hide
                       
wait
0.04                     
                       
                       
if
(level.projector_isOn = = 1)
                       
{
                       
$projector_face1
show
                       
wait 0.04
                       
$projector_face1
hide
                       
wait
0.04                     
                       
}
                       
if
(level.projector_isOn = = 1)
                       
{
                       
$projector_face2
show
                       
wait 0.04
                       
$projector_face2
hide
                       
wait 0.04
                       
}
usw…..
                       
if
(level.projector_isOn = = 1)
                       
{
                       
$projector_face38
show
                       
wait 0.04
                       
$projector_face38
hide
                       
wait 0.04
                       
}
                       
if
(level.projector_isOn = = 1)
                       
{
                       
$projector_face39
show
                       
wait 0.04
                       
$projector_face39
hide
                       
wait 0.04
                       
}
                       
if
(level.projector_isOn = = 1)
                                  
{
                                  
goto movie_start
                                  
}
                                              
else
                                              
{
                                              
                                              
}
}
 
end
 
 
7.)
Thread “movie_move”
 
Dieser Thread
wird durch den “INIT-Thread” aufgerufen. Er verschiebt –
moveto - die Bildträger vom Beleuchtungsraum an die
Leinwandposition, welche durch das script_origin
„$movie_start_node.origin“ markiert ist. Speed
500 ist die Verschubgeschindigkeit. 
movie_move:
 
                       
$projector_face0
moveto $movie_start_node.origin
                       
$projector_face0
speed 500
                       
$projector_face0
waitmove
                       
$projector_face1
moveto $movie_start_node.origin
                       
$projector_face1
speed 500
                       
$projector_face1
waitmove
                       
$projector_face2
moveto $movie_start_node.origin
                       
$projector_face2
speed 500
                       
$projector_face2
waitmove
usw…..
                       
$projector_face38
moveto $movie_start_node.origin
                       
$projector_face38
speed 500
                       
$projector_face38
waitmove
                       
$projector_face39
moveto $movie_start_node.origin
                       
$projector_face39
speed 500
                       
$projector_face39
waitmove
                       
//                     
iprintlnbold "Fertig mit Bilderbewegen!"
                       
end
 
 
Speichert alle
eure Einträe in der Datei „cubus_projector.scr“ –
oder einer mit beliebigen Namen, im Verzeichnis „mainta/global“
ab. 
 
Wenn ihr jetzt
nochmals die Map startet, sollte euer Filmchen bereits laufen. Falls
ihr ne Waffe dabei habt, könnt ihr ja mal auf den Projektor
ballern……….
 
Am Ende des
Tutorials erfolgt wie gewohnt noch ein Nachwort
 
 
Einleitung
Vorbereitung
Shader
Radiant
Map-Script
Steuer-Script
Nachwort
 
© Das bbmd-Team / cubus 2005