Ejemplo n.º 1
0
    private void HandleVictory()
    {
        if (PD.isDemo)
        {
            if (!PD.isTransitioning)
            {
                PD.MoveOutOfDemo();
            }
            return;
        }
        if (gameOver)
        {
            if (isTransitioning)
            {
                return;
            }
            if (PD.gameType == PersistData.GT.Challenge && board1.IsDead())
            {
                switch ((hud as PuzzleHUD).retryMenu.state)
                {
                case 1: isTransitioning = true; PD.sounds.SetSoundAndPlay(SoundPaths.S_Menu_Confirm); PD.LowerPuzzleLevel(); PD.SaveAndPuzzleSelect(hud.GetTimeInSeconds()); break;

                case 2: isTransitioning = true; PD.sounds.SetSoundAndPlay(SoundPaths.S_Menu_Confirm); PD.SaveAndReset(hud.GetTimeInSeconds()); break;
                }
                return;
            }
            if (PD.gameType != PersistData.GT.Arcade && !PD.isDemo)
            {
                return;
            }
            if (--endCounter > 0)
            {
                return;
            }
            if (end != null)
            {
                if (PD.isDemo)
                {
                    PD.MoveOutOfDemo(); return;
                }
                bool lop = clicker.isDown() || (board1.actionDelay <= 0 && cursor1.launchOrPause());
                if (lop)
                {
                    board1.actionDelay = PD.KEY_DELAY;
                }
                bool isTheEnd = end.doUpdate(lop);
                if (isTheEnd)
                {
                    isTransitioning = true; PD.DoWin(board1.GetScore(), hud.GetTimeInSeconds(), board1.IsDead());
                }
                return;
            }
            GetGameObject(Vector3.zero, "Tharsabin", Resources.Load <Sprite>(SpritePaths.TransparentBlackCover), false, "Cover HUD");
            end = gameObject.AddComponent <EndArcadeMatchOverlay>();
            end.Setup(!board1.IsDead());
        }
        if (!gameOver)
        {
            PD.totalP1RoundScore += board1.GetScore();
            PD.totalP2RoundScore += board2.GetScore();
        }
        gameOver = true;
        paused   = true;
        Vector3 p1Pos, p2Pos;
        int     winningPlayer = 0;

        winningPlayer = board1.IsDead() ? 2 : 1;
        actor1.DoReaction(CutsceneChar.Reaction.win, winningPlayer == 1);
        actor2.DoReaction(CutsceneChar.Reaction.win, winningPlayer == 2);
        if (player2Human)
        {
            p1Pos = new Vector3(-1.4f, 0.0f); p2Pos = new Vector3(1.4f, 0.0f);
        }
        else
        {
            p1Pos = Vector3.zero; p2Pos = Vector3.zero;
        }
        hud.ShowVictoryText(winningPlayer, p1Pos, p2Pos, player2Human);
        PD.FadeMusic(winningPlayer == 1 || player2Human ? SoundPaths.M_WinMusic : SoundPaths.M_LoseMusic);
        if (PD.gameType == PersistData.GT.Arcade || PD.isDemo)
        {
            endCounter = 60;
        }
        else if (PD.gameType == PersistData.GT.Challenge && winningPlayer == 2)
        {
            (hud as PuzzleHUD).DisplayGameOverRetryScreen();
        }
    }