Making the level calculator more efficient

This commit is contained in:
Runebaas 2017-10-25 00:58:59 +02:00
parent ac73a8e6f9
commit 1f48d0387b
No known key found for this signature in database
GPG key ID: 2677AF508D0300D6
4 changed files with 59 additions and 33 deletions

View file

@ -1,27 +1,38 @@
using System;
using System.Collections.Generic;
namespace Geekbot.net.Lib
{
internal class LevelCalc
internal class LevelCalc : ILevelCalc
{
private static int GetExperienceAtLevel(int level)
{
double total = 0;
for (var i = 1; i < level; i++)
total += Math.Floor(i + 300 * Math.Pow(2, i / 7.0));
private int[] _levels;
return (int) Math.Floor(total / 16);
public LevelCalc()
{
var levels = new List<int>();
double total = 0;
for (var i = 1; i < 120; i++)
{
total += Math.Floor(i + 300 * Math.Pow(2, i / 7.0));
levels.Add((int) Math.Floor(total / 16));
}
_levels = levels.ToArray();
}
public static int GetLevelAtExperience(int experience)
public int GetLevelAtExperience(int experience)
{
int index;
for (index = 0; index < 120; index++)
if (GetExperienceAtLevel(index + 1) > experience)
break;
return index;
var returnVal = 1;
foreach (var level in _levels)
{
if (level > experience) break;
returnVal++;
}
return returnVal;
}
}
public interface ILevelCalc
{
int GetLevelAtExperience(int experience);
}
}