Garry's Mod Wiki

Revision Difference

util.TraceHull#512346

<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.⤶ ⤶ <note>Clientside entities will not be hit by traces.</note>⤶ ⤶ <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 &lt;page&gt;HullTrace&lt;/page&gt;</arg>⤶ </args>⤶ <rets>⤶ <ret name="" type="table">Trace result. See <page>TraceResult</page></ret>⤶ </rets>⤶ </function>⤶ ⤶ <example>⤶ <description>From a SWEP:PrimaryAttack()</description>⤶ <code>⤶ local tr = util.TraceHull( {⤶ start = self.Owner:GetShootPos(),⤶ endpos = self.Owner:GetShootPos() + ( self.Owner:GetAimVector() * 100 ),⤶ filter = self.Owner,⤶ 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></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>