Пример #1
0
    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;
    }