Skill.java 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. package me.hammerle;
  2. public class Skill implements Comparable<Skill> {
  3. private final static double[] xpForLevel = new double[]{
  4. 0, 83, 176, 279, 392, 518, 656, 810, 979, 1166,
  5. 1372, 1599, 1851, 2128, 2435, 2773, 3146, 3558, 4012, 4514,
  6. 5068, 5680, 6353, 7098, 7920, 8827, 9827, 10932, 12151, 13496,
  7. 14981, 16620, 18429, 20426, 22630, 25063, 27747, 30712, 33984, 37596,
  8. 41582, 45984, 50842, 56205, 62127, 68662, 75878, 83844, 92638, 102346,
  9. 113064, 124896, 137959, 152380, 168302, 185880, 205286, 226710, 250384, 276479,
  10. 305310, 337142, 372285, 411085, 453922, 501216, 553432, 611082, 674731, 745003,
  11. 822589, 908249, 1002824, 1107241, 1222525, 1349807, 1490337, 1645492, 1816796, 1975629,
  12. 2214746
  13. };
  14. private final String name;
  15. private int level = 1;
  16. private double xp = 0;
  17. private int ticks;
  18. private int lastTicks = 0;
  19. private double last = 0.0;
  20. public Skill(String name) {
  21. this.name = name;
  22. }
  23. public void setExperience(double xp) {
  24. this.xp = xp;
  25. level = 1;
  26. while(level < xpForLevel.length && this.xp >= xpForLevel[level]) {
  27. level++;
  28. }
  29. }
  30. public void addExperience(double xp) {
  31. lastTicks = 20 * 15;
  32. last = xp;
  33. this.xp += xp;
  34. while(level < xpForLevel.length && this.xp >= xpForLevel[level]) {
  35. level++;
  36. }
  37. ticks = 20 * 60;
  38. }
  39. public String getName() {
  40. return name;
  41. }
  42. public double getExperience() {
  43. return xp;
  44. }
  45. public double getExperienceForLevel() {
  46. return xpForLevel[level];
  47. }
  48. public double getPercent() {
  49. return (100.0 * (xp - xpForLevel[level - 1])) / (xpForLevel[level] - xpForLevel[level - 1]);
  50. }
  51. public double getLastPercent() {
  52. return (100.0 * last) / (xpForLevel[level] - xpForLevel[level - 1]);
  53. }
  54. public void tick() {
  55. if(ticks > 0) {
  56. ticks--;
  57. }
  58. if(lastTicks > 0) {
  59. lastTicks--;
  60. } else {
  61. last = 0.0f;
  62. }
  63. }
  64. public boolean shouldRender() {
  65. return ticks > 0;
  66. }
  67. public boolean shouldRenderLastPercent() {
  68. return lastTicks > 0;
  69. }
  70. @Override
  71. public int compareTo(Skill other) {
  72. return -Integer.compare(ticks, other.ticks);
  73. }
  74. public int getLevel() {
  75. return level;
  76. }
  77. }