public override float ReportFixture(b2Fixture fixture, b2Vec2 point, b2Vec2 normal, float fraction) { if ((fixture.GetFilterData().categoryBits & _CollisionMask) == 0) { return(-1f); } ICollider collider = _Physics2DControl.GetPhysicsObject(fixture.GetBody().GetUserData().data).GetCollider(fixture.GetUserData().data); return(_Callback.Invoke(collider, point.ToVector2(), normal.ToVector2(), fraction)); }
public override bool ReportFixture(b2Fixture fixture) { if ((fixture.GetFilterData().categoryBits & _CollisionMask) == 0) { return(true); } ICollider collider = _Physics2DControl.GetPhysicsObject(fixture.GetBody().GetUserData().data).GetCollider(fixture.GetUserData().data); return(_Callback.Invoke(collider)); }
public override float ReportFixture(b2Fixture fixture, b2Vec2 point, b2Vec2 normal, float fraction) { if ((fixture.GetFilterData().categoryBits & 1) == 0) { return(1); } P2 = point; Fraction = fraction; return(0); }
/// Return true if contact calculations should be performed between these two shapes. /// @warning for performance reasons this is only called when the AABBs begin to overlap. // Return true if contact calculations should be performed between these two shapes. // If you implement your own collision filter you may want to build from this implementation. public virtual bool ShouldCollide(b2Fixture fixtureA, b2Fixture fixtureB) { b2Filter filterA = fixtureA.GetFilterData(); b2Filter filterB = fixtureB.GetFilterData(); if (filterA.groupIndex == filterB.groupIndex && filterA.groupIndex != 0) { return(filterA.groupIndex > 0); } bool collide = (filterA.maskBits & filterB.categoryBits) != 0 && (filterA.categoryBits & filterB.maskBits) != 0; return(collide); }