public static void PassiveObjectsCollidingHandling(iPassiveObjectCollidingAbility _object, List <PassiveObject> passiveObjects) { foreach (PassiveObject passiveObject in passiveObjects) { PassiveObjectCollision(_object, passiveObject); } }
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); } } }