Exemplo n.º 1
0
    void SelectArea(bool playersMustLive)
    {
        bool charAbove = false;
        bool charBelow = false;

        if (charSelectIndex < 4)
        {
            if (charSelectIndex > 0)
            {
                if (gameMaster.playerParty[charSelectIndex - 1].charName != "na" && (!playersMustLive || gameMaster.playerParty[charSelectIndex - 1].currentHP > 0))
                {
                    charAbove = true;
                }
            }
            if (charSelectIndex < 3)
            {
                if (gameMaster.playerParty[charSelectIndex + 1].charName != "na" && (!playersMustLive || gameMaster.playerParty[charSelectIndex + 1].currentHP > 0))
                {
                    charBelow = true;
                }
            }
        }
        else
        {
            if (charSelectIndex > 4)
            {
                if (enemyParty[charSelectIndex - 5].charName != "na" && enemyParty[charSelectIndex - 5].currentHP > 0)
                {
                    charAbove = true;
                }
            }
            if (charSelectIndex < 7)
            {
                if (enemyParty[charSelectIndex - 3].charName != "na" && enemyParty[charSelectIndex - 3].currentHP > 0)
                {
                    charBelow = true;
                }
            }
        }

        if (charAbove && charBelow)
        {
            charsSelected = new int[2] {
                charSelectIndex - 1, charSelectIndex + 1
            }
        }
        ;
        else
        {
            if (charAbove)
            {
                charsSelected = new int[1] {
                    charSelectIndex - 1
                }
            }
            ;
            else
            {
                charsSelected = new int[1] {
                    charSelectIndex + 1
                }
            };
        }
    }

    void SelectAll(bool playersMustLive)
    {
        bool[] charsSelected   = new bool[8];
        int    charsAliveCount = 0;

        for (int i = 0; i < 8; i++)
        {
            if (i < 4)
            {
                if (gameMaster.playerParty[i].charName != "na" && (!playersMustLive || gameMaster.playerParty[i].currentHP > 0))
                {
                    charsAliveCount++;
                    charsSelected[i] = true;
                }
            }
            else
            {
                if (enemyParty[i - 4].charName != "na" && enemyParty[i - 4].currentHP > 0)
                {
                    charsAliveCount++;
                    charsSelected[i] = true;
                }
            }
        }
        this.charsSelected = new int[charsAliveCount];
        for (int i = 0; i < this.charsSelected.Length; i++)
        {
            for (int k = 0; k < charsSelected.Length; k++)
            {
                if (charsSelected[k])
                {
                    this.charsSelected[i] = k;
                    charsSelected[k]      = false;
                    break;
                }
            }
        }
    }

    void MenuConfirm()
    {
        if (currentMenu != RpgMenu.SelectChar)
        {
            prevMenu = currentMenu;
        }

        switch (currentMenu)
        {
        case RpgMenu.Main:
            switch (mainIndex)
            {
            case 0:
                currentMenu = RpgMenu.Attack;
                break;

            case 1:
                currentMenu = RpgMenu.Skill;
                break;

            case 2:
                currentMenu = RpgMenu.Item;
                break;

            case 3:
                currentMenu = RpgMenu.Escape;
                break;
            }
            break;

        case RpgMenu.Attack:
            currentMenu = RpgMenu.SelectChar;
            break;

        case RpgMenu.Skill:
            currentMenu = RpgMenu.SelectChar;
            break;

        case RpgMenu.Item:
            currentMenu = RpgMenu.SelectChar;
            break;

        case RpgMenu.SelectChar:
            switch (prevMenu)
            {
            case RpgMenu.Attack:
                switchToSTG = true;
                break;

            case RpgMenu.Skill:
                usingSkill = true;
                break;
            }

            battleUI.CharacterCursors(-1, new int[0]);
            break;
        }
        menuInteractionDelay = 10;
        battleUI.ChangeBattleMenu();
    }

    int[] TargetHandling()
    {
        int[] allTargets = new int[charsSelected.Length + ((charSelectIndex != -1) ? 1 : 0)];
        if (charSelectIndex != -1)
        {
            allTargets[0] = charSelectIndex;
        }
        for (int i = 0; i < charsSelected.Length; i++)
        {
            allTargets[i + ((charSelectIndex != -1) ? 1 : 0)] = charsSelected[i];
        }
        return(allTargets);
    }

    void MenuBack()
    {
        switch (currentMenu)
        {
        case RpgMenu.Attack:
            currentMenu = RpgMenu.Main;
            break;

        case RpgMenu.Skill:
            currentMenu = RpgMenu.Main;
            break;

        case RpgMenu.Item:
            currentMenu = RpgMenu.Main;
            break;

        case RpgMenu.SelectChar:
            currentMenu     = prevMenu;
            charsSelected   = new int[0];
            charSelectIndex = -1;
            battleUI.CharacterCursors(charSelectIndex, charsSelected);
            break;
        }
        menuInteractionDelay = 10;
        battleUI.ChangeBattleMenu();
    }

    void UseSkill(Character caster, Character[] targets, SkillData skill)
    {
        Skill.UseSkill(skill, caster, targets);
    }

    void EnemyTurn()
    {
        currentMenu = RpgMenu.None;
        battleUI.ChangeBattleMenu();
        Debug.Log("Enemy " + (currentTurn - 4).ToString() + " (" + enemyParty[currentTurn - 4].charName + ")'s turn");
        switchToSTG = true;
    }

    void SwitchToSTG(int playerTarget, RpgEnemy enemyAttacker, int patternIndex, bool spell)
    {
        camAnimations.SetBool("BulletHell", true);
        shmupManager.endSTG = false;
        shmupManager.SpawnPlayer(gameMaster.playerParty[playerTarget].shmupData, gameMaster.playerParty[playerTarget].shotTypeEquip, playerTarget, gameMaster.playerParty[playerTarget].damageTypeUnlocks[attackSelectIndex].damageType, gameMaster.playerParty[playerTarget].statusEffects.ToArray());
        shmupManager.SpawnEnemy(enemyAttacker.shmupSpawn, enemyAttacker.weaknessesAndResistances, 120, new Vector2(0, 275), patternIndex, spell);
        gameMaster.lockInputs = true;

        switchToSTG    = false;
        switchingToSTG = true;
    }

    void InitializeSTG(int player, GameMasterScript.DamageTypes damageType, RpgEnemy enemy, int patternIndex, bool spell)
    {
        shmupManager.SpawnPlayer(gameMaster.playerParty[player].shmupData, gameMaster.playerParty[player].shotTypeEquip, player, damageType, gameMaster.playerParty[player].statusEffects.ToArray());
        shmupManager.SpawnEnemy(enemy.shmupSpawn, enemy.weaknessesAndResistances, 120, new Vector2(0, 275), patternIndex, spell);
    }

    void SwitchToRPG()
    {
        camAnimations.SetBool("BulletHell", false);
        mainCam.gameObject.SetActive(true);
        inSTG          = false;
        returningToRpg = true;
    }

    IEnumerator SwitchToSTGCam()
    {
        switchToSTG              = false;
        switchingToSTG           = true;
        shmupManager.startingSTG = true;
        shmupManager.endSTG      = false;
        camAnimations.SetBool("BulletHell", true);
        StartCoroutine(battleUI.FadeRPGMenu(false));
        gameMaster.lockInputs = true;

        do
        {
            yield return(null);
        } while (!battleUI.FadeBlackscreen(true));

        int delayCounter = 5;

        do
        {
            delayCounter--;
            yield return(null);
        } while (delayCounter > 0);

        mainCam.gameObject.SetActive(false);
        shmupManager.blackScreen.color = new Color(0, 0, 0, 1);
        shmupManager.shmupCam.gameObject.SetActive(true);
        inSTG          = true;
        switchingToSTG = false;

        if (currentTurn > 3)
        {
            int player = Random.Range(0, 2);
            InitializeSTG(player, gameMaster.playerParty[player].damageTypeUnlocks[0].damageType, enemyParty[currentTurn - 4], 0, true);
        }
        else
        {
            InitializeSTG(currentTurn, gameMaster.playerParty[currentTurn].damageTypeUnlocks[attackSelectIndex].damageType, enemyParty[charSelectIndex - 4], 0, usingSkill);
        }

        do
        {
            shmupManager.blackScreen.color = new Color(0, 0, 0, shmupManager.blackScreen.color.a - (gameMaster.timeScale * 0.025f));
            yield return(null);
        } while (shmupManager.blackScreen.color.a > 0);

        gameMaster.lockInputs    = false;
        shmupManager.startingSTG = false;
        shmupManager.inSTG       = true;
    }

    IEnumerator SwitchToRPGCam()
    {
        inSTG = false;
        shmupManager.inSTG    = false;
        returningToRpg        = true;
        gameMaster.lockInputs = true;

        do
        {
            shmupManager.blackScreen.color = new Color(0, 0, 0, shmupManager.blackScreen.color.a + (gameMaster.timeScale * 0.025f));
            yield return(null);
        } while (shmupManager.blackScreen.color.a < 1);

        shmupManager.DestroySTG();

        int delayCounter = 5;

        do
        {
            delayCounter--;
            yield return(null);
        } while (delayCounter > 0);

        camAnimations.SetBool("BulletHell", false);
        mainCam.gameObject.SetActive(true);
        battleUI.InstantBlackscreen(true);
        shmupManager.shmupCam.gameObject.SetActive(false);
        returningToRpg      = false;
        entranceDelayPassed = 0;

        do
        {
            yield return(null);
        } while (!battleUI.FadeBlackscreen(false));

        StartCoroutine(battleUI.FadeRPGMenu(true));

        gameMaster.lockInputs = false;
    }
}