Crossfire JXClient, Trunk
ExperienceTable.java
Go to the documentation of this file.
1 /*
2  * This file is part of JXClient, the Fullscreen Java Crossfire Client.
3  *
4  * JXClient is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; either version 2 of the License, or
7  * (at your option) any later version.
8  *
9  * JXClient is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with JXClient; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17  *
18  * Copyright (C) 2005-2008 Yann Chachkoff
19  * Copyright (C) 2006-2017,2019-2023 Andreas Kirschbaum
20  * Copyright (C) 2010-2012,2014-2018,2020-2023 Nicolas Weeger
21  */
22 
23 package com.realtime.crossfire.jxclient.stats;
24 
25 import java.util.HashMap;
26 import java.util.Map;
27 import org.jetbrains.annotations.NotNull;
28 
33 public class ExperienceTable {
34 
38  @NotNull
39  private final Map<Integer, Long> info = new HashMap<>();
40 
44  private int minLevel;
45 
49  private int maxLevel;
50 
54  private void clear() {
55  info.clear();
56  minLevel = Integer.MAX_VALUE;
57  maxLevel = Integer.MIN_VALUE;
58  }
59 
65  private void add(final int level, final long exp) {
66  if (level < 1) {
67  return;
68  }
69 
70  info.put(level, exp);
71  if (minLevel > level) {
72  minLevel = level;
73  }
74  if (maxLevel < level) {
75  maxLevel = level;
76  }
77  }
78 
84  private long getExperience(final int level) {
85  if (minLevel >= maxLevel) {
86  return 0;
87  }
88 
89  final Long exp = info.get(level);
90  if (exp != null) {
91  return exp;
92  }
93 
94  if (level < minLevel) {
95  return info.get(minLevel);
96  }
97 
98  if (level > maxLevel) {
99  return maxLevel;
100  }
101 
102  for (int i = level; i < maxLevel; i++) {
103  final Long tmp = info.get(i);
104  if (tmp != null) {
105  return tmp;
106  }
107  }
108 
109  throw new AssertionError();
110  }
111 
118  public long getExperienceToNextLevel(final int currentLevel, final long currentExp) {
119  final long expNextLevel = getExperience(currentLevel+1);
120  return Math.max(0, expNextLevel-currentExp);
121  }
122 
131  public int getPercentsToNextLevel(final int currentLevel, final long currentExp) {
132  final long expThisLevel = getExperience(currentLevel);
133  final long expNextLevel = getExperience(currentLevel+1);
134  if (expThisLevel >= expNextLevel) {
135  return 0;
136  }
137 
138  if (currentExp < expThisLevel) {
139  return 0;
140  }
141  if (currentExp >= expNextLevel) {
142  return 100;
143  }
144 
145  return (int)((currentExp-expThisLevel)*100/(expNextLevel-expThisLevel));
146  }
147 
152  public void setExpTable(final long @NotNull [] expTable) {
153  clear();
154  for (int level = 1; level < expTable.length; level++) {
155  add(level, expTable[level]);
156  }
157  }
158 
159 }
com.realtime.crossfire.jxclient.stats.ExperienceTable.add
void add(final int level, final long exp)
Definition: ExperienceTable.java:65
com.realtime.crossfire.jxclient.stats.ExperienceTable.getExperienceToNextLevel
long getExperienceToNextLevel(final int currentLevel, final long currentExp)
Definition: ExperienceTable.java:118
com.realtime.crossfire.jxclient.stats.ExperienceTable.info
final Map< Integer, Long > info
Definition: ExperienceTable.java:39
com.realtime.crossfire.jxclient.stats.ExperienceTable.clear
void clear()
Definition: ExperienceTable.java:54
com.realtime.crossfire.jxclient.stats.ExperienceTable.setExpTable
void setExpTable(final long @NotNull[] expTable)
Definition: ExperienceTable.java:152
com.realtime.crossfire.jxclient.stats.ExperienceTable.maxLevel
int maxLevel
Definition: ExperienceTable.java:49
com.realtime.crossfire.jxclient.stats.ExperienceTable
Definition: ExperienceTable.java:33
com.realtime.crossfire.jxclient.stats.ExperienceTable.getExperience
long getExperience(final int level)
Definition: ExperienceTable.java:84
com.realtime.crossfire.jxclient.stats.ExperienceTable.getPercentsToNextLevel
int getPercentsToNextLevel(final int currentLevel, final long currentExp)
Definition: ExperienceTable.java:131
com.realtime.crossfire.jxclient.stats.ExperienceTable.minLevel
int minLevel
Definition: ExperienceTable.java:44