private void SetupCharacterPanel(PartyMember character, int i) { var panel = database.characterPanels[i + offset]; var statusBoxController = panel.transform.Find("Status Effects").GetComponent <StatusEffectControllerUI>(); panel.GetComponent <CharacterPanelControllerUI>().member = character; panel.SetActive(true); statusBoxController.member = character; statusBoxController.Initialize(); }
// Can only be chosen if: The meter is full, they have not already been chosen, their status allows them to perform an action // Can only be chosen once per ROUND private void SetSpecialAttackTurn(PartyMember member) { if (member == null) { return; } if (!member.GetStatus() || member.specialAttackBarVal < 1 || member.Unit.hasPerformedSpecialOnceThisRound) { return; } //Logging.Log($"{member.characterName} has been selected!"); member.Unit.hasPerformedSpecialOnceThisRound = true; Battle.Engine.nextTurnIsSpecialAttack = true; SortingCalculator.InsertUnitAtElement(member, 1); CloseWheel(); }
private void SetupThisMember(PartyMember character, int i, GameObject memberGo) { SetupUnit(character, memberGo); SetupChooseTargetScript(character); SetupBattlePanel(character); SetAbilityMenuOptions(character); SetSpellMenuOptions(character); SetupInventoryDisplay(character, i); SetupProfileBox(character); SetupCharacterPanel(character, i); SetupSpecialAttackSystem(character, memberGo); SetupMemberCameras(i); character.Selectable = character.Unit.gameObject.GetComponent <Selectable>(); Battle.Engine.membersForThisBattle.Add(character); }
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); }
public void Populate(string partyMemberName) { characterController = FindObjectOfType <BattleSystem.CharacterController>(); partyMemberName = partyPanel.GetSelectedPartyMember(); partyMember = characterController.FindPartyMemberByName(partyMemberName); characterName.text = "Name: " + partyMember.characterName; hp.text = string.Format("HP: {0}/{1}", partyMember.health, partyMember.maxHealth); ep.text = string.Format("Energy: {0}/{1}", partyMember.energyPoints, partyMember.maxEnergyPoints); attack.text = string.Format("Attack Power {0}", partyMember.attackPower); defense.text = string.Format("Defense: {0}", partyMember.defensePower); level.text = "Level: " + partyMember.level; int levelUpInAmount = characterController.NextLevel(partyMember.level) - partyMember.experience; levelUpIn.text = "Level Up In: " + Mathf.Abs(levelUpInAmount); }
public void OnEventRaised(UnitBase value1, CharacterGameEvent value2) { if (value2 == characterTurnEvent) { _isMultiTarget = false; } else if (value2 == chooseTargetEvent) { Battle.Engine.choosingTarget = true; character = (PartyMember)value1; SetNavigation(); MenuController.SetTargetFirstSelected(); if (_isMultiTarget) { Timing.RunCoroutine(WaitForMultiTargetConfirmation()); } } }
public void OnEventRaised(UnitBase character, CharacterGameEvent @event) { if (@event == characterTurnEvent) { _isMultiTarget = false; } else if (@event == chooseTargetEvent) { Battle.Engine.choosingTarget = true; ChooseTarget.character = (PartyMember)character; SetNavigation(); ChooseTarget.character.MenuController.DisableScrolls(); MenuController.SetTargetFirstSelected(); if (_isMultiTarget) { Timing.RunCoroutine(WaitForMultiTargetConfirmation()); } } }
private void SetupInventoryDisplay(PartyMember character, int i) { var inventory = GameObject.Find("Main Inventory").GetComponent <Inventory>(); var weaponInventory = Instantiate(character.weaponInventory, character.Unit.transform, true); weaponInventory.name = character.weaponInventory.name; var armorInventory = Instantiate(character.armorInventory, character.Unit.transform, true); armorInventory.name = character.armorInventory.name; character.inventoryDisplay = database.inventoryCanvases[i]; var mainDisplay = character.inventoryDisplay.transform.Find("InventoryDisplay").GetComponent <InventoryDisplay>(); mainDisplay.TargetInventoryName = $"{inventory.name}"; mainDisplay.SetupInventoryDisplay(); var weaponDisplay = character.inventoryDisplay.transform.Find("Weapon Display").GetComponent <InventoryDisplay>(); weaponDisplay.TargetInventoryName = $"{character.weaponInventory.name}"; weaponDisplay.SetupInventoryDisplay(); var armorDisplay = character.inventoryDisplay.transform.Find("Armor Display").GetComponent <InventoryDisplay>(); armorDisplay.TargetInventoryName = $"{character.armorInventory.name}"; armorDisplay.SetupInventoryDisplay(); var details = character.inventoryDisplay.GetComponentInChildren <InventoryDetails>(); details.TargetInventoryName = $"{inventory.name}"; if (character.equippedWeapon == null) { Debug.LogError($"{character.characterName} has no weapon!"); } character.equippedWeapon.partyMember = character; }
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); }
private void SetupBattlePanel(PartyMember character) { character.battlePanel = null; character.battleOptionsPanel = null; character.battlePanel = Instantiate(database.battlePanelGO, database.battlePanelSpawnPoint, false); character.battleOptionsPanel = Instantiate(database.boPanel); var panel = ((BattleOptionsPanel)character.battleOptionsPanel); panel.character = character; panel.anim = character.battlePanel.GetComponent <Animator>(); var apConversionBox = character.battlePanel.transform.Find("AP Conversion Box").gameObject; apConversionBox.GetComponent <APConversionControllerUI>().unit = character.Unit; var mainMenu = character.battlePanel.transform.Find("Battle Menu").transform.Find("Main Options"); mainMenu.Find("Attack Button").gameObject.GetComponent <Button>().onClick.AddListener (delegate { ((BattleOptionsPanel)character.battleOptionsPanel).GetCommandInformation("UniversalAction,1,1,2"); }); var abilityButton = mainMenu.Find("Abilities Button").gameObject.GetComponent <Button>(); if (character.abilities.Count == 0) { abilityButton.interactable = false; } else { abilityButton.onClick.AddListener(delegate { ((BattleOptionsPanel)character.battleOptionsPanel).OnAbilityMenuButton(); }); } var spellButton = mainMenu.Find("Spells Button").gameObject.GetComponent <Button>(); if (character.spells.Count == 0) { spellButton.interactable = false; } else { spellButton.onClick.AddListener(delegate { ((BattleOptionsPanel)character.battleOptionsPanel).OnSpellMenuButton(); }); } mainMenu.Find("Inventory Button").gameObject.GetComponent <Button>().onClick.AddListener (delegate { Battle.Engine.inventoryInputManager.OpenInventory(); BattleInput._canCheckPartyMembers = false; }); mainMenu.Find("End Turn Button").gameObject.GetComponent <Button>().onClick.AddListener (delegate { ((BattleOptionsPanel)character.battleOptionsPanel).OnEndTurnButton(); }); var fleeButton = mainMenu.Find("Flee Button").gameObject.GetComponent <Button>(); if (!Battle.Engine.disableFleeOption) { fleeButton.onClick.AddListener(delegate { ((BattleOptionsPanel)character.battleOptionsPanel).OnFleeButton(); }); } else { fleeButton.interactable = false; } if (Battle.Engine.GetType() == typeof(TutorialEngine)) { mainMenu.Find("Flee Button").gameObject.GetComponent <Button>().interactable = false; } character.BattlePanelAnim = character.battlePanel.GetComponent <Animator>(); character.battlePanel.SetActive(false); }
private static void SetSpellMenuOptions(PartyMember character) { var spellMenu = character.battlePanel.transform.Find("Battle Menu"). transform.Find("Mask (1)").transform.Find("Spell Menu").transform; var spellListIndex = 0; var scrollController = character.battlePanel.transform.Find("Battle Menu"). transform.Find("Mask (1)").GetComponent <ButtonScrollController>(); scrollController.enabled = true; var buttonList = new List <Button>(); //while (character.spells.Count > 5) character.abilities.Remove(character.spells[character.spells.Count-1]); for (var buttonIndex = 0; buttonIndex < character.spells.Count; buttonIndex++) { var optionButton = spellMenu.GetChild(buttonIndex).gameObject; optionButton.GetComponentInChildren <TextMeshProUGUI>().text = character.spells[spellListIndex].name; optionButton.transform.Find("Icon").GetComponent <Image>().sprite = character.spells[spellListIndex].icon; optionButton.SetActive(true); var param = character.spells[spellListIndex].GetParameters(spellListIndex); var spell = character.spells[spellListIndex]; optionButton.GetComponent <Button>().onClick. AddListener(delegate { ((BattleOptionsPanel)character.battleOptionsPanel).GetCommandInformation(param); character.Unit.currentAbility = spell; character.Unit.isAbility = true; }); if (character.spells[spellListIndex].isMultiTarget) { optionButton.GetComponent <Button>().onClick. AddListener(delegate { ChooseTarget._isMultiTarget = true; }); } optionButton.GetComponent <InfoBoxUI>().information = $"{character.spells[spellListIndex].description}\n" + $"({character.spells[spellListIndex].actionCost} AP)"; spell.attackState = spellListIndex + 1; spellListIndex++; buttonList.Add(optionButton.GetComponent <Button>()); if (buttonIndex != character.spells.Count - 1) { continue; } var firstOption = spellMenu.GetChild(0).gameObject; var firstOpNav = firstOption.GetComponent <Selectable>().navigation; var nav = optionButton.GetComponent <Selectable>().navigation; nav.selectOnDown = firstOption.GetComponent <Button>(); optionButton.GetComponent <Selectable>().navigation = nav; firstOpNav.selectOnUp = optionButton.GetComponent <Button>(); firstOption.GetComponent <Selectable>().navigation = firstOpNav; // optionButton.GetComponent<ButtonEvents>().onSelect.AddListener // (() => scrollController.SetLastPosition()); } scrollController.AddButtons(buttonList); scrollController.enabled = false; }
private static void SetAbilityMenuOptions(PartyMember character) { var abilityMenu = character.battlePanel.transform.Find("Battle Menu"). transform.Find("Mask").transform.Find("Ability Menu").transform; var abilityListIndex = 0; var scrollController = character.battlePanel.transform.Find("Battle Menu"). transform.Find("Mask").GetComponent <ButtonScrollController>(); scrollController.enabled = true; var buttonList = new List <Button>(); //while (character.abilities.Count > 5) character.abilities.Remove(character.abilities[character.abilities.Count-1]); for (var buttonIndex = 0; buttonIndex < character.abilities.Count; buttonIndex++) { var optionButton = abilityMenu.GetChild(buttonIndex).gameObject; optionButton.GetComponentInChildren <TextMeshProUGUI>().text = character.abilities[abilityListIndex].name; optionButton.transform.Find("Icon").GetComponent <Image>().sprite = character.abilities[abilityListIndex].icon; optionButton.SetActive(true); var param = character.abilities[abilityListIndex].GetParameters(abilityListIndex); var ability = character.abilities[abilityListIndex]; // buttonList.Add(optionButton.GetComponent<Button>()); if (!character.abilities[abilityListIndex].hasOverride) { optionButton.GetComponent <Button>().onClick.AddListener(delegate { ((BattleOptionsPanel)character.battleOptionsPanel).GetCommandInformation(param); character.Unit.currentAbility = ability; character.Unit.isAbility = true; }); if (character.abilities[abilityListIndex].isMultiTarget) { optionButton.GetComponent <Button>().onClick.AddListener(delegate { ChooseTarget._isMultiTarget = true; }); } } else { BattleEvents.OverrideButtonEvent.Raise(optionButton); } optionButton.GetComponent <InfoBoxUI>().information = $"{character.abilities[abilityListIndex].description}\n" + $"({character.abilities[abilityListIndex].actionCost} AP)"; ability.attackState = abilityListIndex + 1; character.Unit.animOverride[$"Ability {abilityListIndex+1}"] = ability.animation; abilityListIndex++; buttonList.Add(optionButton.GetComponent <Button>()); if (buttonIndex != character.abilities.Count - 1) { continue; } var firstOption = abilityMenu.GetChild(0).gameObject; var firstOpNav = firstOption.GetComponent <Selectable>().navigation; if (!character.specialAttack) { var nav = optionButton.GetComponent <Selectable>().navigation; nav.selectOnDown = firstOption.GetComponent <Button>(); optionButton.GetComponent <Selectable>().navigation = nav; firstOpNav.selectOnUp = optionButton.GetComponent <Button>(); firstOption.GetComponent <Selectable>().navigation = firstOpNav; // optionButton.GetComponent<ButtonEvents>().onSelect.AddListener // (() => scrollController.SetLastPosition()); return; } var specialAttackIndex = character.abilities.Count; var specialAttackButton = abilityMenu.GetChild(specialAttackIndex).gameObject; specialAttackButton.GetComponentInChildren <TextMeshProUGUI>().text = character.specialAttack.name; specialAttackButton.transform.Find("Icon").GetComponent <Image>().sprite = character.specialAttack.icon; specialAttackButton.AddComponent <SpecialAttackButtonUI>().member = character; specialAttackButton.SetActive(true); specialAttackButton.GetComponent <Button>().onClick.AddListener (delegate { ((BattleOptionsPanel)character.battleOptionsPanel). GetCommandInformation($"UniversalAction,2,1,{character.CurrentAP}"); character.Unit.specialAttackAP = character.Unit.currentAP; character.Unit.currentAbility = character.specialAttack; }); // specialAttackButton.GetComponent<ButtonEvents>().onSelect.AddListener // (() => scrollController.SetLastPosition()); specialAttackButton.GetComponent <InfoBoxUI>().information = $"{character.specialAttack.description}"; //if (character.abilities.Count == 5) return; buttonList.Add(specialAttackButton.GetComponent <Button>()); var specialButtonNav = specialAttackButton.GetComponent <Selectable>().navigation; specialButtonNav.selectOnDown = firstOption.GetComponent <Button>(); specialAttackButton.GetComponent <Selectable>().navigation = specialButtonNav; firstOpNav.selectOnUp = specialAttackButton.GetComponent <Button>(); firstOption.GetComponent <Selectable>().navigation = firstOpNav; } scrollController.AddButtons(buttonList); scrollController.enabled = false; character.Unit.anim.runtimeAnimatorController = character.Unit.animOverride; }
public int GetExperience(string name) { PartyMember p = FindPartyMemberByName(name); return(p.experience); }