| 1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- package org.leumasjaffe.charsheet.view.level;
- import java.util.Arrays;
- import javax.swing.JOptionPane;
- import org.leumasjaffe.charsheet.model.DDCharacter;
- import org.leumasjaffe.charsheet.model.observable.IntValue;
- import org.leumasjaffe.observer.ObserverDispatch;
- import lombok.experimental.UtilityClass;
- @UtilityClass
- public class ExperienceDialog {
- private int[] EXPERIENCE_CACHE;
- static {
- final int levelsToCalc = 20;
- EXPERIENCE_CACHE = new int[levelsToCalc];
- for (int i = 0; i < levelsToCalc; ++i) {
- EXPERIENCE_CACHE[i] = experienceForLevel(i+1);
- }
- }
- public void gainExperience(DDCharacter model) {
- final String input = JOptionPane.showInputDialog("How much experience");
- if (input == null || input.isEmpty()) return;
- final int exp = Integer.parseInt(input);
- if (exp <= 0) return;
- final IntValue mdlExp = model.getExperience();
- mdlExp.value(mdlExp.value()+exp);
- ObserverDispatch.notifySubscribers(mdlExp, null);
- }
-
- public static int computeLevelsNeeded(DDCharacter chara, int bonusLevels) {
- final int exp = chara.getExperience().value();
- final int currentLevel = chara.getLevel();
- final int expectedLevel = Math.abs(Arrays.binarySearch(EXPERIENCE_CACHE, exp) + 1);
- return bonusLevels + expectedLevel - currentLevel;
- }
- public int experienceForLevel(int level) {
- return 500 * level * (level - 1);
- }
- }
|