diff --git a/Assets/Scripts/Tools.cs b/Assets/Scripts/Tools.cs index 17032ef..1059762 100644 --- a/Assets/Scripts/Tools.cs +++ b/Assets/Scripts/Tools.cs @@ -78,20 +78,36 @@ public static class Tools return sb.ToString(); } - public static (BigInteger totalXp, double level, BigInteger currentXpInLevel, BigInteger totalXpForLevel, double percentDone) GetLevelInfo() + public static BigInteger CalculateXP(BigInteger normalBerries, BigInteger poisonBerries, BigInteger slowBerries, BigInteger ultraBerries, BigInteger speedyBerries, BigInteger coinBerries) { BigInteger totalXp = 0; - totalXp += BazookaManager.Instance.GetGameStoreTotalNormalBerries(); - totalXp -= BazookaManager.Instance.GetGameStoreTotalPoisonBerries(); - totalXp -= BazookaManager.Instance.GetGameStoreTotalSlowBerries(); - totalXp += BazookaManager.Instance.GetGameStoreTotalUltraBerries() * 5; - totalXp += BazookaManager.Instance.GetGameStoreTotalSpeedyBerries() * 10; - totalXp += BazookaManager.Instance.GetGameStoreTotalCoinBerries() * 10; + totalXp += normalBerries; + totalXp -= poisonBerries; + totalXp -= slowBerries; + totalXp += ultraBerries * 5; + totalXp += speedyBerries * 10; + totalXp += coinBerries * 10; if (totalXp < 0) totalXp = 0; + return totalXp; + } + public static BigInteger CalculateXP() + { + return CalculateXP( + BazookaManager.Instance.GetGameStoreTotalNormalBerries(), + BazookaManager.Instance.GetGameStoreTotalPoisonBerries(), + BazookaManager.Instance.GetGameStoreTotalSlowBerries(), + BazookaManager.Instance.GetGameStoreTotalUltraBerries(), + BazookaManager.Instance.GetGameStoreTotalSpeedyBerries(), + BazookaManager.Instance.GetGameStoreTotalCoinBerries() + ); + } + + public static (BigInteger totalXp, double level, BigInteger currentXpInLevel, BigInteger totalXpForLevel, double percentDone) GetLevelInfo(BigInteger xp) + { double levelDivisor = 50.0; - double discriminant = 95 * 95 + levelDivisor * 2 * (double)totalXp; + double discriminant = 95 * 95 + levelDivisor * 2 * (double)xp; double level = (-95 + Math.Sqrt(discriminant)) / levelDivisor; double flooredLevel = Math.Floor(level); @@ -101,11 +117,17 @@ public static class Tools BigInteger xpAtNextLevel = (BigInteger)(levelDivisor / 2 * nextLevel * nextLevel + 95 * nextLevel); BigInteger totalXpForLevel = xpAtNextLevel - xpAtStartOfLevel; - BigInteger currentXpInLevel = totalXp - xpAtStartOfLevel; + BigInteger currentXpInLevel = xp - xpAtStartOfLevel; double percentDone = totalXpForLevel == 0 ? 0.0 : (double)currentXpInLevel / (double)totalXpForLevel * 100.0; - return (totalXp, flooredLevel + 1, currentXpInLevel, totalXpForLevel, percentDone); + return (xp, flooredLevel + 1, currentXpInLevel, totalXpForLevel, percentDone); + } + + public static (BigInteger totalXp, double level, BigInteger currentXpInLevel, BigInteger totalXpForLevel, double percentDone) GetLevelInfo() + { + var (totalXp, level, currentXpInLevel, totalXpForLevel, percentDone) = GetLevelInfo(CalculateXP()); + return (totalXp, level, currentXpInLevel, totalXpForLevel, percentDone); } public static string FormatHumanTime(long unixTimestamp)