diff --git a/src/main/java/satisfactory/Test.java b/src/main/java/satisfactory/Test.java index 0cd93de..304d7a4 100644 --- a/src/main/java/satisfactory/Test.java +++ b/src/main/java/satisfactory/Test.java @@ -204,7 +204,6 @@ public class Test { } catch (IOException e) { throw new RuntimeException(e); } - // ref.put(Database.CircuitBoard, 15.0); try (BufferedWriter bw = new BufferedWriter(new FileWriter(LISTS + name + "_java.txt"))) { String list = plan.getMap().entrySet().stream().map(item -> "ref.put(Database." + name2(item.getKey().getName()) + ", " + item.getValue() + ");" @@ -213,6 +212,12 @@ public class Test { } catch (IOException e) { throw new RuntimeException(e); } + try (BufferedWriter bw = new BufferedWriter(new FileWriter(LISTS + name + "_buildings.txt"))) { + String list = SumResult.format(plan.getBuildings()); + bw.write(list); + } catch (IOException e) { + throw new RuntimeException(e); + } } public static Set unlocks(String... unlock) { diff --git a/src/main/java/satisfactory/items/Recipe.java b/src/main/java/satisfactory/items/Recipe.java index f0a31cd..4d604d2 100644 --- a/src/main/java/satisfactory/items/Recipe.java +++ b/src/main/java/satisfactory/items/Recipe.java @@ -15,6 +15,7 @@ public class Recipe { private final Map inputs; private final Map outputs; private final int duration; + private final Class building; private boolean isHandCraftable = true; private String name; @@ -36,6 +37,7 @@ public class Recipe { this.duration = duration; this.inputs = inputs; this.outputs = outputs; + this.building = building; } public Recipe(int duration, String name, boolean isHandCraftable, Class building) { @@ -238,4 +240,15 @@ public class Recipe { return new SumResult(production, map); } + public Class getBuilding() { + return building; + } + + public String getName() { + return name; + } + + public String getOutputs() { + return outputs.keySet().stream().map(Item::getName).collect(Collectors.joining(" + ")); + } } diff --git a/src/main/java/satisfactory/items/SumResult.java b/src/main/java/satisfactory/items/SumResult.java index 9bf5a04..6eb3ec6 100644 --- a/src/main/java/satisfactory/items/SumResult.java +++ b/src/main/java/satisfactory/items/SumResult.java @@ -2,6 +2,7 @@ package satisfactory.items; import org.jgrapht.Graph; import org.jgrapht.graph.DefaultDirectedWeightedGraph; +import satisfactory.buildings.Building; import java.util.Arrays; import java.util.HashMap; @@ -76,4 +77,35 @@ public class SumResult { other.map.forEach((item, aDouble) -> map.merge(item, aDouble, Double::sum)); return new SumResult(merge(production, other.getProduction()), map); } + + public Map, Map> getBuildings() { + Map, Map> buildings = new HashMap<>(); + for (Item item : production.vertexSet()) { + double n = 0.0; + for (ProductionEdge edge : production.outgoingEdgesOf(item)) { + n += edge.getInstances(); + } + Recipe recipe = item.getRecipe(); + Class building = recipe.getBuilding(); + + HashMap value = (HashMap) buildings.getOrDefault(building, new HashMap<>()); + value.put(recipe, value.getOrDefault(recipe, 0.0) + n); + buildings.put(building, value); + } + return buildings; + } + + public static String format(Map, Map> buildings){ + StringBuilder sb = new StringBuilder(); + for (Map.Entry, Map> entry : buildings.entrySet()) { + double sum = 0.0; + StringBuilder internal = new StringBuilder(); + for (Map.Entry recipes : entry.getValue().entrySet()) { + sum += Math.ceil(recipes.getValue()); + internal.append("\t").append(recipes.getKey().getName()).append(" (").append(recipes.getKey().getOutputs()).append(")\t").append(recipes.getValue()).append("\n"); + } + sb.append(entry.getKey().getName().replace("satisfactory.buildings.production.","")). append("\t"). append(sum).append("\n").append(internal); + } + return sb.toString(); + } }