public void RecieveExp(int gemType, int amount) { if (gemType < experienceInstance.Length) { Debug.Log("Recieved exp: " + amount); StatGameInstance.AddInt(experienceInstance[gemType], amount); currentExp += amount; } else { Debug.Log("EXP ERROR: out of range." + gemType + " " + experienceInstance.Length, this); } if (experienceInstance[gemType].GetInt() >= maxExpForThisLevel) { currentLevel++; Debug.Log("Level up! to level " + currentLevel); // Add leftover exp to new level. int expLeft = experienceInstance[gemType].GetInt() - maxExpForThisLevel; experienceInstance[gemType].SetInt(expLeft); currentExp = expLeft; // Calcualte what the new exprience required for new level is. float percentage = (float)currentLevel / (float)maxLevelX; //float sample = expLimit.Evaluate(percentage); float sample = expIncreasePercentage.Evaluate(percentage); //float multiplier = Mathf.Max((int)(sample * maxGlobalExpLimit), 1); float multiplier = 1; int newMaxExp = (int)(maxExpForThisLevel * (1 + sample)); maxExpForThisLevel = newMaxExp; Debug.Log("percentage : " + percentage + "curve result: " + sample + " multiplier: " + multiplier + " -> " + newMaxExp); } }
protected void Awake() { instance = this; // init new gemPlayerExp.Init(); // init old experienceInstance = new StatGameInstance[gemExperienceData.Length]; for (int i = 0; i < gemExperienceData.Length; i++) { experienceInstance[i] = new StatGameInstance(gemExperienceData[i]); } }
internal static void AddInt(StatGameInstance stat, int amount) { stat.num += amount; }