public static void HandleCollision(IEnemy enemy, IBlock block, Game1.Side side) { EnemyGravityHandler gravity = new EnemyGravityHandler(); if (side.Equals(Game1.Side.Left) || side.Equals(Game1.Side.Right))// || side.Equals(Game1.Side.Top)) { if (block.IsHit()) { enemy.BeFlipped(); gravity.ApplyGravityToEnemy(enemy); } else if (block is UnbreakableBlock) { enemy.ChangeDirection(); } } else if (side.Equals(Game1.Side.Bottom)) { if (block.IsHit()) { enemy.BeFlipped(); gravity.ApplyGravityToEnemy(enemy); Display.UpdateKilledEnemy(); } enemy.ManualMoveY(-1 * enemy.GetVerticalVelocity()); } }
public void CheckGoombaCollisions(List <IBlock> blocks, List <IPipe> pipes, List <IEnemy> goombas, List <IEnemy> koopas) { Game1.Side collisionType = Game1.Side.None; GeneralCollisionDetector generalDetector = new GeneralCollisionDetector(); foreach (Goomba goomba in goombas) { EnemyGravityHandler gravityHandler = new EnemyGravityHandler(goomba); Rectangle currentGoomba = goomba.GetRectangle(); bool goombaIsSupported = false; foreach (Koopa koopa in koopas) { Rectangle currentKoopa = koopa.GetRectangle(); collisionType = generalDetector.DetermineCollision(currentGoomba, currentKoopa); EnemyEnemyCollisionHandler.HandleCollision(goomba, koopa, collisionType); } foreach (IPipe pipe in pipes) { Rectangle currentPipe = pipe.GetRectangle(); collisionType = generalDetector.DetermineCollision(currentGoomba, currentPipe); EnemyPipeCollisionHandler.HandleCollision(goomba, pipe, collisionType); if (collisionType.Equals(Game1.Side.Bottom) || (currentPipe.Top - currentGoomba.Bottom <= 3 && generalDetector.IsAlongSameYAxis(currentGoomba, currentPipe))) { goombaIsSupported = true; } } foreach (IBlock block in blocks) { Rectangle currentBlock = block.GetRectangle(); collisionType = generalDetector.DetermineCollision(currentGoomba, currentBlock); EnemyBlockCollisionHandler.HandleCollision(goomba, block, collisionType); if (collisionType.Equals(Game1.Side.Bottom) || (currentBlock.Top - currentGoomba.Bottom <= 3 && generalDetector.IsAlongSameYAxis(currentGoomba, currentBlock))) { goombaIsSupported = true; } } if (!goombaIsSupported) { gravityHandler.ApplyGravityToEnemy(); } else { goomba.SetGrounded(); } } }
public static void HandleCollision(Fireball fireball, IEnemy enemy, Game1.Side side) { EnemyGravityHandler gravity = new EnemyGravityHandler(); if (side != Game1.Side.None) { if (enemy is Goomba) { Goomba localGoomba = (Goomba)enemy; localGoomba.BeFlipped(); gravity.ApplyGravityToEnemy(localGoomba); } if (enemy is Koopa) { Koopa localKoopa = (Koopa)enemy; localKoopa.BeFlipped(); gravity.ApplyGravityToEnemy(localKoopa); } fireball.ChangeState(); } }