package me.hammerle; public class Skill implements Comparable { private final static double[] xpForLevel = new double[]{ 0, 83, 176, 279, 392, 518, 656, 810, 979, 1166, 1372, 1599, 1851, 2128, 2435, 2773, 3146, 3558, 4012, 4514, 5068, 5680, 6353, 7098, 7920, 8827, 9827, 10932, 12151, 13496, 14981, 16620, 18429, 20426, 22630, 25063, 27747, 30712, 33984, 37596, 41582, 45984, 50842, 56205, 62127, 68662, 75878, 83844, 92638, 102346, 113064, 124896, 137959, 152380, 168302, 185880, 205286, 226710, 250384, 276479, 305310, 337142, 372285, 411085, 453922, 501216, 553432, 611082, 674731, 745003, 822589, 908249, 1002824, 1107241, 1222525, 1349807, 1490337, 1645492, 1816796, 1975629, 2214746 }; private final String name; private int level = 1; private double xp = 0; private int ticks; private int lastTicks = 0; private double last = 0.0; public Skill(String name) { this.name = name; } public void setExperience(double xp) { this.xp = xp; level = 1; while(level < xpForLevel.length && this.xp >= xpForLevel[level]) { level++; } } public void addExperience(double xp) { lastTicks = 20 * 15; last = xp; this.xp += xp; while(level < xpForLevel.length && this.xp >= xpForLevel[level]) { level++; } ticks = 20 * 60; } public String getName() { return name; } public double getExperience() { return xp; } public double getExperienceForLevel() { return xpForLevel[level]; } public double getPercent() { return (100.0 * (xp - xpForLevel[level - 1])) / (xpForLevel[level] - xpForLevel[level - 1]); } public double getLastPercent() { return (100.0 * last) / (xpForLevel[level] - xpForLevel[level - 1]); } public void tick() { if(ticks > 0) { ticks--; } if(lastTicks > 0) { lastTicks--; } else { last = 0.0f; } } public boolean shouldRender() { return ticks > 0; } public boolean shouldRenderLastPercent() { return lastTicks > 0; } @Override public int compareTo(Skill other) { return -Integer.compare(ticks, other.ticks); } public int getLevel() { return level; } }