public static void HandleCollision(KoopaShell shell, IBlock block, Game1.Side side) { if (shell.isHit) { if (side.Equals(Game1.Side.Left) || side.Equals(Game1.Side.Right)) { shell.ChangeDirection(); } } }
public static void HandleCollision(IItem koopaShell, Game1.Side side) { KoopaShell shell = (KoopaShell)koopaShell; if (shell.isHit) { if (side.Equals(Game1.Side.Left) || side.Equals(Game1.Side.Right)) { shell.ChangeDirection(); } } }
public static void HandleCollision(IItem koopaShell, IEnemy enemy, Game1.Side side) { KoopaShell shell = (KoopaShell)koopaShell; if (shell.isHit) { if (!side.Equals(Game1.Side.None)) { enemy.BeFlipped(); } } }
public IItem CreateShell() { if (!hasCreatedShell) { int verticalShellDisplacement = 18; Vector2 shellLocation = new Vector2(location.X, location.Y + verticalShellDisplacement); KoopaShell shell = new KoopaShell(shellLocation); hasCreatedShell = true; return(shell); } else { return(null); } }
public static void HandleCollision(IPlayer player, IItem item, Game1.Side side) { if (!side.Equals(Game1.Side.None)) { MarioState playerState = player.GetState(); if (item is FireFlower) { if (playerState.Equals(MarioState.SMALL) || playerState.Equals(MarioState.LARGE)) { player.SwitchToFireMario(true); } item.ChangeState(); } if (item is RedMushroom) { if (playerState.Equals(MarioState.SMALL)) { player.SwitchToBigMario(true); } item.ChangeState(); } if (item is Star) { //go to star state item.ChangeState(); if (StarUtility.isFirstShown == false) { StarUtility.starTime = 8; StarUtility.isStarMario = true; player.SetStarMario(true); StarUtility.StarMarioLock = true; Console.Out.WriteLine("collide with star"); StarUtility.isFirstShown = true; } } if (item is VisibleCoin) { item.ChangeState(); } if (item is GreenMushroom) { int lives = player.GetLives(); player.SetLives(lives + 1); item.ChangeState(); } } if (item is KoopaShell) { KoopaShell shell = (KoopaShell)item; int collisionFix = 2; if (side.Equals(Game1.Side.Top)) { int bounceVelocity = -5; //Console.WriteLine("here"); player.SetVerticalVelocity(bounceVelocity); item.ChangeState(); } if (side.Equals(Game1.Side.Left)) { if (shell.isHit) { player.TakeDamage(); } else { player.MoveX(-1 * collisionFix); player.SetHorizontalVelocity(0); } } else if (side.Equals(Game1.Side.Right)) { if (shell.isHit) { player.TakeDamage(); } else { player.MoveX(collisionFix); player.SetHorizontalVelocity(0); } } } if (item is Flag) { if (side.Equals(Game1.Side.Left)) { MarioFlagCollisionHandler.HandleCollision(player, item); } } }
public void CheckKoopaShellCollisions(List <IItem> items, List <IEnemy> goombas, List <IEnemy> koopas, List <IBlock> blocks, List <IPipe> pipes) { Game1.Side collisionType = Game1.Side.None; GeneralCollisionDetector generalDetector = new GeneralCollisionDetector(); ItemGravityHandler gravityHandler = new ItemGravityHandler(); foreach (IItem item in items) { if (item is KoopaShell) { KoopaShell shell = (KoopaShell)item; Rectangle currentShell = shell.GetRectangle(); bool itemIsSupported = false; foreach (IBlock block in blocks) { Rectangle currentBlock = block.GetRectangle(); collisionType = generalDetector.DetermineCollision(currentBlock, currentShell); ShellBlockCollisionHandler.HandleCollision(shell, block, collisionType); if (collisionType.Equals(Game1.Side.Top) || (currentBlock.Top - currentShell.Bottom <= 5 && generalDetector.IsAlongSameYAxis(currentShell, currentBlock))) { itemIsSupported = true; } } foreach (IPipe pipe in pipes) { Rectangle currentPipe = pipe.GetRectangle(); collisionType = generalDetector.DetermineCollision(currentPipe, currentShell); ShellPipeCollisionHandler.HandleCollision(shell, collisionType); if (collisionType.Equals(Game1.Side.Top) || (currentPipe.Top - currentShell.Bottom <= 5 && generalDetector.IsAlongSameYAxis(currentShell, currentPipe))) { itemIsSupported = true; } } foreach (Goomba goomba in goombas) { Rectangle currentGoomba = goomba.GetRectangle(); collisionType = generalDetector.DetermineCollision(currentShell, currentGoomba); ShellEnemyCollisionHandler.HandleCollision(shell, goomba, collisionType); } foreach (Koopa koopa in koopas) { Rectangle currentKoopa = koopa.GetRectangle(); collisionType = generalDetector.DetermineCollision(currentShell, currentKoopa); ShellEnemyCollisionHandler.HandleCollision(shell, koopa, collisionType); } if (!(itemIsSupported)) { gravityHandler.ApplyGravityToItem(shell); } else { shell.SetGrounded(); } } } }