Пример #1
0
        public FactionAbility GetAbilityFromCurrentFaction(int index)
        {
            FactionAbilityInfo abilityInfo = FactionManager.GetCurrentFaction().abilityInfo;

            if (index < abilityInfo.abilityList.Count)
            {
                return(abilityInfo.abilityList[index]);
            }
            return(null);
        }
        protected float DrawFactionAbilityInfo(float startX, float startY, Faction faction)
        {
            string text = "Faction Abilities " + (!foldAbilityInfo ? "(show)" : "(hide)");

            foldAbilityInfo = EditorGUI.Foldout(new Rect(startX, startY, width, height), foldAbilityInfo, text, foldoutStyle);
            if (foldAbilityInfo)
            {
                startX += 15;     spaceX -= 15;

                FactionAbilityInfo abInfo = faction.abilityInfo;

                cont = new GUIContent(" - Full Energy:", "The maximum energy pool available to use ability for the faction");
                EditorGUI.LabelField(new Rect(startX, startY += spaceY, width, height), cont);
                abInfo.energyFull = EditorGUI.FloatField(new Rect(startX + spaceX, startY, widthS, height), abInfo.energyFull);

                cont = new GUIContent(" - Energy Rate:", "The amount of energy gained each turn");
                EditorGUI.LabelField(new Rect(startX, startY += spaceY, width, height), cont);
                abInfo.energyGainPerTurn = EditorGUI.FloatField(new Rect(startX + spaceX, startY, widthS, height), abInfo.energyGainPerTurn);


                cont = new GUIContent(" - Abilities:", "Abilities available for this faction");
                GUI.Label(new Rect(startX, startY + spaceY, width, height), cont);

                for (int i = 0; i < fAbilityDB.abilityList.Count; i++)
                {
                    if (fAbilityDB.abilityList[i].onlyAvailableViaPerk)
                    {
                        continue;
                    }
                    if (abInfo.unavailableIDList.Contains(fAbilityDB.abilityList[i].prefabID))
                    {
                        continue;
                    }
                    if (!abInfo.availableIDList.Contains(fAbilityDB.abilityList[i].prefabID))
                    {
                        abInfo.availableIDList.Add(fAbilityDB.abilityList[i].prefabID);
                    }
                }

                for (int i = 0; i < abInfo.availableIDList.Count + 1; i++)
                {
                    EditorGUI.LabelField(new Rect(startX + spaceX - 15, startY + spaceY, width, height), "-");

                    int index = (i < abInfo.availableIDList.Count) ? TBEditor.GetFactionAbilityIndex(abInfo.availableIDList[i]) : 0;
                    index = EditorGUI.Popup(new Rect(startX + spaceX, startY += spaceY, width - 22, height), index, fAbilityLabel);
                    if (index > 0)
                    {
                        int abID = fAbilityDB.abilityList[index - 1].prefabID;
                        if (fAbilityDB.abilityList[index - 1].onlyAvailableViaPerk)
                        {
                            Debug.LogWarning("Ability '" + fAbilityDB.abilityList[index - 1].name + "' can only be unlocked via perk", this);
                        }
                        else if (!abInfo.availableIDList.Contains(abID))
                        {
                            if (i < abInfo.availableIDList.Count)
                            {
                                abInfo.availableIDList[i] = abID;
                            }
                            else
                            {
                                abInfo.availableIDList.Add(abID);
                            }
                        }
                    }
                    else if (i < abInfo.availableIDList.Count)
                    {
                        abInfo.availableIDList.RemoveAt(i); i -= 1;
                    }

                    if (i < abInfo.availableIDList.Count && GUI.Button(new Rect(startX + spaceX + width - 20, startY, 20, height - 1), "-"))
                    {
                        abInfo.availableIDList.RemoveAt(i); i -= 1;
                    }
                }

                abInfo.unavailableIDList = new List <int>();
                for (int i = 0; i < fAbilityDB.abilityList.Count; i++)
                {
                    if (fAbilityDB.abilityList[i].onlyAvailableViaPerk)
                    {
                        continue;
                    }
                    if (abInfo.availableIDList.Contains(fAbilityDB.abilityList[i].prefabID))
                    {
                        continue;
                    }
                    abInfo.unavailableIDList.Add(fAbilityDB.abilityList[i].prefabID);
                }

                spaceX += 15;
            }

            return(startY);
        }
Пример #3
0
        public void _PerkUnlockNewAbility(int ID, int IDX)
        {
            int dbIndex = ID >= 0 ? GetPerkDBIndex(ID) : -1;

            if (dbIndex == -1 && IDX == -1)
            {
                return;
            }

            List <Faction> facList = FactionManager.GetFactionList();

            for (int i = 0; i < facList.Count; i++)
            {
                if (!facList[i].isPlayerFaction)
                {
                    continue;
                }
                if (facList[i].abilityInfo == null)
                {
                    continue;
                }

                FactionAbilityInfo abInfo = facList[i].abilityInfo;
                int replaceIndex          = -1;
                if (IDX >= 0)
                {
                    for (int n = 0; n < abInfo.abilityList.Count; n++)
                    {
                        if (IDX == abInfo.abilityList[n].prefabID)
                        {
                            replaceIndex = n;
                            break;
                        }
                    }
                }

                if (dbIndex > 0)
                {
                    FactionAbility ability = facAbilityDBList[dbIndex].Clone();
                    ability.factionID = facList[i].ID;

                    if (replaceIndex >= 0)
                    {
                        abInfo.abilityList[replaceIndex] = ability;
                    }
                    else
                    {
                        abInfo.abilityList.Add(ability);
                    }
                }
                else
                {
                    if (replaceIndex >= 0)
                    {
                        abInfo.abilityList.RemoveAt(replaceIndex);
                    }
                }
            }

            if (dbIndex >= 0)
            {
                TBTK.OnNewFactionAbility(facAbilityDBList[dbIndex].Clone());
            }
        }