public static void handleItemCollision(IItemObjects item, LevelStorage storage) { CollisionDetector collisionDetector = new CollisionDetector(); ICollision side; Rectangle floorCheck; floorCheck = item.returnCollisionRectangle(); floorCheck.Y++; item.RigidBody().Floored = false; foreach (IBlock block in storage.blocksList) { if (block.checkForCollisionTestFlag()) { side = collisionDetector.getCollision(item.returnCollisionRectangle(), block.returnCollisionRectangle()); ItemBlockCollisionHandler.handleCollision(item, block, side); } if (collisionDetector.getCollision(floorCheck, block.returnCollisionRectangle()).returnCollisionSide().Equals(CollisionSide.Top)) { item.RigidBody().Floored = true; } } foreach (IEnviromental enviromental in storage.enviromentalObjectsList) { side = collisionDetector.getCollision(item.returnCollisionRectangle(), enviromental.returnCollisionRectangle()); ItemEnvriomentalCollisionHandler.handleCollision(item, enviromental, side); } }
private static void handleItemMovement(IItemObjects item, IBlock block, ICollision side) { Rectangle blockRectangle = block.returnCollisionRectangle(); Rectangle itemRectangle = item.returnCollisionRectangle(); Rectangle intersectionRectangle = Rectangle.Intersect(itemRectangle, blockRectangle); Vector2 itemLocation = item.returnLocation(); int locationDiffToChange = UtilityClass.zero; if (side.returnCollisionSide().Equals(CollisionSide.Left)) { locationDiffToChange = intersectionRectangle.Width; int newItemX = (int)itemLocation.X - locationDiffToChange; item.updateLocation(new Vector2((newItemX), itemLocation.Y)); item.RigidBody().RightCollision(); } else if (side.returnCollisionSide().Equals(CollisionSide.Right)) { locationDiffToChange = intersectionRectangle.Width; int newItemX = (int)itemLocation.X + locationDiffToChange; item.updateLocation(new Vector2((newItemX), itemLocation.Y)); item.RigidBody().LeftCollision(); } else if (side.returnCollisionSide().Equals(CollisionSide.Top)) { locationDiffToChange = intersectionRectangle.Height; int newItemY = (int)itemLocation.Y - locationDiffToChange; item.updateLocation(new Vector2(itemLocation.X, newItemY)); item.RigidBody().BottomCollision(); } else if (side.returnCollisionSide().Equals(CollisionSide.Bottom)) { locationDiffToChange = intersectionRectangle.Height; int newItemY = (int)itemLocation.Y + locationDiffToChange; item.updateLocation(new Vector2(itemLocation.X, newItemY)); item.RigidBody().TopCollision(); } }