Revision Difference
util.TraceHull#562801
<function name="TraceHull" parent="util" type="libraryfunc">
<description>
Performs an AABB hull (axis-aligned bounding box, aka not rotated) trace with the given trace data.
This trace type cannot hit hitboxes.
⤶
See <page>util.TraceLine</page> for a simple line ("ray") trace.⤶
<note>This function may not always give desired results clientside due to certain physics mechanisms not existing on the client. Use it serverside for accurate results.</note>
</description>
<realm>Shared</realm>
<args>
<arg name="TraceData" type="table">The trace data to use. See <page>Structures/HullTrace</page></arg>
</args>
<rets>
<ret name="" type="table">Trace result. See <page>Structures/TraceResult</page></ret>
</rets>
</function>
<example>
<description>From a SWEP:PrimaryAttack()</description>
<code>
local tr = util.TraceHull( {
start = self:GetOwner():GetShootPos(),
endpos = self:GetOwner():GetShootPos() + ( self:GetOwner():GetAimVector() * 100 ),
filter = self:GetOwner(),
mins = Vector( -10, -10, -10 ),
maxs = Vector( 10, 10, 10 ),
mask = MASK_SHOT_HULL
} )
</code>
</example>
<example>
<description>Visual representation of a Hull Trace.</description>
<code>
function ENT:Draw()
self:DrawModel()
local ent = self
local mins = ent:OBBMins()
local maxs = ent:OBBMaxs()
local startpos = ent:GetPos()
local dir = ent:GetUp()
local len = 128
local tr = util.TraceHull( {
start = startpos,
endpos = startpos + dir * len,
maxs = maxs,
mins = mins,
filter = ent
} )
render.DrawLine( tr.HitPos, startpos + dir * len, color_white, true )
render.DrawLine( startpos, tr.HitPos, Color( 0, 0, 255 ), true )
local clr = color_white
if ( tr.Hit ) then
clr = Color( 255, 0, 0 )
end
render.DrawWireframeBox( startpos, Angle( 0, 0, 0 ), mins, maxs, Color( 255, 255, 255 ), true )
render.DrawWireframeBox( tr.HitPos, Angle( 0, 0, 0 ), mins, maxs, clr, true )
end
</code>
<output><image src="HullTrace.gif"/></output>
</example>
<example>
<description>Trace a player sized hull to detect if a player can spawn here without getting stuck inside anything.</description>
<code>
local pos = Entity(1):GetPos() -- Choose your position.
local tr = {
start = pos,
endpos = pos,
mins = Vector( -16, -16, 0 ),
maxs = Vector( 16, 16, 71 )
}
local hullTrace = util.TraceHull( tr )
if ( hullTrace.Hit ) then
-- Find a new spawnpoint
end
</code>
</example>