Trigger und Zonen erstellen
Aus PantheonWiki
Es können nicht nur in der Map (siehe Mapformat) Zonen mit Triggern, Lights und Sounds erstellt werden, sondern auch direkt in Ruby.
Begriffserklärung
- Zone: Eine Zone kann aus mehreren Bereichen (GameAreas) bestehen und bietet die Möglichkeit diesen Bereichen Sounds, Lights und Trigger hinzuzufügen. Wird mit Hilfe des ZoneManagers erstellt.
- GameArea: Ein bestimmtes Gebiet, meist Teil einer Zone und im Spiel als grüner Kollisionskörper zu sehen. Muss nicht direkt erstellt werden, sondern wird mit Hilfe des ZoneManagers erzeugt und zu einer Zone hinzugefügt.
- Trigger: Eine Art Schalter, der beim Betreten einer Zone aktiviert, und beim Verlassen einer Zone deaktiviert wird. Von dieser Klasse kann in Ruby geerbt werden (siehe Ordner common/scripts/triggers)
Einfache Trigger erstellen
In areahelper.rb sind verschiedene Hilfsfunktionen definiert um das Erstellen von Triggern zu vereinfachen:
require "areahelper.rb"
# ein Trigger, der unendlich oft ausgeführt wird
# _CreateTrigger(uniquename, geometrytype, position_vector, orientation_quaternion, size_vector, enter_proc, leave_proc)
# Beispiel:
_CreateTrigger("testtrigger", PhysicsManager::GT_SPHERE, [3,0,-9], [1,0,0,0], [4,4,4], %q{print "entered";})
# Mit dem %q{...} wird ein String übergeben, der auch gespeichert werden kann. Zur Ausführung wird der String in ein Proc
# umgewandelt (Achtung: lokale Variablen aus dem Proc werden nicht gespeichert!)
# Das leave_proc ist optional und kann weggelassen werden.
# Alle Geometrie-Typen bis auf CONVEXHULL, MESH und NONE können verwendet werden.
# Analog dazu ein Trigger, der nur einmal ausgeführt wird (danach wird die Zone mit Trigger gelöscht)
_CreateOneTimeTrigger("testtrigger2", PhysicsManager::GT_BOX, [4,0,-5], [1,0,0,0], [9,3,6], nil, %q{print "left";})
# Hier wird eine Box erstellt, die nur beim Verlassen eine Nachricht auslöst
# Ein Trigger, der so oft ausgeführt wird, wie angegeben (möglich sind alle Werte > 1)
_CreateLimitedTimesTrigger("testtrigger3", PhysicsManager::GT_PYRAMID, [4,0,5], [1,0,0,0], [2,4,2], %q{print "entered";}, %q{print "left";})
Zonen direkt über den ZoneManager erstellen
# eine Zone erstellen
zone = ZoneManager::getSingleton().createZone("my_zone");
# eine oder mehrere Areas hinzufügen (siehe ZoneManager!)
ZoneManager::getSingleton().addAreaToZone("my_zone", size, geometrytype, position, offset, orientation, transitiondistance, queryflags)
# transitiondistance: Mindestabstand zu der Area beim Verlassen ab der sie deaktiviert wird (dies verhindert, dass eine Person am Rand der Zone dauernd wechselt zwischen Betreten und Verlassen)
# queryflags: z.B. RlScript::QUERYFLAG_PLAYER
# Der Zone können nun beliebig viele Trigger, Sounds und Lights hinzugefügt werden
zone.addLight( lightactor )
zone.addTrigger( trigger )
zone.addSound( "soundfilename" )
