Revision Difference
GM:ShouldCollide#528124
<function name="ShouldCollide" parent="GM" type="hook">
<ishook>yes</ishook>
<description>
Called to decide whether a pair of entities should collide with each other. This is only called if <page>Entity:SetCustomCollisionCheck</page> was used on one or both entities.
Where applicable, consider using <page>constraint.NoCollide</page> instead - it is considerably easier to use.
<warning>This hook **must** return the same value consistently for the same pair of entities. If an entity changed in such a way that its collision rules change, you **must** call <page>Entity:CollisionRulesChanged</page> on that entity immediately - **not in this hook.**</warning>
<bug issue="642">This hook can cause all physics to break under certain conditions.</bug>
</description>
<realm>Shared</realm>
<predicted>Yes</predicted>
<args>
<arg name="ent1" type="Entity">The first entity in the collision poll.</arg>
<arg name="ent2" type="Entity">The second entity in the collision poll.</arg>
</args>
<rets>
<ret name="" type="boolean">Whether the entities should collide.</ret>
</rets>
</function>
<example>
<description>This should always return true unless you have a good reason for it not to.</description>
<code>
function GM:ShouldCollide( ent1, ent2 )
hook.Add( "ShouldCollide", "CustomCollisions", function( ent1, ent2 )
-- If players are about to collide with each other, then they won't collide.
if ( IsValid( ent1 ) and IsValid( ent2 ) and ent1:IsPlayer() and ent2:IsPlayer() ) then return false end
if ( ent1:IsPlayer() and ent2:IsPlayer() ) then return false end
-- We must call this because anything else should return true.
return true
⤶
end⤶
⤶
end )⤶
</code>
⤶
</example></example>