using System.Collections; using System.Collections.Generic; using UnityEngine; namespace TBTK{ public class PerkManager : MonoBehaviour { public bool inGameScene; public static bool InGameScene(){ return instance.inGameScene; } [Space(8)] public bool loadProgressFromCache; public bool saveProgressToCache; public static int cacheCurrency=1; public static List cacheUnlockedIDList=new List(); [Space(8)] public int currency=0; public static int GetPerkCurrency(){ return instance.currency; } public static void GainCurrency(int value){ instance.currency+=value; } public static void SpendCurrency(int value){ instance.currency=Mathf.Max(0, instance.currency-value); } [HideInInspector] public int perkPoint=0; public static int GetPerkPoint(){ return instance.perkPoint; } public List unavailableIDList=new List(); public List unlockedIDList=new List(); List perkList=new List(); public static List GetPerkList(){ return instance.perkList; } public static Perk GetPerkOfIndex(int idx){ return instance.perkList[idx]; } private static PerkManager instance; public static bool PerkSystemEnabled(){ return instance!=null ; } void Awake() { if(instance==null) instance=this; else if(instance!=this){ Destroy(gameObject); return; } uPIDList.Clear(); uaPIDList.Clear(); faPIDList.Clear(); ePIDList.Clear(); uPIDAbilityList.Clear(); List dbList=PerkDB.GetList(); for(int i=0; i=0 ? instance.perkList[idx] : null); } public static string IsPerkAvailable(int perkID){ int idx=GetIndexFromID(perkID); return (idx>=0 ? instance.perkList[idx].IsAvailable() : "PerkID doesnt correspond to any perk"); } public static bool IsPerkUnlocked(int perkID){ int idx=GetIndexFromID(perkID); return (idx>=0 ? instance.perkList[idx].unlocked : false); } public static string UnlockPerk(int prefabID, bool useCurrency=true){ int idx=GetIndexFromID(prefabID); return (idx>=0 ? instance._UnlockPerk(instance.perkList[idx], useCurrency) : "PerkID doesnt correspond to any perk"); } public static string UnlockPerk(Perk perk, bool useCurrency=true){ return instance._UnlockPerk(perk, useCurrency); } public string _UnlockPerk(Perk perk, bool useCurrency=true){ string text=perk.Unlock(useCurrency); if(text!="") return text; perkPoint+=1; return ""; } #region new FactionAbility //called as soon as a perk is unlocked public static void NewFactionAbilityPerkUnlocked(int abPID){ UnitManager.AddAbilityToPlayerFaction(abPID); } #endregion #region new UnitAbility //called as soon as a perk is unlocked public static void NewUnitAbilityPerkUnlocked(Perk perk){ uPIDAbilityList.Add(perk.prefabID); UnitManager.AddAbilityToPlayerUnit(perk.abilityPID, perk.applyToAll ? null : perk.itemPIDList); } public static List uPIDAbilityList=new List(); //prefabID of all new unit ability perk that has been unlocked //in case a unit is spawned after the perk is unlocked public static List GetUnitAbilityID(int prefabID){ List unitABIDList=new List(); for(int i=0; i=0) unitABIDList.Add(pID); } return unitABIDList; } #endregion #region unit public static List uPIDList=new List(); //prefabID of all unit related perk that has been unlocked public static void AddUnitPerkID(int ID){ uPIDList.Add(ID); } #region unit modifer public static float GetUnitModHP(int prefabID, float value=0){ for(int i=0; i ModifyUnitAttackEffectList(int prefabID, List list){ for(int i=0; i ModifyUnitImmuneEffectList(int prefabID, List list){ for(int i=0; i uaPIDList=new List(); //prefabID of all UnitAbility related perk that has been unlocked public static void AddUnitAbilityPerkID(int ID){ uaPIDList.Add(ID); } #region UnitAbility modifier public static float GetUAbilityModAttack(int prefabID, float value=0){ for(int i=0; i ModifyUAbilityEffectList(int prefabID, List list){ for(int i=0; i faPIDList=new List(); //prefabID of all UnitAbility related perk that has been unlocked public static void AddFactionAbilityPerkID(int ID){ faPIDList.Add(ID); } #region FactionAbility modifier public static float GetFAbilityModAttack(int prefabID, float value=0){ for(int i=0; i ModifyFAbilityEffectList(int prefabID, List list){ for(int i=0; i ePIDList=new List(); //prefabID of all unit related perk that has been unlocked public static void AddEffectPerkID(int ID){ ePIDList.Add(ID); } #region Effect modifer public static float GetEffModHP(int prefabID, float value=0){ for(int i=0; i