コード例 #1
0
        public void CheckKoopaCollisions(List <IBlock> blocks, List <IPipe> pipes, List <IEnemy> koopas)
        {
            Game1.Side collisionType = Game1.Side.None;
            GeneralCollisionDetector generalDetector = new GeneralCollisionDetector();
            EnemyGravityHandler      gravityHandler  = new EnemyGravityHandler();

            for (int loop = 0; loop < koopas.Count; loop++)
            {
                Koopa koopa = (Koopa)koopas.ElementAt(loop);

                Rectangle currentKoopa = koopa.GetRectangle();

                for (int secondLoop = loop + 1; secondLoop < koopas.Count; secondLoop++)
                {
                    Koopa     secondKoopa        = (Koopa)koopas.ElementAt(secondLoop);
                    Rectangle currentSecondKoopa = secondKoopa.GetRectangle();
                    collisionType = generalDetector.DetermineCollision(currentKoopa, currentSecondKoopa);
                    EnemyEnemyCollisionHandler.HandleCollision(koopa, secondKoopa, collisionType);
                }

                foreach (IPipe pipe in pipes)
                {
                    Rectangle currentPipe = pipe.GetRectangle();
                    collisionType = generalDetector.DetermineCollision(currentKoopa, currentPipe);
                    EnemyPipeCollisionHandler.HandleCollision(koopa, pipe, collisionType);
                }

                foreach (IBlock block in blocks)
                {
                    Rectangle currentBlock = block.GetRectangle();
                    collisionType = generalDetector.DetermineCollision(currentKoopa, currentBlock);
                    EnemyBlockCollisionHandler.HandleCollision(koopa, block, collisionType);
                }
            }
        }
コード例 #2
0
        public static void HandleCollision(IPlayer marioPlayer, IEnemy enemy, Game1.Side side)
        {
            Mario mario = (Mario)marioPlayer;

            if (!mario.IsInSpecialAnimationState())
            {
                if (mario.IsStarMario() && !side.Equals(Game1.Side.None))
                {
                    enemy.BeFlipped();
                }
                else if (side.Equals(Game1.Side.Left) || side.Equals(Game1.Side.Right) || side.Equals(Game1.Side.Top))
                {
                    mario.TakeDamage();
                }
                //case mario on enemy
                else if (side.Equals(Game1.Side.Bottom))
                {
                    int bounceVelocity = -4;
                    // case enemy is goomba
                    if (enemy is Goomba)
                    {
                        Goomba localGoomba = (Goomba)enemy;
                        localGoomba.KillEnemy();

                        mario.SetVerticalVelocity(bounceVelocity);
                    }
                    if (enemy is Koopa)
                    {
                        Koopa localKoopa = (Koopa)enemy;

                        localKoopa.KillEnemy();
                        mario.SetVerticalVelocity(bounceVelocity);
                    }

                    if (!WorldManager.spriteSet.players[0].GetTouchedGround())
                    {
                        WorldManager.spriteSet.players[0].IncrementEnemyMultiplier();
                    }
                }
            }
        }
コード例 #3
0
        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();
            }
        }
コード例 #4
0
 public KoopaLeftMovingState(Koopa myKoopa)
 {
     this.koopa = myKoopa;
 }
コード例 #5
0
 public KoopaStompedState(Koopa koopa)
 {
     this.koopa             = koopa;
     this.koopa.koopaSprite = new KoopaStompedSprite();
 }
コード例 #6
0
 public KoopaNightmareState(Koopa myKoopa)
 {
     this.koopa             = myKoopa;
     this.koopa.koopaSprite = new KoopaNightmareSprite();
 }
コード例 #7
0
 public KoopaDeadState(Koopa myKoopa)
 {
     this.koopa             = myKoopa;
     this.koopa.koopaSprite = new KoopaDeadSprite();
 }
コード例 #8
0
 public KoopaRightMovingState(Koopa myKoopa)
 {
     this.koopa = myKoopa;
 }