Esempio n. 1
0
        protected override IEnumerator <float> ThisPlayerTurn(PartyMember character)
        {
            activeUnit = character;
            inventoryInputManager.TargetInventoryContainer = character.Container;
            inventoryInputManager.TargetInventoryDisplay   = character.InventoryDisplay;
            character.inventoryDisplay.SetActive(true);
            character.InventoryDisplay.RedrawInventoryDisplay();

            character.ReplenishAP();
            var battlePanel = (BattleOptionsPanel)character.battleOptionsPanel;

            #region Main Menu

            tutorialScript.taskComplete = true;
main_menu:
            if (!tutorialScript.tutorialComplete && tutorialScript.taskComplete)
            {
                tutorialScript.taskComplete = false;
                Timing.RunCoroutine(tutorialScript.NextTutorialSequence());
                yield return(Timing.WaitUntilTrue(() => tutorialScript.canContinue));

                tutorialScript.canContinue = false;
            }
            EventSystem.current.sendNavigationEvents = true;
            BattleEvents.CharacterTurnEvent.Raise(character, BattleEvents.CharacterTurnEvent);
            BattleInput._canPressBack = false;
            usingItem = false;
            battlePanel.ShowBattlePanel();

            #endregion

            #region Choosing Option

            yield return(Timing.WaitUntilFalse(() => choosingOption));

            yield return(Timing.WaitForOneFrame);

            while (choosingAbility)
            {
                BattleInput._canPressBack = true;
                abilityMenuLast           = true;
                if (BattleInput.CancelCondition)
                {
                    abilityMenuLast = false;
                    goto main_menu;
                }
                yield return(Timing.WaitForOneFrame);
            }

            while (choosingSpell)
            {
                BattleInput._canPressBack = true;
                spellMenuLast             = true;
                if (BattleInput.CancelCondition)
                {
                    spellMenuLast = false;
                    goto main_menu;
                }
                yield return(Timing.WaitForOneFrame);
            }

            #endregion

            if (endThisMembersTurn)
            {
                goto end_of_turn;
            }

            #region Choosing Target

            yield return(Timing.WaitForOneFrame);

            if (skipChooseTarget)
            {
                skipChooseTarget = false;
            }
            else
            {
                BattleEvents.ChooseTargetEvent.Raise(character, BattleEvents.ChooseTargetEvent);
            }

            if (tutorialScript.forceMaxApConversion && activeUnit.Unit.conversionLevel != 4)
            {
                goto main_menu;
            }
            //if (tutorialScript.forceMaxApConversion) tutorialScript.forceMaxApConversion = false;

            while (choosingTarget)
            {
                yield return(Timing.WaitForOneFrame);

                if (!tutorialScript.canGoBack)
                {
                    continue;
                }
                BattleInput._canPressBack = true;
                if (BattleInput.CancelCondition)
                {
                    goto main_menu;
                }
            }

            if (tutorialScript.forceMaxApConversion)
            {
                tutorialScript.forceMaxApConversion = false;
            }

            abilityMenuLast = false;
            spellMenuLast   = false;

            #endregion

            #region Performing Action

            if (usingItem)
            {
                character.CurrentAP -= 2;
                yield return(Timing.WaitForOneFrame);

                while (character.Unit.animationHandler.usingItem)
                {
                    yield return(Timing.WaitForOneFrame);
                }

                yield return(Timing.WaitForSeconds(0.5f));

                goto skip_command_execution;
            }

            if (tutorialScript.dontExpendAP)
            {
                tutorialScript.dontExpendAP = false;
            }
            else
            {
                character.CurrentAP -= character.Unit.actionCost;
            }

            yield return(Timing.WaitUntilDone(character.InflictStatus
                                                  (Rate.BeforeEveryAction, 0.5f, true)));

            if (!canGiveCommand)
            {
                canGiveCommand = true;
            }
            else
            {
                var attacker = character.Unit.hasSummon ? (UnitBase)character.Unit.currentSummon : character;
                BattleEvents.CharacterAttackEvent.Raise(attacker, BattleEvents.CharacterAttackEvent);
                BattleEvents.CommandEvent.Raise(attacker, BattleEvents.CommandEvent);
            }

            yield return(Timing.WaitUntilFalse(() => performingAction));

            BattleEvents.CharacterAttackEndEvent.Raise(character, BattleEvents.CharacterAttackEndEvent);

            if (endTurnAfterCommand)
            {
                goto end_of_turn;
            }
            yield return(Timing.WaitUntilDone(character.InflictStatus
                                                  (Rate.AfterEveryAction, 0.5f, true)));

            #endregion

skip_command_execution:
            if (PartyOrEnemyTeamIsDead)
            {
                goto end_of_turn;
            }
            if (character.GetStatus() && character.CurrentAP > 0)
            {
                if (!tutorialScript.tutorialComplete)
                {
                    tutorialScript.taskComplete = true;
                }
                goto main_menu;
            }

end_of_turn:
            if (tutorialScript.reactivateAllButtons)
            {
                tutorialScript.reactivateAllButtons = false;
                tutorialScript.SetAllButtons(true);
            }
            endThisMembersTurn  = false;
            endTurnAfterCommand = false;
            BattleEvents.EndOfTurnEvent.Raise(character, BattleEvents.EndOfTurnEvent);
            character.battlePanel.SetActive(false);
            character.inventoryDisplay.SetActive(false);
        }
Esempio n. 2
0
        protected virtual IEnumerator <float> ThisPlayerTurn(PartyMember character)
        {
            activeUnit = character;
            inventoryInputManager.TargetInventoryContainer = character.Container;
            inventoryInputManager.TargetInventoryDisplay   = character.InventoryDisplay;
            character.inventoryDisplay.SetActive(true);
            character.InventoryDisplay.RedrawInventoryDisplay();

            BattleEvents.BeginCharacterTurnEvent.Raise(character, BattleEvents.BeginCharacterTurnEvent);

            character.ReplenishAP();
            var battlePanel = (BattleOptionsPanel)character.battleOptionsPanel;

            #region Main Menu

main_menu:
            EventSystem.current.sendNavigationEvents = true;
            BattleEvents.CharacterTurnEvent.Raise(character, BattleEvents.CharacterTurnEvent);
            BattleInput._canPressBack         = false;
            BattleInput._canCheckPartyMembers = true;
            BattleInput._checkingPartyMembers = false;
            usingItem = false;
            battlePanel.ShowBattlePanel();

            #endregion

            #region Choosing Option

            yield return(Timing.WaitUntilFalse(() => choosingOption));

            yield return(Timing.WaitForOneFrame);

            while (choosingAbility)
            {
                //BattleInput._canCheckPartyMembers = false;
                BattleInput._canPressBack = true;
                abilityMenuLast           = true;
                if (BattleInput.CancelCondition)
                {
                    abilityMenuLast = false;
                    goto main_menu;
                }
                yield return(Timing.WaitForOneFrame);
            }

            while (choosingSpell)
            {
                //BattleInput._canCheckPartyMembers = false;
                BattleInput._canPressBack = true;
                spellMenuLast             = true;
                if (BattleInput.CancelCondition)
                {
                    spellMenuLast = false;
                    goto main_menu;
                }
                yield return(Timing.WaitForOneFrame);
            }

            #endregion

            if (endThisMembersTurn)
            {
                goto end_of_turn;
            }

            #region Choosing Target

            yield return(Timing.WaitForOneFrame);

            if (skipChooseTarget)
            {
                skipChooseTarget = false;
            }
            else
            {
                BattleEvents.ChooseTargetEvent.Raise(character, BattleEvents.ChooseTargetEvent);
            }

            while (choosingTarget)
            {
                BattleInput._canCheckPartyMembers = false;
                yield return(Timing.WaitForOneFrame);

                BattleInput._canPressBack = true;
                if (BattleInput.CancelCondition)
                {
                    goto main_menu;
                }
            }

            abilityMenuLast = false;
            spellMenuLast   = false;

            #endregion

            #region Performing Action

            if (usingItem)
            {
                character.CurrentAP -= 2;
                yield return(Timing.WaitForOneFrame);

                while (character.Unit.animationHandler.usingItem)
                {
                    yield return(Timing.WaitForOneFrame);
                }

                yield return(Timing.WaitForSeconds(0.5f));

                goto skip_command_execution;
            }

            character.CurrentAP -= character.Unit.actionCost;

            yield return(Timing.WaitUntilDone(character.InflictStatus
                                                  (Rate.BeforeEveryAction, 0.5f, true)));

            if (!canGiveCommand)
            {
                canGiveCommand = true;
            }
            else
            {
                var attacker = character.Unit.hasSummon ? (UnitBase)character.Unit.currentSummon : character;
                BattleEvents.CharacterAttackEvent.Raise(attacker, BattleEvents.CharacterAttackEvent);
                BattleEvents.CommandEvent.Raise(attacker, BattleEvents.CommandEvent);
            }

            yield return(Timing.WaitUntilFalse(() => performingAction));

            BattleEvents.CharacterAttackEndEvent.Raise(character, BattleEvents.CharacterAttackEndEvent);

            if (endTurnAfterCommand)
            {
                goto end_of_turn;
            }
            yield return(Timing.WaitUntilDone(character.InflictStatus
                                                  (Rate.AfterEveryAction, 0.5f, true)));

            #endregion

skip_command_execution:
            if (PartyOrEnemyTeamIsDead)
            {
                goto end_of_turn;
            }
            if (character.GetStatus() && character.CurrentAP > 0)
            {
                goto main_menu;
            }

end_of_turn:
            endThisMembersTurn  = false;
            endTurnAfterCommand = false;
            BattleEvents.EndOfTurnEvent.Raise(character, BattleEvents.EndOfTurnEvent);
            character.battlePanel.SetActive(false);
            character.inventoryDisplay.SetActive(false);
        }