Exemple #1
0
        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();
 }
Exemple #3
0
        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);
        }
Exemple #4
0
        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);
    }
Exemple #6
0
        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());
                }
            }
        }
Exemple #7
0
        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());
                }
            }
        }
Exemple #8
0
        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;
        }
Exemple #9
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);
        }
Exemple #10
0
        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);
        }
Exemple #11
0
        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;
        }
Exemple #12
0
        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;
        }
Exemple #13
0
        public int GetExperience(string name)
        {
            PartyMember p = FindPartyMemberByName(name);

            return(p.experience);
        }