public IEnumerator AwardExp() { if (runningExp) { yield break; } runningExp = true; lockControls.value = true; totalScrap.value -= awardAmount; StatsContainer stats = playerData.stats[entryList.GetPosition()]; expMeter.gameObject.SetActive(true); expMeter.currentExp = stats.currentExp; Debug.Log("Exp is currently: " + stats.currentExp); yield return(new WaitForSeconds(0.5f * currentGameSpeed.value)); sfxQueue.Enqueue(levelupFill); playSfxEvent.Invoke(); int convertedExp = 10 * awardAmount; awardAmount = 0; while (convertedExp > 0) { convertedExp--; expMeter.currentExp++; if (expMeter.currentExp == 100) { expMeter.currentExp = 0; stopSfxEvent.Invoke(); yield return(new WaitForSeconds(1f * currentGameSpeed.value)); expMeter.gameObject.SetActive(false); levelupScript.SetupStats(stats, true); Debug.Log("LEVELUP!"); stats.GainLevel(); sfxQueue.Enqueue(levelupFanfare); playSfxEvent.Invoke(); yield return(StartCoroutine(levelupScript.RunLevelup(stats))); expMeter.gameObject.SetActive(true); sfxQueue.Enqueue(levelupFill); playSfxEvent.Invoke(); } yield return(null); } stopSfxEvent.Invoke(); yield return(new WaitForSeconds(0.5f * currentGameSpeed.value)); expMeter.gameObject.SetActive(false); stats.currentExp = expMeter.currentExp; entryList.GetEntry().FillData(stats); SetupBexpAwarding(); SetupCharacterInfo(); lockControls.value = false; runningExp = false; }