Exemplo n.º 1
0
        public static void HandleKoopaCollision(Koopa koopa, IBlock block, CollisionSide side)
        {
            Physics.GeneralPhysics.RepelObject(block, koopa, side);

            if (block.BlockPhysics.BlockBumped)
            {
                koopa.BeFlipped();
                SoundFactory.Instance.PlayKickEnemySound();
            }
            else
            {
                if (IsHorizontalCollision(side))
                {
                    koopa.ChangeDirection(side);
                    if (koopa.IsKicked)
                    {
                        SoundFactory.Instance.PlayBumpBlockSound();
                    }
                }
            }
        }
Exemplo n.º 2
0
        public static void HandleKoopaCollision(Koopa koopa, IEnemy collidedEnemy, CollisionSide side)
        {
            Physics.GeneralPhysics.RepelObject(collidedEnemy, koopa, side);

            if (koopa.IsKicked)
            {
                collidedEnemy.TakeDamage();
                SoundFactory.Instance.PlayKickEnemySound();
            }
            else
            {
                if (!IsHorizontalCollision(side))
                {
                    return;
                }

                switch (collidedEnemy)
                {
                case Goomba collidedGoomba:
                    collidedGoomba.ChangeDirection(GetOppositeSide(side));
                    break;

                case Koopa collidedKoopa:
                    if (collidedKoopa.IsKicked)
                    {
                        koopa.TakeDamage();
                        SoundFactory.Instance.PlayKickEnemySound();
                    }
                    else
                    {
                        collidedKoopa.ChangeDirection(GetOppositeSide(side));
                    }
                    break;
                }

                koopa.ChangeDirection(side);
            }
        }