private static void handleMarioMovement(Mario mario, IEnemyObject enemy, ICollision side) { Rectangle enemyRectangle = enemy.returnCollisionRectangle(); Rectangle marioRectangle = mario.returnCollisionRectangle(); Rectangle intersectionRectangle = Rectangle.Intersect(marioRectangle, enemyRectangle); int locationDiffToChange = UtilityClass.zero; if (side.returnCollisionSide().Equals(CollisionSide.Left)) { locationDiffToChange = intersectionRectangle.Width; int newMarioX = (int)mario.Location.X - locationDiffToChange; mario.Location = new Vector2(newMarioX, mario.Location.Y); } else if (side.returnCollisionSide().Equals(CollisionSide.Right)) { locationDiffToChange = intersectionRectangle.Width; int newMarioX = (int)mario.Location.X + locationDiffToChange; mario.Location = new Vector2(newMarioX, mario.Location.Y); } else if (side.returnCollisionSide().Equals(CollisionSide.Top)) { locationDiffToChange = intersectionRectangle.Height; int newMarioY = (int)mario.Location.Y - locationDiffToChange; mario.Location = new Vector2(mario.Location.X, newMarioY); } else if (side.returnCollisionSide().Equals(CollisionSide.Bottom)) { locationDiffToChange = intersectionRectangle.Height; int newMarioY = (int)mario.Location.Y + locationDiffToChange; mario.Location = new Vector2(mario.Location.X, newMarioY); } }
public static void handleEnemyCollision(IEnemyObject enemy, LevelStorage storage) { CollisionDetector collisionDetector = new CollisionDetector(); ICollision side; Rectangle floorCheck; floorCheck = enemy.returnCollisionRectangle(); floorCheck.Y++; enemy.GetRigidBody().Floored = false; foreach (IBlock block in storage.blocksList) { if (block.checkForCollisionTestFlag()) { side = collisionDetector.getCollision(enemy.returnCollisionRectangle(), block.returnCollisionRectangle()); EnemyBlockCollisionHandler.handleCollision(enemy, block, side); } if (collisionDetector.getCollision(floorCheck, block.returnCollisionRectangle()).returnCollisionSide().Equals(CollisionSide.Top)) { enemy.GetRigidBody().Floored = true; } } foreach (IEnviromental enviromental in storage.enviromentalObjectsList) { side = collisionDetector.getCollision(enemy.returnCollisionRectangle(), enviromental.returnCollisionRectangle()); EnemyEnviromentalCollisionHandler.handleCollision(enemy, enviromental, side); } foreach (IEnemyObject secondEnemy in storage.enemiesList) { if (!enemy.Equals(secondEnemy)) { side = collisionDetector.getCollision(enemy.returnCollisionRectangle(), secondEnemy.returnCollisionRectangle()); EnemyEnemyCollisionHandler.handleCollision(enemy, secondEnemy, side); } } foreach (IProjectile projectile in storage.projectileList) { if (projectile.Active()) { side = collisionDetector.getCollision(enemy.returnCollisionRectangle(), projectile.returnCollisionRectangle()); EnemyProjectileCollisionHandler.handleCollision(enemy, projectile, side); } } }
private static void handleMovement(IEnemyObject enemy, IProjectile projectile, ICollision side) { Rectangle projectileRectangle = projectile.returnCollisionRectangle(); Rectangle enemyRectangle = enemy.returnCollisionRectangle(); Rectangle intersectionRectangle = Rectangle.Intersect(enemyRectangle, projectileRectangle); Vector2 enemyLocation = enemy.returnLocation(); int locationDiffToChange = UtilityClass.zero; if (side.returnCollisionSide().Equals(CollisionSide.Left)) { locationDiffToChange = intersectionRectangle.Width; int newEnemyX = (int)enemyLocation.X - locationDiffToChange; enemy.updateLocation(new Vector2((newEnemyX), enemyLocation.Y)); enemy.RightCollision(); } else if (side.returnCollisionSide().Equals(CollisionSide.Right)) { locationDiffToChange = intersectionRectangle.Width; int newEnemyX = (int)enemyLocation.X + locationDiffToChange; enemy.updateLocation(new Vector2((newEnemyX), enemyLocation.Y)); enemy.LeftCollision(); } else if (side.returnCollisionSide().Equals(CollisionSide.Top)) { locationDiffToChange = intersectionRectangle.Height; int newEnemyY = (int)enemyLocation.Y - locationDiffToChange; enemy.updateLocation(new Vector2(enemyLocation.X, newEnemyY)); enemy.BottomCollision(); } else if (side.returnCollisionSide().Equals(CollisionSide.Bottom)) { locationDiffToChange = intersectionRectangle.Height; int newEnemyY = (int)enemyLocation.Y + locationDiffToChange; enemy.updateLocation(new Vector2(enemyLocation.X, newEnemyY)); enemy.TopCollision(); } }