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. |
> 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 |
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) |
// 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); }