示例#1
0
 public bool IsCollidingWithRectangle(CollisionRectangle rectangle)
 {
     return(rectangle.position.X >= position.X - rectangle.width &&
            rectangle.position.X <= position.X + width &&
            rectangle.position.Y >= position.Y - rectangle.height &&
            rectangle.position.Y <= position.Y + height);
 }
示例#2
0
        public static void PlayersCollisions(Player player1, Player player2)
        {
            if (player1.GetCollisionRectangle().IsCollidingWithRectangle(player2.GetCollisionRectangle()))
            {
                CollisionRectangle rectangle1 = player1.GetCollisionRectangle();
                CollisionRectangle rectangle2 = player2.GetCollisionRectangle();

                if (rectangle1.position.X + rectangle1.width >= rectangle2.position.X &&
                    rectangle1.position.X + rectangle1.width - 5 <= rectangle2.position.X)
                {
                    player1.OnCollideWithObjectFromRight(rectangle2.position.X);
                    player2.OnCollideWithObjectFromLeft(rectangle1.position.X + rectangle1.width);
                }

                if (rectangle1.position.X <= rectangle2.position.X + rectangle2.width &&
                    rectangle1.position.X + 5 >= rectangle2.position.X + rectangle2.width)
                {
                    player1.OnCollideWithObjectFromLeft(rectangle2.position.X + rectangle2.width);
                    player2.OnCollideWithObjectFromRight(rectangle1.position.X);
                }

                if (rectangle1.position.Y + rectangle1.height >= rectangle2.position.Y &&
                    rectangle1.position.Y + rectangle1.height - 5 <= rectangle2.position.Y &&
                    !(rectangle1.position.X + rectangle1.width >= rectangle2.position.X &&         // same situation
                      rectangle1.position.X + rectangle1.width - 5 <= rectangle2.position.X) &&
                    !(rectangle1.position.X <= rectangle1.position.X + rectangle2.width &&
                      rectangle1.position.X + 5 >= rectangle1.position.X + rectangle2.width)
                    )
                {
                    player1.OnCollideWithObjectFromBottom(rectangle2.position.Y);
                    player2.OnCollideWithObjectFromTop(rectangle1.position.Y + rectangle1.height);
                }

                if (rectangle1.position.Y <= rectangle2.position.Y + rectangle2.height &&
                    rectangle1.position.Y + 5 >= rectangle2.position.Y + rectangle2.height &&
                    !(rectangle1.position.X + rectangle1.width >= rectangle2.position.X &&         // same situation
                      rectangle1.position.X + rectangle1.width - 5 <= rectangle2.position.X) &&
                    !(rectangle1.position.X <= rectangle1.position.X + rectangle2.width &&
                      rectangle1.position.X + 5 >= rectangle1.position.X + rectangle2.width)
                    )
                {
                    player1.OnCollideWithObjectFromTop(rectangle2.position.Y + rectangle2.height);
                    player2.OnCollideWithObjectFromBottom(rectangle1.position.Y);
                }
            }
        }
示例#3
0
        private static void PassiveObjectCollision(iPassiveObjectCollidingAbility _object, PassiveObject passiveObject)
        {
            if (_object.GetCollisionRectangle().IsCollidingWithRectangle(passiveObject.GetCollisionRectangle()))
            {
                CollisionRectangle rectangle = _object.GetCollisionRectangle();
                if (rectangle.position.X + rectangle.width >= passiveObject.position.X &&
                    rectangle.position.X + rectangle.width - 5 <= passiveObject.position.X)
                {
                    _object.OnCollideWithObjectFromRight(passiveObject.position.X);
                }

                if (rectangle.position.X <= passiveObject.position.X + passiveObject.width &&
                    rectangle.position.X + 5 >= passiveObject.position.X + passiveObject.width)
                {
                    _object.OnCollideWithObjectFromLeft(passiveObject.position.X + passiveObject.width);
                }

                if (rectangle.position.Y + rectangle.height >= passiveObject.position.Y &&
                    rectangle.position.Y + rectangle.height - 5 <= passiveObject.position.Y &&
                    !(rectangle.position.X + rectangle.width >= passiveObject.position.X &&         // to prevent from
                      rectangle.position.X + rectangle.width - 5 <= passiveObject.position.X) &&    // stopping on edges
                    !(rectangle.position.X <= passiveObject.position.X + passiveObject.width &&     //
                      rectangle.position.X + 5 >= passiveObject.position.X + passiveObject.width)   //
                    )
                {
                    _object.OnCollideWithObjectFromBottom(passiveObject.position.Y);
                }

                if (rectangle.position.Y <= passiveObject.position.Y + passiveObject.height &&
                    rectangle.position.Y + 5 >= passiveObject.position.Y + passiveObject.height &&
                    !(rectangle.position.X + rectangle.width >= passiveObject.position.X &&         // same situation
                      rectangle.position.X + rectangle.width - 5 <= passiveObject.position.X) &&
                    !(rectangle.position.X <= passiveObject.position.X + passiveObject.width &&
                      rectangle.position.X + 5 >= passiveObject.position.X + passiveObject.width)
                    )
                {
                    _object.OnCollideWithObjectFromTop(passiveObject.position.Y + passiveObject.height);
                }
            }
        }