diff --git a/bin/net/grosinger/nomads/DroneListItem.class b/bin/net/grosinger/nomads/DroneListItem.class index 1af12f3..4a5255c 100644 Binary files a/bin/net/grosinger/nomads/DroneListItem.class and b/bin/net/grosinger/nomads/DroneListItem.class differ diff --git a/bin/net/grosinger/nomads/Upgrade.class b/bin/net/grosinger/nomads/Upgrade.class index ad70fe0..633199f 100644 Binary files a/bin/net/grosinger/nomads/Upgrade.class and b/bin/net/grosinger/nomads/Upgrade.class differ diff --git a/src/net/grosinger/nomads/DroneListItem.java b/src/net/grosinger/nomads/DroneListItem.java index 882ad7e..045c323 100644 --- a/src/net/grosinger/nomads/DroneListItem.java +++ b/src/net/grosinger/nomads/DroneListItem.java @@ -146,6 +146,15 @@ public class DroneListItem { return reliability; } + /** + * Retrieve the attack factor of this drone + * + * @return int + */ + public int getAttack() { + return attack; + } + /** * Retrieve the defenses factor of this drone * @@ -216,7 +225,7 @@ public class DroneListItem { * * @return boolean */ - public boolean getWanted() { + public boolean isWanted() { return wanted; } @@ -489,15 +498,61 @@ public class DroneListItem { /** * Finds the upgrade that the drone would like to purchase. + * Determines if upgrade is possible and performs action accordingly */ private void doUpgrade() { Upgrade newUpgrade = current.upgrade(); - int price = newUpgrade.getPrice(); - //TODO - Hand price of upgrade being null + Integer price = newUpgrade.getPrice(); + if (price == null) { + // Invalid upgrade selection, turn lost. + return; + } if (team.getBalance() >= price) { - // TODO - Implement purchasing upgrades + switch (newUpgrade.getUpgradeType()) { + case visibleDistance: { + visibleDistance++; + break; + } + case lumaLocatorDistance: { + lumaLocatorDistance++; + break; + } + case objectLocatorDistance: { + objectLocatorDistance++; + break; + } + case reliability: { + reliability++; + break; + } + case attack: { + attack++; + break; + } + case defenses: { + defenses++; + break; + } + case speed: { + speed++; + break; + } + case cargoSpace: { + cargoSpace++; + break; + } + case theft: { + theft++; + break; + } + default: { + // Must specify an Upgrade Type + } + } + team.deductFromBalance(price); + return; } else { // Not enough money, do nothing. return; diff --git a/src/net/grosinger/nomads/Upgrade.java b/src/net/grosinger/nomads/Upgrade.java index 28ea0cc..c663b89 100644 --- a/src/net/grosinger/nomads/Upgrade.java +++ b/src/net/grosinger/nomads/Upgrade.java @@ -6,50 +6,109 @@ public class Upgrade { visibleDistance, lumaLocatorDistance, objectLocatorDistance, reliability, attack, defenses, speed, cargoSpace, theft } + /** + * The upgrade that is to be performed. + */ private UpgradeType typeToUpgrade; + /** + * Drone to be upgraded. Used to find the current levels of this drone. + */ + private DroneListItem oldBrokenDrone; + public Upgrade(UpgradeType type) { typeToUpgrade = type; } /** - * Provides the prices for a given update type - * Algorithm: (((Current Level - Original Level) + 5) * Multiplier)^2 + * Provides the prices for a given update type Algorithm: (((Current Level - + * Original Level) + 5) * Multiplier)^2 * * @return int */ public int getPrice() { + double multiplier; + double currentLevel; + double originalLevel; + switch (typeToUpgrade) { case visibleDistance: { - + multiplier = 2; + currentLevel = oldBrokenDrone.getVisibleDistance(); + originalLevel = Nomads.BASE_VISIBLEDISTANCE; + break; } case lumaLocatorDistance: { - + multiplier = 2.5; + currentLevel = oldBrokenDrone.getLumaLocatorDistance(); + originalLevel = Nomads.BASE_LUMALOCATORDISTANCE; + break; } case objectLocatorDistance: { - + multiplier = 2.5; + currentLevel = oldBrokenDrone.getObjectLocatorDistance(); + originalLevel = Nomads.BASE_OBJECTLOCATORDISTANCE; + break; } case reliability: { - + multiplier = 2.4; + currentLevel = oldBrokenDrone.getReliability(); + originalLevel = Nomads.BASE_RELIABILITY; + break; } case attack: { - + multiplier = 2.7; + currentLevel = oldBrokenDrone.getAttack(); + originalLevel = Nomads.BASE_ATTACK; + break; } case defenses: { - + multiplier = 2.8; + currentLevel = oldBrokenDrone.getDefenses(); + originalLevel = Nomads.BASE_DEFENSES; + break; } case speed: { - + multiplier = 3.5; + currentLevel = oldBrokenDrone.getSpeed(); + originalLevel = Nomads.BASE_SPEED; + break; } case cargoSpace: { - + multiplier = 3.5; + currentLevel = oldBrokenDrone.getCargoSpace(); + originalLevel = Nomads.BASE_CARGOSPACE; + break; } case theft: { - + multiplier = 4; + currentLevel = oldBrokenDrone.getTheft(); + originalLevel = Nomads.BASE_THEFT; + break; } default: { + // Must specify an Upgrade Type return (Integer) null; } } + + double price = Math.pow( + (currentLevel - originalLevel + 5) * multiplier, 2.0); + return (int) Math.ceil(price); + } + + /** + * Determines if the statistic wanting to be upgraded is already at the + * maximum level. + * + * @return boolean + */ + public boolean isMaxLevel() { + // TODO - Implement max levels + return false; + } + + public UpgradeType getUpgradeType() { + return typeToUpgrade; } }