public void AnimateXpGain(ReadyCallback readyCallback) { xpReadyCallback = readyCallback; updateSpeed = Configs.main.UI.XpBarUpdateSpeed; xpGained = Resource.Value; levelsAtStart = Resource.Level; currentLevel = levelsAtStart; levelsGained = 0; XPContainer.SetActive(false); if (xpGained > 0) { BarContainer.SetActive(true); IconContainer.SetActive(true); LevelContainer.SetActive(true); } xpsPerLevel = new List <int>(); currentLevelXpBound = Resource.XpPerLevel; while (xpGained >= Resource.XpPerLevel) { levelsGained++; xpGained -= Resource.XpPerLevel; xpsPerLevel.Add(Resource.XpPerLevel); Resource.Level++; } SetCurrentTarget(); StartCoroutine("GainXP"); }
private void GainLevel() { runningValue = 0; currentLevel += 1; XPContainer.SetActive(false); SetCurrentTarget(); UpdateView(0, runningValue, currentLevelXpBound, (currentLevel + 1).ToString()); StartCoroutine("GainXP"); }
private IEnumerator GainXP() { while (runningValue < currentTarget) { runningValue += 1; float percentage = (runningValue / (currentLevelXpBound * 1.0f)); UpdateView(percentage, runningValue, currentLevelXpBound, (currentLevel + 1).ToString()); XPContainer.SetActive(false); yield return(StartCoroutine(Tools.WaitForRealTime(1.0f / currentLevelXpBound / updateSpeed))); } if (runningValue >= currentLevelXpBound) { GainLevel(); } else { xpReadyCallback(); } }