Revision Difference
Traces#528710
<cat>Dev.Intro</cat>⤶
<title>Traces</title>⤶
⤶
# What are traces⤶
⤶
Traces are imaginary lines. When you run a Trace you get a TraceResult - which tells you what the line hit.⤶
⤶
So for example, if you, as the player, wanted to spawn a box. You'd run a Trace from the player's eyeball to 200 units in the direction that the player is looking. The TraceResult would show that it hit a point and now you know where to place the box.⤶
⤶
<upload src="1/8d8818f16dd379e.png" size="16432" name="image.png" />⤶
⤶
# Tracing⤶
⤶
Traces are constructed using the Trace static functions, and configured using members. You run the trace and get the result using Run().⤶
⤶
```⤶
var mytrace = Trace.Ray( startPos, endPos );⤶
mytrace = mytrace.WorldOnly();⤶
var result = mytrace.Run();⤶
```⤶
⤶
The configuration functions return a new object. This is a convenience thing, so you can format like this:⤶
⤶
```⤶
var tr = Trace.Ray( startPos, endPos ).Run();⤶
```⤶
⤶
or like this⤶
⤶
```⤶
var tr = Trace.Ray( startPos, endPos )⤶
.Ignore( playerEntity )⤶
.Ignore( playerVehicle )⤶
.Size( 10 )⤶
.Run();⤶
```⤶
⤶
## Size⤶
⤶
In the example above the Size describes the size of an AABB to trace.⤶
⤶
This means instead of tracing a simple line, you're tracing a bigger cube along the line.⤶
⤶
# TraceResult⤶
⤶
The Trace Result is a simple struct. It gives you information on the hit. ⤶
⤶
Here you can see testing whether the trace hit and using the hit position to spawn an entity 10 units above it.⤶
⤶
```⤶
if ( tr.Hit )⤶
{⤶
var ent = new ModelEntity();⤶
ent.Pos = tr.EndPos + tr.Normal * 10;⤶
}⤶
```⤶
⤶
⤶
# TODO⤶
⤶
Explain how to trace using other shapes