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); }
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); } } }
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); } } }