public static void HandleGoombaCollision(Goomba goomba, IEnemy collidedEnemy, CollisionSide side)
        {
            Physics.GeneralPhysics.RepelObject(collidedEnemy, goomba, side);

            if (!IsHorizontalCollision(side))
            {
                return;
            }

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

            case Koopa collidedKoopa:
                if (collidedKoopa.IsKicked)
                {
                    goomba.TakeDamage();
                    SoundFactory.Instance.PlayKickEnemySound();
                }
                else
                {
                    collidedKoopa.ChangeDirection(GetOppositeSide(side));
                }
                break;
            }
            goomba.ChangeDirection(side);
        }
Exemple #2
0
        public static void HandleGoombaCollision(Goomba goomba, IBlock block, CollisionSide side)
        {
            Physics.GeneralPhysics.RepelObject(block, goomba, side);

            if (block.BlockPhysics.BlockBumped)
            {
                goomba.BeFlipped();
                SoundFactory.Instance.PlayKickEnemySound();
            }
            else
            {
                if (IsHorizontalCollision(side))
                {
                    goomba.ChangeDirection(side);
                }
            }
        }