Hosting and domain costs until October 2024 have been generously sponsored by dumptruck_ds. Thank you!

Difference between revisions of "traceline"

From Quake Wiki

(Created page with "====Syntax:==== <code>void traceline(vector v1, vector v2, float collisionType, entity ignore)</code> This function traces a line between v1 and v2 and sets many global varia...")
 
Line 1: Line 1:
====Syntax:====
+
''void'' '''traceline'''(''vector'' start, ''vector'' end, ''float'' collisionType, ''entity'' ignore)
<code>void traceline(vector v1, vector v2, float collisionType, entity ignore)</code>
 
  
This function traces a line between v1 and v2 and sets many global variables depending on the results of the trace.
+
== Usage ==
====Parameters:====
+
Fires out a line from the starting position to the ending position, colliding with anything based on the passed collision type. Sets the following globals:
:<code>v1</code> - The start point of the trace
+
*'''trace_allsolid'''
:<code>v2</code> - The end point of the trace
+
:If <code>TRUE</code>, the trace was stuck entirely in solids.
:<code>collisionType</code> - How the trace interacts with other entities.  0 makes it collide with both the world and solid entities' bounding box.  1 makes it not collide with monsters (solid entities with the FL_MONSTER flag set on .flags). 2 makes the trace extra wide against monsters.
+
*'''trace_startsolid'''
====Returns:====
+
:If <code>TRUE</code>, the trace started inside of a solid.
:void
+
*'''trace_fraction'''
====Global variables affected:====
+
:The fraction of the total distance the trace traveled before stopping. Ranges from [0, 1].
:<code>float trace_allsolid</code> - (?)
+
*''''trace_endpos'''
:<code>float trace_startsolid</code> - (?)
+
:The position the trace stopped.
:<code>float trace_fraction</code> - The fraction of the total length of the vector v2 - v1 that was traced before the trace hit an obstacle.
+
*'''trace_plane_normal'''
:<code>vector trace_endpos</code> - The coordinates of the end point of the trace. If the trace did not hit anything, than trace_endpos = v2, otherwise it will report the position where the trace hit an obstacle.
+
:The normal of the plane that the trace hit.
:<code>vector trace_plane_normal</code> - The normal of the plane that was hit by the trace.
+
*'''trace_plane_dist'''
:<code>float trace_plane_dist</code> - The distance of the plane to the world origin (?)
+
:The distance from the world origin of the plane that the trace hit. This is d in the plane equation ax + by + cz + d = 0.
:<code>entity trace_ent</code> - The entity that was hit by the trace (if nothing was hit, returns world).
+
*'''trace_ent'''
:<code>float trace_inopen</code> - If the trace is in open air (?)
+
:The entity that the trace hit.
:<code>float trace_inwater;</code> - If the trace is in water (?)
+
*'''trace_inopen'''
 +
:If <code>TRUE</code>, the trace traveled through open air.
 +
*'''trace_inwater'''
 +
:If <code>TRUE</code>, the trace traveled through a liquid.
  
 +
=== Parameters ===
 +
*''start''
 +
:The starting position of the trace.
 +
*''end''
 +
:The destination position of the trace.
 +
*''collisionType''
 +
:The type of entities considered valid when checking collision. Can be one of the following:
 +
:*0 - Collide with everything.
 +
:*1 - Only collide with entities that have a solid type of <code>SOLID_BSP</code>.
 +
:*2 - Collide with everything but use an extended pseudo bounding box against entities with the <code>FL_MONSTER</code> flag.
 +
*''ignore''
 +
:The entity to ignore collision of with while tracing.
  
 +
== Example ==
 +
// This fires out a trace to see if it hit an entity. If it did, it deals damage
 +
traceline(self.origin, self.origin + v_forward*128, 0, self);
 +
if (trace_ent && trace_ent.takedamage != DAMAGE_NO)
 +
    T_Damage(trace_ent, self, self, 20);
  
 
[[Category:QuakeC Function]]
 
[[Category:QuakeC Function]]

Revision as of 12:51, 31 July 2023

void traceline(vector start, vector end, float collisionType, entity ignore)

Usage

Fires out a line from the starting position to the ending position, colliding with anything based on the passed collision type. Sets the following globals:

  • trace_allsolid
If TRUE, the trace was stuck entirely in solids.
  • trace_startsolid
If TRUE, the trace started inside of a solid.
  • trace_fraction
The fraction of the total distance the trace traveled before stopping. Ranges from [0, 1].
  • 'trace_endpos
The position the trace stopped.
  • trace_plane_normal
The normal of the plane that the trace hit.
  • trace_plane_dist
The distance from the world origin of the plane that the trace hit. This is d in the plane equation ax + by + cz + d = 0.
  • trace_ent
The entity that the trace hit.
  • trace_inopen
If TRUE, the trace traveled through open air.
  • trace_inwater
If TRUE, the trace traveled through a liquid.

Parameters

  • start
The starting position of the trace.
  • end
The destination position of the trace.
  • collisionType
The type of entities considered valid when checking collision. Can be one of the following:
  • 0 - Collide with everything.
  • 1 - Only collide with entities that have a solid type of SOLID_BSP.
  • 2 - Collide with everything but use an extended pseudo bounding box against entities with the FL_MONSTER flag.
  • ignore
The entity to ignore collision of with while tracing.

Example

// This fires out a trace to see if it hit an entity. If it did, it deals damage
traceline(self.origin, self.origin + v_forward*128, 0, self);
if (trace_ent && trace_ent.takedamage != DAMAGE_NO)
    T_Damage(trace_ent, self, self, 20);