ent_move (vector reldist, vector absdist);
Bewegt die my-Entity über eine bestimmte Entfernung und führt
während der Bewegung eine Kollisionserkennung aus (s.Entity-Kapitel
über Kollisionserkennung). Der erste Vektor, reldist, gibt
eine relative Stecke und Richtung in gedrehten Entitykoordinaten
d.h. in die Richtung, in welche die Entity schaut, an. Der zweite
Vektor, absdist, gibt
eine absolute Strecke und Richtung in Weltkoordinaten an. Die daraus
resultierende Bewegung ist eine Kombination aus beiden Strecken. Üblicherweise
wird der erste Vektor für die Antriebsgeschwindigkeit der Entity, und
der zweite für äußere Kräfte, wie etwa Schwerkraft und
Drift benutzt. Um einen dieser Vektoren auf Null zu setzen, kann der
vordefinierte nullvector angegeben
werden.
Ent_move liefert die zurückgelegte Entfernung
zurück. Konnte die Entity sich überhaupt nicht bewegen, weil sie
von Hindernissen gestoppt wird, wird ein negativer Wert oder 0 zurückgeliefert.
Der vordefinierte MY_SPEED-Vektor wird auf die sich
ergebende absolute zurückgelegte Strecke gesetzt. Ist die Entity mit etwas
zusammengestoßen, wird der NORMAL-Vektor
auf die Normale der kollidierenden Oberfläche gesetzt - also einen Vektor
der Länge 1, der senkrecht auf der Oberfläche stehend von ihr weg
zeigt. Dies kann zur Bestimmung der Richtung der Oberfläche benutzt werden.
Ist zum Beispiel NORMAL.Z nahe 1, ist die Entity mit dem Boden zusammengestoßen. Ist NORMAL.Z nahe -1, ist sie mit der Decke zusammengestoßen, und bei NORMAL.Z nahe 0, ist sie auf eine vertikale Mauer getroffen. Die Oberfläche eines
Sprites oder Modelle wird hier als vertikaler Zylinder angenommen.
Der vorgegebene BOUNCE-Vektor
ist auf die Richtung gesetzt, in welche die kollidierende Entity von
der Oberfläche
abprallen würde, und kann daher zum Einbinden eines Abprallverhaltens
verwendet werden.
Parameter:
reldist |
Abstands-und Richtungsvektor in Entity-Koordinaten |
absdist |
Abstands-und Richtungsvektor in Welt-Koordinaten |
move_friction |
vordefinierte Variable, Reibung beim Gleiten entlang von Oberflächen, 0..1 |
move_mode |
vordefinierte Variable, Kollisionsmodus |
Rückgabewert:
> 0 |
zurückgelegte Entfernung |
<= 0 |
Entity konnte sich nicht bewegen |
Modifiziert:
my_speed |
zurückgelegte Strecke und Richtung |
normal |
Vektor der Normalen des getroffenen Polygons |
bounce |
Abprallvektor des getroffenen Polygons |
in_passable |
ist 1, wenn die Bewegung in einem passable Block endet |
in_solid |
ist 1, wenn die Bewegung in einem nicht passable Block
endet. |
event_type |
wird auf den Event-Typus gesetzt |
Bemerkungen:
Vor dem Ausführen von
ent_move muss der Move-Modus
durch die vordefinierte
move_mode-Variable
gesetzt werden. Die folgenden Modi können kombiniert werden:
IGNORE_YOU |
ignoriert die YOU Entity bei der Kollisionserkennung |
IGNORE_PASSABLE |
ignoriert alle passable Blocks und Entities |
IGNORE_PASSENTS |
ignoriert passable Modell- und Sprite-Entities |
IGNORE_MAPS |
ignoriert alle Map Entities |
IGNORE_MODELS |
ignoriert alle Modelle |
IGNORE_SPRITES |
ignoriert alle Sprites |
IGNORE_PUSH |
bewegt sich durch alle Entities mit kleinerem push Wert als my |
ACTIVATE_TRIGGER |
aktiviert Trigger-Events während der Bewegung |
GLIDE |
gleitet nach Auftreffen an Wänden und Entities entlang |
Der ignore_passents-Modus kann noch passierbare
Blocks und Map Entities erkennen - endete die Bewegung in einen
passierbaren Block, wird die vordefinierte IN_PASSABLE -Variable
auf 1 gesetzt. Führte die Bewegung in einen Block fester Materie (was
nur dann passieren kann, wenn PASSABLE-Entities
bewegt werden), wird die IN_SOLID -Variable auf
1 gesetzt.
Geschwindigkeit:
Langsam
Beispiel:
Das Ignorieren der
YOU-Entity kann beispielsweise dazu eingesetzt werden, dass eine abgeschossene Kugel nicht gleich im Lauf oder innerhalb der sie abfeuernden Entity stecken bleibt. Das Kombinieren der Move-Modi erfolgt durch einfaches Addieren, z.B.
move_mode = IGNORE_YOU + IGNORE_PASSABLE + IGNORE_PUSH + ACTIVATE_TRIGGER + GLIDE;
result = ent_move(reldist,absdist);
Siehe auch:
move_friction, normal, bounce, in_passable, in_solid, event_type, you, c_move
► Aktuelle Version Online