S&box Wiki

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