protected virtual IEnumerator <float> SpecialAttackInterruption(PartyMember character) { nextTurnIsSpecialAttack = false; if (!character.GetStatus() || character.CurrentAP == 0) { BattleEvents.SkipTurnEvent.Raise(character, BattleEvents.SkipTurnEvent); } activeUnit = character; BattleInput._canPressBack = false; character.Unit.specialAttackAP = character.Unit.currentAP; character.Unit.currentAbility = character.specialAttack; ChooseTarget._targetOptions = 1; ChooseTarget.GetCurrentCommand("UniversalAction", 2); BattleEvents.ChooseTargetEvent.Raise(character, BattleEvents.ChooseTargetEvent); yield return(Timing.WaitUntilFalse(() => choosingTarget)); character.CurrentAP -= character.Unit.currentAP; 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)); yield return(Timing.WaitUntilDone(character.InflictStatus (Rate.AfterEveryAction, 0.5f, true))); endThisMembersTurn = false; BattleEvents.EndOfTurnEvent.Raise(character, BattleEvents.EndOfTurnEvent); character.inventoryDisplay.SetActive(false); }
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); }
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); }