public bool EarnExp(uint ap, out Kernel.Abilities ability) { var ret = false; ability = Kernel.Abilities.None; if (!IsGameOver) { if (EXPtoNextLevel <= ap && Level < 100) { ret = true; } Experience += ap; if (!Learning.Equals(Kernel.Abilities.None) && Memory.KernelBin.AllAbilities.ContainsKey(Learning)) { var ap_tolearn = Memory.KernelBin.AllAbilities[Learning].AP; if (JunctionableGFsData.Ability.TryGetIndexByKey(Learning, out var ind) && TestGFCanLearn(Learning, false)) { if (ap_tolearn < APs[ind] + ap) { APs[ind] = ap_tolearn; ability = Learning; Learn(Learning); } else { APs[ind] += (byte)ap; } } } } return(ret); }
public bool UnlockerTest(Kernel.Abilities a) { if (JunctionableGFsData.Ability.TryGetByKey(a, out var u)) { return(UnlockerTest(u)); } //return true if there is no prereq. return(true); }
/// <summary> /// Learn this ability /// </summary> /// <param name="ability"></param> /// <returns></returns> public bool Learn(Kernel.Abilities ability) { if (!MaxGFAbilities) { if (!Complete[(int)ability]) { Complete[(int)ability] = true; if (Learning.Equals(ability)) { SetLearning(); } return(true); } } return(false); }
/// <summary> /// False if gf knows ability, True if can learn it. /// </summary> /// <param name="ability">Ability you want to learn.</param> /// <param name="item"> /// If using an Item you don't need the prereq, set to false if need prereq /// </param> public bool TestGFCanLearn(Kernel.Abilities ability, bool item = true) => !Complete[(int)ability] && ((item) || UnlockerTest(ability));