Skip to content

Instantly share code, notes, and snippets.

@maxammann
Created June 16, 2013 12:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save maxammann/5791845 to your computer and use it in GitHub Desktop.
Save maxammann/5791845 to your computer and use it in GitHub Desktop.
LevelCache
public class ExponentialLevelCache extends LevelCache {
private final double modifier;
public ExponentialLevelCache(int maxLevel, int minLevel, double modifier) {
super(maxLevel, minLevel);
this.modifier = modifier;
}
@Override
protected float calculateExperience(int level) {
return (float) (modifier * Math.pow(level, 2));
}
}
import org.apache.commons.collections.BidiMap;
import org.apache.commons.collections.bidimap.DualHashBidiMap;
import java.util.HashMap;
/**
* Represents a LevelCache
*/
public abstract class LevelCache {
private final BidiMap experienceTable;
private final int minLevel;
public LevelCache(int maxLevel, int minLevel) {
this.minLevel = minLevel;
if (maxLevel <= minLevel) {
throw new IllegalArgumentException("The maxLevel must be greater than the minlevel!");
}
experienceTable = new DualHashBidiMap(new HashMap(maxLevel - minLevel));
}
public void initialise() {
for (int level = minLevel; level < experienceTable.size(); level++) {
experienceTable.put(level, getExperience(level));
}
}
public float getExperience(int level) {
return (Float) experienceTable.get(level);
}
protected abstract float calculateExperience(int level);
public int getLevel(int experience) {
return (Integer) experienceTable.getKey(experience);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment