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); }
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()); } }