entmove.c
Diese Include-Datei enthält grundlegende Funktionen zum Verändern von Entity-Positionen und Winkeln, z.B. Drehen, Hinwenden auf ein Ziel, Bewegen zu einer bestimmten Position oder Bewegung entlang eines Pfades mit einer bestimmten Geschwindigkeit. Die Funktionen sind einfach genug, um sie auf einen Blick zu verstehen und aus ihnen zu lernen. Wenn Sie sie ändern möchten, bitte bearbeiten Sie eine entmove.c Kopie in Ihrer Work-Ordner, und nicht die Original-Datei im include-Ordner.
ent_rotate (ENTITY* ent, var speed_pan, var speed_tilt, var speed_roll)
Startet eine permanente Rotation um die aktuelle pan, tilt, und roll-Achse der Entity mit den angegebenen Winkelgeschwindigkeiten.
Parameters:
ent - Entity-Pointer
speed_pan - Rotationsrate um die pan Achse in Grad pro Tick.
speed_tilt - Rotationsrate um die tilt Achse in Grad pro Tick.
speed_roll - Rotationsrate um die roll Achse in Grad pro Tick.
Remarks:
- Die Funktion kann beliebig oft aufgerufen werden; jeder Aufruf ersetzt die bisherige Rotation.
- Aufruf von ent_rotate mit allen Rotationsraten auf 0 stoppt die Rotation.
Example:
action rotating_door()
{
while(1) {
ent_rotate(me,2,0,0); // rotate about the entity's vertical axis with 2 degrees per tick
wait(-90/16); // wait ~6 seconds (= 180 degrees)
ent_rotate(me,0,0,0); // stop the rotation
wait(-1); // wait 1 second
ent_rotate(me,-2,0,0); // rotate back
wait(-90/16); // wait ~6 seconds (= 180 degrees)
}
}
ent_turnto (ENTITY* ent, ANGLE* to, var aspeed)
Startet eine Rotation in Richtung eines angegebenen Zielwinkels mit einer vorgegebenen Winkelgeschwindigkeit; stoppt wenn der Zielwinkel erreicht ist.
Parameters:
ent - Entity-Pointer
to - Euler-Zielwinkel
aspeed - Rotationsgeschwindigkeit in Grad pro Tick.
Remarks:
- Die Funktion kann beliebig oft aufgerufen werden, auch während einer Rotation; jeder Aufruf ersetzt die bisherige Rotation.
- Das wait_for_my(ent_turnto) Macro kann benutzt werden, um festzustellen, wenn der Zielwinkel erreicht wurde.
Example:
ent_turnto(me,vector(90,0,0),2);
wait_for_my(ent_turnto);
ent_faceto (ENTITY* ent, VECTOR* pos, var aspeed)
Startet eine Rotation mit einer vorgegebenen Winkelgeschwindigkeit, bis die Entity zu einer bestimmten Position hin ausgerichtet ist; z.B. für Geschütztürme.
Parameters:
ent - Entity-Pointer
pos - Zielposition
aspeed - Rotationsgeschwindigkeit in Grad pro Tick.
Remarks:
- Die Funktion kann beliebig oft aufgerufen werden, auch während einer Rotation; jeder Aufruf ersetzt die bisherige Rotation.
- Bei einem Aufruf mit einem hohen aspeed Wert (z.B. 999999) wird die Entity sofort zur Zielposition hin ausgerichtet.
- Diese Funktion ruft ent_turnto auf. Das wait_for_my(ent_turnto) Macro kann benutzt werden, um festzustellen, wenn der Zielwinkel erreicht wurde.
Example:
action turret()
{
while(1) {
if (player) {
ent_faceto(me,player.x,10); // turn towards the player
wait_for_my(ent_turnto); // wait until target angle reached
fire(); // fire at player's previous position
}
wait(1);
}
}
ent_moveto (ENTITY* ent, VECTOR* pos, var speed)
Startet eine Bewegung ohne Kollisionserkennung zu einer absoluten Zielposition in Weltkoordinaten.
ent_moveby (ENTITY* ent, VECTOR* pos, var speed)
Startet eine Bewegung ohne Kollisionserkennung zu einer Zielposition relativ zur Entity.
Parameters:
ent - Entity-Pointer
pos - Zielposition in Welt- oder Entity-Koordinaten.
speed - Geschwindigkeit in Quant pro Tick.
Remarks:
- Die Funktion kann beliebig oft aufgerufen werden, auch während einer Bewegung; jeder Aufruf ersetzt die bisherige Bewegung.
- Aufruf von ent_moveby(entity,nullvector,1) stoppt die Bewegung.
- Das wait_for_my(ent_moveto) Macro kann benutzt werden, um festzustellen, wenn die Zielposition erreicht wurde.
Example:
action lift()
{
while(1) {
ent_moveby(me,vector(0,0,100),1); // move the lift 100 units upwards
wait_for_my(ent_moveto); // wait until target position reached
wait(-10); // stop the lift at the upper position for 10 seconds
ent_moveby(me,vector(0,0,-100),1); // move the lift 100 units downwards
wait_for_my(ent_moveto); // wait until target position reached
wait(-10); // stop the lift at the lower position for 10 seconds
}
}
ent_movepath (ENTITY* ent, char* pathname, var speed,var mode)
Bewegt die Entity entlang einem Actor-Pfad.
Parameters:
ent - Entity-Pointer
pathname - Name des Pfads, char* oder STRING*; oder NULL für einen Pfad, der der Entity bereits zugewiesen wurde.
speed - Geschwindigkeit in Quant pro Tick, oder 0 zum Stoppen der Entity.
mode - 1 bewegt die Entity so, dass die Füße den Boden berühren; 2 dreht die Entity in Bewegungsrichtung; 3 beides.
Remarks:
- Die Funktion kann beliebig oft aufgerufen werden, auch während einer Bewegung; jeder Aufruf ersetzt die bisherige Bewegung.
- Aufruf von ent_movepath(entity,NULL,0) stoppt die Bewegung.
- Wenn mode 1 benutzt wird, um die Entity auf dem Boden zu bewegen, muss der Pfad stets oberhalb des Bodens verlaufen.
Example:
action patrol()
{
ent_movepath(me,"path1",5,1+2);
}
See Also:
ang_add, proc_status
► latest
version online