示例#1
0
        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));
        }
示例#2
0
        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));
        }
示例#3
0
            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);
            }
示例#4
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);
    }