c_rotate(ENTITY* entity, ANGLE* angle, var mode)

Führt eine Kollisionserkennung der gegebenen entity gegen ihre Umgebung aus und dreht sie dabei um die angegebenen Euler-Winkel (angle). Hat die Entity eine nicht-symmetrische Kollisionsform und Hindernisse sind in der Nähe, nehmen Sie diese Funktion zum Drehen einer Entity anstatt ihre Winkel direkt zu verändern. Andernfalls könnte die Entity innerhalb eines anderen sich drehenden Objektes enden.

Parameter:

entity Zu drehende Entity
angle Drehwinkel
mode Kollisions- und Dreh-Modus, s. unten

Die folgenden Kombinationen von mode stehen zur Verfügung:

IGNORE_YOU ignoriert die you-Entity bei der Kollisionserkennung.
IGNORE_FLAG2 A7.73 Ignoriert sämtliche Entities, die FLAG2 gesetzt haben..
IGNORE_PASSABLE ignoriert alle passablen Blocks und Entities.
IGNORE_PASSENTS ignoriert passable Modelle und Sprites.
IGNORE_WORLD Ignoriert alle Level-Blocks und Terrains (hilfreich bei Türen).
IGNORE_MAPS ignoriert alle Map- und Terrain-Entities.
IGNORE_MODELS ignoriert alle Modelle.
IGNORE_SPRITES ignoriert alle Sprites.
IGNORE_PUSH ignoriert sämtliche Entities mit niedrigeren Push-Werten oder demselben Gruppen-Wert wie dem der gegebenen Entity. Um bestimmte Entitygruppen zu ignorieren rufen Sie vor c_rotate bitte c_ignore auf.
GLIDE

Versucht, beim Auftreffen auf ein Hindernis, den Ursprung der Entity zu verschieben, so dass die Drehung dennoch durchgeführt werden kann. Nützlich zum Drehen eines asymmetrischen Actors.

USE_AXIS
USE_AXISR

dreht nicht um Welt-Koordinaten, sondern um das Koordinatensystem der Entiy. USE_AXIS dreht den Entity-Winkel um den Winkelparameter (wie ang_add). USE_AXISR dreht den Winkelparameter um den Entity-Winkel (wie ang_rotate). Das ist nötig, um ein beliebig ausgerichtetes Objekt mit Kollisionserkennung, wie etwa ein Flugzeug oder ein Raumschiff, zu drehen. Näheres finden Sie unter ang_add.

USE_AABB Dreht die Entity ohne jegliche Kollisionserkennung.

Rückgabewerte:

>0 - Drehung erfolgreich.
<= 0 - Entity konnte nicht gedreht werden, z. B. aufgrund von Hindernissen.

Modifiziert:

entity.pan, tilt, roll Winkel der Entity.
entity.x, y, z Entity-Position (wenn GLIDE aktiviert ist).
normal Vektor der Normalen des berührten Polygons.
bounce Abprallvektor des berührten Polygons.
in_passable 1, wenn die Bewegung in einem passablen Block endet.
in_solid 1, wenn die Bewegung in einem nicht passablen Block endet.
event_type Type des Events.

Bemerkungen:

Geschwindigkeit:

Schnell, wenn USE_AABB gesetzt und USE_AXIS / USE_AXISR nicht gesetzt ist; andernfalls langsam.

Beispiel (lite-C):

action door()
{
  c_setminmax(me);
  while (1)
  {
    if (key_space && my.pan < 180)  
      c_rotate(me,vector(time_step,0,0),IGNORE_WORLD);
    wait(1);
  }
}

Siehe auch:

c_move, c_trace,c_scan, c_ignore, ang_add, collision

► Aktuelle Version Online