Пример #1
0
        //-----------------------------------------------------------------------------
        // Static Collision Test Methods
        //-----------------------------------------------------------------------------
        // Perform a collision test between two entities.
        public static CollisionInfo PerformCollisionTest(Entity entity, Entity other, CollisionTestSettings settings)
        {
            CollisionInfo collisionInfo = new CollisionInfo();

            // Check that the other entity meets the collision requirements.
            if ((entity != other) &&
                (settings.RequiredType == null	|| settings.RequiredType.IsAssignableFrom(other.GetType())) &&
                (settings.RequiredFlags == 0	|| other.Physics.Flags.HasFlag(settings.RequiredFlags)) &&
                (settings.MaxZDistance < 0.0f	|| Math.Abs(entity.ZPosition - other.ZPosition) <= settings.MaxZDistance))
            {
                // Setup the collision boxes.
                Rectangle2F cbox1 = settings.GetCollisionBox1(entity);
                cbox1.Point += entity.Position;
                Rectangle2F cbox2 = settings.GetCollisionBox2(other);
                cbox2.Point += other.Position;

                // Perform the collision test.
                if (cbox1.Intersects(cbox2)) {
                    collisionInfo.SetEntityCollision(other, 0);
                }
            }

            return collisionInfo;
        }
Пример #2
0
        //-----------------------------------------------------------------------------
        // Static Collision Test Methods
        //-----------------------------------------------------------------------------

        // Perform a collision test between two entities.
        public static CollisionInfo PerformCollisionTest(Entity entity, Entity other, CollisionTestSettings settings)
        {
            CollisionInfo collisionInfo = new CollisionInfo();

            // Check that the other entity meets the collision requirements.
            if ((entity != other) &&
                (settings.RequiredType == null || settings.RequiredType.IsAssignableFrom(other.GetType())) &&
                (settings.RequiredFlags == 0 || other.Physics.Flags.HasFlag(settings.RequiredFlags)) &&
                (settings.MaxZDistance < 0.0f || Math.Abs(entity.ZPosition - other.ZPosition) <= settings.MaxZDistance))
            {
                // Setup the collision boxes.
                Rectangle2F cbox1 = settings.GetCollisionBox1(entity);
                cbox1.Point += entity.Position;
                Rectangle2F cbox2 = settings.GetCollisionBox2(other);
                cbox2.Point += other.Position;

                // Perform the collision test.
                if (cbox1.Intersects(cbox2))
                {
                    collisionInfo.SetEntityCollision(other, 0);
                }
            }

            return(collisionInfo);
        }