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;
}
}