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();
                }
            }
        }
Esempio n. 4
0
 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();
                    }
                }
            }
        }