This is the version 5bb8b4b208367b37baaa58eb from 2013-10-30 11:39:01 comment: 'Neue Version'
Objekte mit Scripten programmieren ed
Variablen-Typ ist Model.
Im Editor kann einem Modell eine Script-Datei zugeordnet werden. Wird in dieser Datei eine neue Klasse definiert, die von Model abgeleitet ist, so wird das entsprechende Modell als eine Instanz dieser Klasse erschaffen.
Callback Funktionen ed
Das Verhalten eines Objektes kann durch das Überschreiben spezieller Funktionen definiert werden, die von der Engine automatisch zu bestimmten Zeitpunkten ausgeführt werden (Callback-Funktionen):
- void Model.onInit(model this) (einmalig beim Laden des Objekts)
- void Model.onDelete(model this) (einmalig beim Entfernen des Objektes)
- void Model.onIterate(model this) (regelmäßig in jedem Frame des Spieles)
- void Model.onCollide(Model *p) (bei einer Kollision mit einem anderen Objekt p)
- void Model.onCollide(Terrain *p) (bei einer Kollision mit einem Terrain p)
Um dem Modell weitere Variablen (auch anderen Typs) zuzuordnen, können beim Definieren der Klasse einfach weitere Elemente hinzugefügt werden.
Beispiele ed
sonstiges ed
Variablen ed
class MyModel : Model
// zusätzliche Elemente
string stupid_string overwrite void onInit()
name = "Heinz" // Name in Heinz ändern
_test = 4.1
// solange das Objekt existiert seine Geschwindigkeit festhalten
overwrite void onIterate()
vel = vector(100, 0, 0) overwrite void onInit()
time_run = 0
min_distance = 200.0
class MyModel : Model
// das Ego-Objekt verfolgen
overwrite void onIterate()
// solange das Objekt existiert seine Geschwindigkeit festhalten
// in welcher Richtung ist Ego?
vector dpos = Ego.pos - pos
float ang_y = atan2(dpos.z, dpos.x)
float distance = dpos.length() // in Ego-Richtung ausrichten
QuaternionRotationV(ang, vector(0, ang_y, 0))
void OnIterate(model this)
// auf Ego zulaufen
vector dir = dpos
dir.normalize()
if distance > min_distance
vel = dir * 100.0
else
vel = v0
// Animation
this.resetAnimation()
if distance > min_distance
// vielleicht eine Lauf-Animation...
animate(MoveOpSet, 0, 0, 13, time_run, Engine.elapsed, 0, true)
// in Ego-Richtung ausrichten
this.ang = vector(0, ang_y, 0)
// auf Ego zulaufen
vector dir = dpos
dir.normalize()
if distance > min_distance
this.vel = dir * 100.0
else
this.vel = v0
// Animation
this.ResetAnimation()
if distance > min_distance
// vielleicht eine Lauf-Animation...
this.Animate(MoveOpSet, 0, 0, 13, time_run, Engine.elapsed, 0, true)