diff --git a/src/main/java/com/samgauck/CityManagement/Command.java b/src/main/java/com/samgauck/CityManagement/Command.java index 4aca5b5..1f47c2f 100644 --- a/src/main/java/com/samgauck/CityManagement/Command.java +++ b/src/main/java/com/samgauck/CityManagement/Command.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.Arrays; import com.gauck.sam.Utilities.*; +import com.samgauck.CityManagement.Enums.Constructable; /** * A singleton class that manages all commands. @@ -269,7 +270,7 @@ private void construct(ArrayList followingWords) { if (constructable.equalsIgnoreCase("city")) { //TODO: Add city } else if (items.contains(constructable)) { - Main.getCity(0).resources.setItem(constructable, Main.getCity(0).resources.getItem(constructable) + amount); + Main.getCity(0).resources.setItem(constructable, Main.getCity(0).resources.getItem(constructable) + (Constructable.fromString(constructable).getQtyPerOrder() * amount)); } System.out.println("Construction completed"); System.out.println(Main.getCity(0).resources.toString()); diff --git a/src/main/java/com/samgauck/CityManagement/Economy.java b/src/main/java/com/samgauck/CityManagement/Economy.java index c21b489..ac148d8 100644 --- a/src/main/java/com/samgauck/CityManagement/Economy.java +++ b/src/main/java/com/samgauck/CityManagement/Economy.java @@ -2,6 +2,7 @@ import java.util.*; import com.gauck.sam.Utilities.*; +import com.samgauck.CityManagement.Enums.*; /** * A singleton class that represents the global economy in the game. @@ -12,7 +13,7 @@ public class Economy { */ private Economy() { items.putAll(Utilities.generateMap(itemsList, pricesList)); - constructables.putAll(Utilities.generateMap(constructablesList, requirementsList)); + //constructables.putAll(Utilities.generateMap(constructablesList, requirementsList)); //No Longer needed??? } /** @@ -49,24 +50,31 @@ public void addCity(City c) { */ private Map items = new HashMap<>(); - private Map constructables = new HashMap<>(); + //private Map constructables = new HashMap<>(); /** * The list of items. */ private static ArrayList itemsList = new ArrayList<>(Arrays.asList("food", "wood", "stone", "iron", "steel", "oil", "coal", "uranium", "water", "carbon", "bronze")); - private static ArrayList constructablesList = new ArrayList<>(Arrays.asList("steel", "city", "bronze")); //TODO: Fill (& requirementsList [64]) + //private static ArrayList constructablesList = new ArrayList<>(Arrays.asList("steel", "city")); //TODO: Fill (& requirementsList [64]) /** * The list of prices. */ private static ArrayList pricesList = new ArrayList<>(Arrays.asList(5, 1, 2, 5, 10, 10, 10, 10, 5, 5, 10)); - private static ArrayList requirementsList = new ArrayList<>(Arrays.asList( - new Resources(0,0,0,1,0,0,1,0,0,0,0),//Steel - new Resources(0,0,0,0,0,0,0,0,0,0,0),//City - new Resources(0,0,0,0,0,0,0,0,0,0,0)//Bronze - )); +/* private static ArrayList requirementsList = new ArrayList<>(Arrays.asList( + new Resources(0,0,0,1,0,0,1,0,0,0),//Steel + new Resources(0,0,0,0,0,0,0,0,0,0)//City + ));*/ + + /*private static Map requirementsList = new HashMap() {{ + put("steel", + new Resources(0, 0, 0, 1, 0, 0, 1, 0, 0, 0));//Steel + put("city", + new Resources(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));//City + }}; +*/ /** * Get the list of items. @@ -78,7 +86,12 @@ public static ArrayList getItems() { } public static ArrayList getConstructables() { - return constructablesList; + ArrayList constructables = new ArrayList<>(); + for (Constructable constructable : Constructable.values()) + { + constructables.add(constructable.getName()); + } + return constructables; //constructablesList; } /** @@ -92,7 +105,21 @@ public int getPrice(String item) { } public Resources getRequirements(String constructable) { - return constructables.get(constructable); + + Resources constructionResource = new Resources(); + + Constructable mat = Constructable.fromString(constructable); + + for (int i = 0; i < mat.getAmountNeeded().size() && i < mat.getMaterialsNeeded().size(); i++) + { + constructionResource.setItem(mat.getMaterialsNeeded().get(i).valueOf(), mat.getAmountNeeded().get(i)); + } + return constructionResource; + } + + public int getPerSet(String constructable) + { + return Constructable.fromString(constructable).getQtyPerOrder(); } /** * Sets all prices. Should only be used for loading saves. diff --git a/src/main/java/com/samgauck/CityManagement/Enums/Constructable.java b/src/main/java/com/samgauck/CityManagement/Enums/Constructable.java new file mode 100644 index 0000000..7911cb2 --- /dev/null +++ b/src/main/java/com/samgauck/CityManagement/Enums/Constructable.java @@ -0,0 +1,84 @@ +package com.samgauck.CityManagement.Enums; + +import java.util.ArrayList; +import java.util.Arrays; + +public enum Constructable +{ + //Format: NAME(String name, + // ArrayList of Material Types need per order using Arrays.asList, + // ArrayList of Integers for qty needed per order using Arrays.asList, + // cost per order + // total amount produced per order + STEEL("steel", + new ArrayList(Arrays.asList(Material.IRON, Material.CARBON)), + new ArrayList(Arrays.asList(19, 1)), + 1, + 19); + + private ArrayList needed = new ArrayList<>(); + private int qtyPerOrder = 0; + private int price = 0; + private ArrayList mats = new ArrayList<>(); + String materialName = ""; + + private Constructable(String name, ArrayList matsList, ArrayList needed, int price, int qtyPerOrder) + { + //TODO change to add a Resource rather than 2 arrays + for (int i = 0; i < matsList.size() && i < needed.size(); i++) + { + mats.add(matsList.get(i)); + this.needed.add(needed.get(i)); + } + this.materialName = name; + this.price = price; + this.qtyPerOrder = qtyPerOrder; + } + + public String getName() + { + return materialName; + } + + public static Constructable fromString(String name) + { + for (Constructable mat : Constructable.values()) + { + if (mat.materialName.equalsIgnoreCase(name)) { + return mat; + } + } + + return null; + } + + public static ArrayList getMaterialsNeeded(Constructable name) + { + return name.mats; + } + + public ArrayList getMaterialsNeeded() + { + return mats; + } + + public static ArrayList getAmountNeeded(Constructable name) + { + return name.needed; + } + + public ArrayList getAmountNeeded() + { + return needed; + } + + public int getPrice() + { + return price; + } + + public int getQtyPerOrder() + { + return qtyPerOrder; + } +}; \ No newline at end of file diff --git a/src/main/java/com/samgauck/CityManagement/Enums/Material.java b/src/main/java/com/samgauck/CityManagement/Enums/Material.java new file mode 100644 index 0000000..52757aa --- /dev/null +++ b/src/main/java/com/samgauck/CityManagement/Enums/Material.java @@ -0,0 +1,39 @@ +package com.samgauck.CityManagement.Enums; + +public enum Material { + MONEY("money"), + FOOD("food"), + WOOD("wood"), + STONE("stone"), + IRON("iron"), + OIL("oil"), + COAL("coal"), + URANIUM("uranium"), + WATER("water"), + CARBON("carbon"); + + private String name = ""; + + private Material(String name) + { + this.name = name; + } + + public String valueOf() + { + return name; + } + + public static Material fromString(String name) + { + for (Material mat : Material.values()) + { + if (mat.name == name) + { + return mat; + } + } + + return null; + } +} \ No newline at end of file diff --git a/src/main/java/com/samgauck/CityManagement/Main.java b/src/main/java/com/samgauck/CityManagement/Main.java index 708d9d1..a0d0966 100644 --- a/src/main/java/com/samgauck/CityManagement/Main.java +++ b/src/main/java/com/samgauck/CityManagement/Main.java @@ -183,8 +183,8 @@ private static void start() { for (int i = 0; i < 50; i++) { System.out.println(); } - System.out.print("Would you like to load a save? (Y/N)"); - input = s.next(); + System.out.print("Would you like to load a save? (Y/N)"); + input = s.nextLine(); if (input.equalsIgnoreCase("y")) { System.out.println("Enter a save code:"); s.nextLine();