combatlevel: Clean up plugin code

This commit moves constants from the test to the overlay, and replaces
instances of magic numbers with them. It additionally fixes the odd
check in `correctPrayer()` and fixes some minor whitespace issues.
This commit is contained in:
Jordan Atwood
2018-12-31 10:34:45 -08:00
parent 4f57f51b76
commit 541ad1e26d
2 changed files with 34 additions and 24 deletions

View File

@@ -43,6 +43,11 @@ import java.awt.Rectangle;
class CombatLevelOverlay extends Overlay class CombatLevelOverlay extends Overlay
{ {
private static final Color COMBAT_LEVEL_COLOUR = new Color(0xff981f); private static final Color COMBAT_LEVEL_COLOUR = new Color(0xff981f);
static final double ATT_STR_MULT = 0.325;
static final double DEF_HP_MULT = 0.25;
static final double PRAY_MULT = 0.125;
static final double RANGE_MAGIC_LEVEL_MULT = 1.5;
static final double RANGE_MAGIC_MULT = 0.325;
private final Client client; private final Client client;
private final CombatLevelConfig config; private final CombatLevelConfig config;
@@ -94,17 +99,17 @@ class CombatLevelOverlay extends Overlay
int prayerLevel = client.getRealSkillLevel(Skill.PRAYER); int prayerLevel = client.getRealSkillLevel(Skill.PRAYER);
// calculate initial required numbers // calculate initial required numbers
double base = 0.25 * (defenceLevel + hitpointsLevel + Math.floor(prayerLevel / 2)); double base = DEF_HP_MULT * (defenceLevel + hitpointsLevel + Math.floor(prayerLevel / 2));
double melee = 0.325 * (attackLevel + strengthLevel); double melee = ATT_STR_MULT * (attackLevel + strengthLevel);
double range = 0.325 * Math.floor(rangedLevel * 1.5); double range = RANGE_MAGIC_MULT * Math.floor(rangedLevel * RANGE_MAGIC_LEVEL_MULT);
double mage = 0.325 * Math.floor(magicLevel * 1.5); double mage = RANGE_MAGIC_MULT * Math.floor(magicLevel * RANGE_MAGIC_LEVEL_MULT);
double max = Math.max(melee, Math.max(range, mage)); double max = Math.max(melee, Math.max(range, mage));
// find the needed levels until level up // find the needed levels until level up
int next = client.getLocalPlayer().getCombatLevel() + 1; int next = client.getLocalPlayer().getCombatLevel() + 1;
int meleeNeed = calcLevels(base + melee, next, 0.325); int meleeNeed = calcLevels(base + melee, next, ATT_STR_MULT);
int hpdefNeed = calcLevels(base + max, next, 0.25); int hpdefNeed = calcLevels(base + max, next, DEF_HP_MULT);
int prayNeed = calcLevels(base + max, next, 0.125); int prayNeed = calcLevels(base + max, next, PRAY_MULT);
int rangeNeed = calcLevelsRM(rangedLevel, next, base); int rangeNeed = calcLevelsRM(rangedLevel, next, base);
int magicNeed = calcLevelsRM(magicLevel, next, base); int magicNeed = calcLevelsRM(magicLevel, next, base);
@@ -115,30 +120,30 @@ class CombatLevelOverlay extends Overlay
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append(ColorUtil.wrapWithColorTag("Next combat level:</br>", COMBAT_LEVEL_COLOUR)); sb.append(ColorUtil.wrapWithColorTag("Next combat level:</br>", COMBAT_LEVEL_COLOUR));
if ((attackLevel + strengthLevel + meleeNeed) <= 198) if ((attackLevel + strengthLevel + meleeNeed) <= Experience.MAX_REAL_LEVEL * 2)
{ {
sb.append(meleeNeed).append(" Attack/Strength</br>"); sb.append(meleeNeed).append(" Attack/Strength</br>");
} }
if ((hitpointsLevel + defenceLevel + hpdefNeed) <= 198) if ((hitpointsLevel + defenceLevel + hpdefNeed) <= Experience.MAX_REAL_LEVEL * 2)
{ {
sb.append(hpdefNeed).append(" Defence/Hitpoints</br>"); sb.append(hpdefNeed).append(" Defence/Hitpoints</br>");
} }
if ((rangedLevel + rangeNeed) <= 99) if ((rangedLevel + rangeNeed) <= Experience.MAX_REAL_LEVEL)
{ {
sb.append(rangeNeed).append(" Ranged</br>"); sb.append(rangeNeed).append(" Ranged</br>");
} }
if ((magicLevel + magicNeed) <= 99) if ((magicLevel + magicNeed) <= Experience.MAX_REAL_LEVEL)
{ {
sb.append(magicNeed).append(" Magic</br>"); sb.append(magicNeed).append(" Magic</br>");
} }
if ((prayerLevel + prayNeed) <= 99) if ((prayerLevel + prayNeed) <= Experience.MAX_REAL_LEVEL)
{ {
sb.append(prayNeed).append(" Prayer"); sb.append(prayNeed).append(" Prayer");
} }
return sb.toString(); return sb.toString();
} }
/*** /**
* Calculate skill levels required for increasing combat level, meant * Calculate skill levels required for increasing combat level, meant
* for all combat skills besides ranged and magic. * for all combat skills besides ranged and magic.
* @param start initial value * @param start initial value
@@ -152,7 +157,7 @@ class CombatLevelOverlay extends Overlay
return (int) Math.ceil((end - start) / multiple); return (int) Math.ceil((end - start) / multiple);
} }
/*** /**
* Calculate skill levels required for increasing combat level, meant * Calculate skill levels required for increasing combat level, meant
* ONLY for Ranged and Magic skills. * ONLY for Ranged and Magic skills.
* @param start either the current ranged or magic level * @param start either the current ranged or magic level
@@ -163,11 +168,11 @@ class CombatLevelOverlay extends Overlay
@VisibleForTesting @VisibleForTesting
static int calcLevelsRM(double start, int end, double dhp) static int calcLevelsRM(double start, int end, double dhp)
{ {
start = Math.floor(start * 1.5) * 0.325; start = Math.floor(start * RANGE_MAGIC_LEVEL_MULT) * RANGE_MAGIC_MULT;
return (int) Math.ceil((end - dhp - start) / 0.4875); return (int) Math.ceil((end - dhp - start) / (RANGE_MAGIC_MULT * RANGE_MAGIC_LEVEL_MULT));
} }
/*** /**
* Corrects how many levels you need to level up combat through prayer. * Corrects how many levels you need to level up combat through prayer.
* @param level current prayer level * @param level current prayer level
* @param need needed prayer level calculated by calcLevels(...) * @param need needed prayer level calculated by calcLevels(...)
@@ -176,7 +181,7 @@ class CombatLevelOverlay extends Overlay
@VisibleForTesting @VisibleForTesting
static int correctPrayer(int level, int need) static int correctPrayer(int level, int need)
{ {
if ((level + need) % 2 == 1) if ((level + need) % 2 != 0)
{ {
need++; need++;
} }

View File

@@ -33,6 +33,11 @@ import net.runelite.api.Skill;
import static net.runelite.client.plugins.combatlevel.CombatLevelOverlay.calcLevels; import static net.runelite.client.plugins.combatlevel.CombatLevelOverlay.calcLevels;
import static net.runelite.client.plugins.combatlevel.CombatLevelOverlay.calcLevelsRM; import static net.runelite.client.plugins.combatlevel.CombatLevelOverlay.calcLevelsRM;
import static net.runelite.client.plugins.combatlevel.CombatLevelOverlay.correctPrayer; import static net.runelite.client.plugins.combatlevel.CombatLevelOverlay.correctPrayer;
import static net.runelite.client.plugins.combatlevel.CombatLevelOverlay.ATT_STR_MULT;
import static net.runelite.client.plugins.combatlevel.CombatLevelOverlay.DEF_HP_MULT;
import static net.runelite.client.plugins.combatlevel.CombatLevelOverlay.PRAY_MULT;
import static net.runelite.client.plugins.combatlevel.CombatLevelOverlay.RANGE_MAGIC_LEVEL_MULT;
import static net.runelite.client.plugins.combatlevel.CombatLevelOverlay.RANGE_MAGIC_MULT;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
@@ -73,10 +78,10 @@ public class CombatLevelPluginTest
int rangedLevel = client.getRealSkillLevel(Skill.RANGED); int rangedLevel = client.getRealSkillLevel(Skill.RANGED);
int prayerLevel = client.getRealSkillLevel(Skill.PRAYER); int prayerLevel = client.getRealSkillLevel(Skill.PRAYER);
double base = 0.25 * (defenceLevel + hitpointsLevel + Math.floor(prayerLevel / 2)); double base = DEF_HP_MULT * (defenceLevel + hitpointsLevel + Math.floor(prayerLevel / 2));
double melee = 0.325 * (attackLevel + strengthLevel); double melee = ATT_STR_MULT * (attackLevel + strengthLevel);
double range = 0.325 * Math.floor(rangedLevel * 1.5); double range = RANGE_MAGIC_MULT * Math.floor(rangedLevel * RANGE_MAGIC_LEVEL_MULT);
double mage = 0.325 * Math.floor(magicLevel * 1.5); double mage = RANGE_MAGIC_MULT * Math.floor(magicLevel * RANGE_MAGIC_LEVEL_MULT);
double max = Math.max(melee, Math.max(range, mage)); double max = Math.max(melee, Math.max(range, mage));
HashMap<String, Double> result = new HashMap<>(); HashMap<String, Double> result = new HashMap<>();
@@ -102,11 +107,11 @@ public class CombatLevelPluginTest
// test attack/strength // test attack/strength
assertEquals(2, calcLevels(baseValues.get("base") + baseValues.get("melee"), assertEquals(2, calcLevels(baseValues.get("base") + baseValues.get("melee"),
player.getCombatLevel() + 1, ATT_STR_MULT)); player.getCombatLevel() + 1, ATT_STR_MULT));
// test defence/hitpoints // test defence/hitpoints
assertEquals(3, calcLevels(baseValues.get("base") + baseValues.get("max"), assertEquals(3, calcLevels(baseValues.get("base") + baseValues.get("max"),
player.getCombatLevel() + 1, DEF_HP_MULT)); player.getCombatLevel() + 1, DEF_HP_MULT));
// test prayer // test prayer
int prayNeed = calcLevels(baseValues.get("base") + baseValues.get("max"), int prayNeed = calcLevels(baseValues.get("base") + baseValues.get("max"),