Untitled

 avatar
unknown
csharp
a year ago
4.3 kB
9
Indexable
public class TreeChopLevel : MonoBehaviour
{

    public Text treeChoppingLevelText;
    public int treeChoppingCurrentLevel = 0;
    public int treeChoppingCurrentExp = 0;
    public int treeChoppingRequiredExp = 1;
    public int treeChoppingTotalExp = 0;
    public float baseMultiplier = 1.5f;
    public int treeChoppingMaxLevel = 99;

    private Axes axes;
    private TreeInteract treeInteract;
    private PlayerValueHandler playerValueHandler;

    //This dictionary is cuz i want to make the early levels have a custom exp requirement rather then following the exp curve, the levels that arent listed will simply follow the regular curve
    private Dictionary<int, int> treeChoppingSpecificLeveExp = new Dictionary<int, int>
    {

        { 0, 10 },
        { 1, 20 },
        { 2, 40 },
        { 3, 60 },
        { 4, 80 },
        { 5, 100},
        { 6, 150 },
        { 7, 200 },
        { 8, 250 },
        { 9, 300 },
        { 10, 350 }

    };

    private void Start()
    {

        treeChoppingRequiredExp = CalculateEXPForTreeChoppingLevel(treeChoppingCurrentLevel);

        for (int i = 1; i <= treeChoppingMaxLevel; i++)
        {

            int xpForLevel = CalculateEXPForTreeChoppingLevel(i);
            int totalXP = CalculateTotalEXPForTreeChoppingLevel(i);
            Debug.Log($"Level {i} requires {xpForLevel} XP, total XP to reach this level is {totalXP}");

        }

        TreeChoppingUpdateUI();

    }

    private void Update()
    {

        if (Input.GetKeyDown(KeyCode.T))
        {

            AddTreeChoppingExp(50);

        }

    }

    public int CalculateEXPForTreeChoppingLevel(int level)
    {

        if (treeChoppingSpecificLeveExp.ContainsKey(level))
        {

            return treeChoppingSpecificLeveExp[level];

        }

        //int previousLevelExp = level > 1 ? CalculateEXPForTreeChoppingLevel(level - 1) : 0;
        int calculatedExp = Mathf.FloorToInt(Mathf.Pow(baseMultiplier, level + 1));

        if (level > 1)
        {

            int previousLevelExp = CalculateEXPForTreeChoppingLevel(level - 1);
            calculatedExp = Mathf.Max(calculatedExp, previousLevelExp + (int)(previousLevelExp * 0.1f));

        }

        //return Mathf.Max(calculatedExp, previousLevelExp + 1);
        return calculatedExp;

    }

    public int CalculateTotalEXPForTreeChoppingLevel(int level)
    {

        int totalXP = 0;
        for (int i = 1; i <= level; i++)
        {

            totalXP += CalculateEXPForTreeChoppingLevel(i);

        }

        return totalXP;

    }

    public void AddTreeChoppingExp(int amount)
    {

        if (treeChoppingCurrentLevel >= treeChoppingMaxLevel)
        {

            Debug.Log("Max level reached!");
            return;

        }

        treeChoppingCurrentExp += amount;
        treeChoppingTotalExp += amount;
        Debug.Log($"Added {amount} XP. Current XP: {treeChoppingCurrentExp}/{treeChoppingRequiredExp}.");

        while (treeChoppingCurrentExp >= treeChoppingRequiredExp && treeChoppingCurrentLevel < treeChoppingMaxLevel)
        {

            TreeChoppingLevelUp();

        }

        if (treeChoppingCurrentLevel >= treeChoppingMaxLevel)
        {

            treeChoppingCurrentExp = treeChoppingRequiredExp;
            Debug.Log("Max level reached!");

        }

        TreeChoppingUpdateUI();

    }

    private void TreeChoppingLevelUp()
    {

        treeChoppingCurrentExp -= treeChoppingRequiredExp;
        treeChoppingCurrentLevel++;

        if (treeChoppingCurrentLevel > treeChoppingMaxLevel)
        {

            treeChoppingCurrentLevel = treeChoppingMaxLevel;
            return;

        }

        treeChoppingRequiredExp = CalculateEXPForTreeChoppingLevel(treeChoppingCurrentLevel);
        Debug.Log($"Leveled up! Current Level: {treeChoppingCurrentLevel}. Next level requires {treeChoppingRequiredExp} XP.");

        TreeChoppingUpdateUI();

    }

    private void TreeChoppingUpdateUI()
    {

        treeChoppingLevelText.text = "Tree Level: " + treeChoppingCurrentLevel.ToString() + " [" + treeChoppingCurrentExp.ToString() + "/" + treeChoppingRequiredExp.ToString() + "]";

    }
}
Editor is loading...
Leave a Comment