c_trace(VECTOR* from, VECTOR* to, var mode)

Sendet einen Strahl von der "from"-Position zur "to"-Position und prüft, ob dieser Strahl auf seinem Weg auf ein Hindernis trifft. Dies ist die allgemeine Instruktion, die von Entities zum Abklären ihrer Umgebung benutzt wird.

Parameter:

from Start-Positions-Vector
to Ziel-Positions-Vector
mode Tracing-Modus, siehe unten

Die folgenden Modus-Flags können kombiniert werden:

IGNORE_ME Ignoriert die me-Entity.
IGNORE_YOU Ignoriert die you-Entity (s. Bemerkungen) und setzt nicht den you-Pointer.
IGNORE_FLAG2  A7.05  Ignforiert alle Entities, die FLAG2 gesetzt haben.
IGNORE_PASSABLE Ignoriert alle passablen Blocks und Entities einschliesslich sämtlicher Wasser-Entities.
IGNORE_PASSENTS

Ignoriert passable Modell- und Sprite-Entities, nimmt jedoch noch Wasser-Entities (passable rechteckige Maps oder passable Terrains) wahr. Es setzt die vordefinierten Flag s in_passable und on_passable . Der vordefinierte Pointer passable_ent wird auf die erkannte Wasser-Entity gesetzt. So lässt sich das Playerverhalten beispielsweise auf Schwimmen umschalten.

IGNORE_WORLD Ignoriert sämtliche Level-Blocks und Terrains.
IGNORE_MAPS Ignoriert sämtliche Map- und Terrain-Entities
IGNORE_MODELS Ignoriert alle Models
IGNORE_SPRITES Ignoriert alle Sprites
IGNORE_PUSH Ignoriert Entities in Abhängigkeit ihres push- oder group-Wertes.
IGNORE_CONTENT Ignoriert den Inhalt des Verfolgungsursprungs. Die Funktion ist schneller, Wasser-Entities (s.o.) werden jedoch nicht erkannt.
USE_POLYGON Benutzt eine polygonale Hülle für alle Ziel-Entities, auch wenn deren POLYGON-Flag nicht gesetzt ist. Kann nicht gleichzeitig mit USE_AABB verwendet werden.
USE_BOX

Benutzt die Bounding-Box oder das Bounding-Ellipsoid der "me"-Entity, um einen `dicken´ Strahl anstelle einer Linie auszusenden. Dies ist dasselbe als würde ein c_move zur Zielposition hin durchgeführt. Die Template-Skripte verwenden einen vertikalen Trace mit USE_BOX, um den Abstand zum Untergrund zu ermitteln und so die Füße der Entities auf dem Boden zu halten. Ist USE_BOX gesetzt, erscheinen kleine Löcher oder Grate ausgefüllt.

USE_AABB

Verwendet anstelle einer mitgedrehten Bounding Box (OBB) lieber eine an Achsen ausgerichtete Kollisionsbox (AABB). Das AABB-System ist schneller, ignoriert aber die Ausrichtung der Entity auf USE_BOX, behandelt Modelle und Sprites als Boxen und erfordert einen BSP-Level. Mehr über den Unterschied zwischen beiden Systemen finden Sie unter collision.

ACTIVATE_SHOOT Aktiviert den EVENT_SHOOT-Auslöser bei der getroffenen Entity.
ACTIVATE_SONAR Aktiviert den EVENT_SONAR -Auslöser bei der getroffenen Entity.
SCAN_TEXTURE

Fragt Texturnamen, Vertexnummer, Flags, Helligkeit und Lichtfarbe der getroffenen Oberfläche ab. Kann nicht gleichzeitig mit USE_BOX verwendet werden. Der vordefinierte String tex_name und die Variablen hitvertex, tex_flag1..tex_flag8, tex_light, tex_color und tex_fog werden in Abhängigkeit vom getroffenen Objekt modifiziert (s.u.). Wurde nichts getroffen, werden tex_name und die anderen Parameter nicht gesetzt. Der Texturname lässt sich zum Prüfen der Bodenbeschaffenheit unter einer Entity verwenden.

Rückgabewerte:

> 0 Abstand zum getroffenen Polygon des Zieles oder des nächsten im Weg stehenden Hindernises.
0 Es wurde kein Polygon getroffen
< 0 Ein Polygon wurde von hinten getroffen. Die from-Position ist wahrscheinlich innerhalb eines festen Objekts

Modifiziert:

hit Information über die hit-Position, die Normale, Die Textur und die Entity A7.10  LC .
you Wird verändert, wenn IGNORE_YOU nicht gesetzt ist.
in_passable
Gesetzt wenn sich der Start- oder Endpunkt innerhalb einer Wasser-Entity befindet.
on_passable Gesetzt wenn das getroffene Ziel eine Wasser-Entity ist.
passable_ent Ist in_passable oder on_passable gesetzt, wird dieser Pointer auf das ermittelte Wasser-Terrain gesetzt (nur OBB-System).
tex_flag1..8 Spiegelt die Zustände von Flag1..Flag8 der getroffenen Oberfläche.
tex_fog Der fog- / albedo-Wert der getroffenen Textur.
event_type EVENT_SHOOT oder EVENT_SONAR (hängt von mode ab)

Geschwindigkeit:

Langsam

Bemerkungen:

Beispiele:

// test the floor texture - trace downwards 1000 quants below
function print_floor_texture()
{
  c_trace (my.x,vector(my.x,my.y,my.z-1000),IGNORE_ME|IGNORE_PASSABLE|SCAN_TEXTURE);
  if (hit.texname) printf("Floor texture: %s",hit.texname);
}

// place an entity onto the ground below
function item_set_to_ground()
{
  c_trace(my.x,vector(my.x,my.y,my.z-1000),IGNORE_ME|IGNORE_SPRITES|IGNORE_CONTENT);
my.z = hit.z - my.min_z; }
// look if the YOU enemy can be shot at from my position, and if yes, trigger its EVENT_SHOOT event function shoot_you() { c_trace(my.x,your.x,IGNORE_ME|IGNORE_PASSABLE|ACTIVATE_SHOOT|IGNORE_CONTENT); }

Siehe auch:

c_scan, c_move, c_rotate, ent_nextvertex, collision, hit, terrain_height

► Aktuelle Version Online