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