diff --git a/src/main/java/satisfactory/Test.java b/src/main/java/satisfactory/Test.java index 550360a..aa42ca8 100644 --- a/src/main/java/satisfactory/Test.java +++ b/src/main/java/satisfactory/Test.java @@ -128,6 +128,7 @@ public class Test { new Production(Database.IronPlate, 1)); planFor("p3_acu", new Production(Database.AdaptiveControlUnit, 1)); planFor("p3_me", new Production(Database.ModularEngine, 1)); + planFor("p3_me_acu", new Production(Database.ModularEngine, 1), new Production(Database.AdaptiveControlUnit, 1)); planFor("p3_vf", new Production(Database.VersatileFrameWork, 1)); planFor("screw", new Production(Database.ReinforcedIronPlate, 1)); planFor("rotor", new Production(Database.Rotor, 1)); diff --git a/src/main/java/satisfactory/Utils.java b/src/main/java/satisfactory/Utils.java index 553a4ba..582f741 100644 --- a/src/main/java/satisfactory/Utils.java +++ b/src/main/java/satisfactory/Utils.java @@ -106,8 +106,15 @@ public class Utils { if (item.isRaw()) { m.put("peripheries", DefaultAttribute.createAttribute(2)); } - Double required = sum.outgoingEdgesOf(item).stream().map(ProductionEdge::getTotalRequired).reduce(Double::sum).orElseGet(() -> 0.0); - String label = "%s \n(%.1f)" .formatted(item.getName(), required ); + double required = sum.outgoingEdgesOf(item).stream().map(ProductionEdge::getTotalRequired).reduce(Double::sum).orElseGet(() -> Double.NaN); + double instances = sum.outgoingEdgesOf(item).stream().map(ProductionEdge::getInstances).reduce(Double::sum).orElseGet(() -> Double.NaN); + String buildingName = item.getRecipe().getBuilding().getName(); + if (Double.isNaN(required) || Double.isNaN(instances)) { + required = -sum.incomingEdgesOf(item).stream().map(ProductionEdge::getTotalRequired).reduce(Double::sum).orElseGet(() -> Double.NaN); + instances = 0; + buildingName = ""; + } + String label = "%s \n(%.1f||%.1f)\n%s".formatted(item.getName(), required, instances,buildingName); m.put("label", DefaultAttribute.createAttribute(label)); return m; }); diff --git a/src/main/java/satisfactory/items/Recipe.java b/src/main/java/satisfactory/items/Recipe.java index cb82b2d..ebb76c0 100644 --- a/src/main/java/satisfactory/items/Recipe.java +++ b/src/main/java/satisfactory/items/Recipe.java @@ -199,6 +199,7 @@ public class Recipe { buildGraph.incomingEdgesOf(item) .stream() .map(buildGraph::getEdgeSource) + //.filter(item1 -> !item.getRecipe().isByProduct(item1)) .forEach(queue::add); } // *this* item @@ -211,13 +212,15 @@ public class Recipe { // product is by-product, no forward dependency System.out.println("BY-PRODUCT " + item.getName() + " -> " + product.getName() + "... " + queue); byProducts.add(product); + //visited.add(product); continue; } if (queue.contains(product) || productWantedPerMinute == null) { // defer update, no all usages are expanded yet System.err.println("product still queued or productWantedPerMinute null for '" + product.getName() + "' from '" + item.getName() + "'"); sum = 0; - queue.add(item); + //if (!item.getRecipe().isByProduct(product)){ + queue.add(item);//} break; } double amountNeeded = buildGraph.getEdgeWeight(edge); diff --git a/src/test/java/satisfactory/items/ItemTest.java b/src/test/java/satisfactory/items/ItemTest.java index 059e9dd..6e65898 100644 --- a/src/test/java/satisfactory/items/ItemTest.java +++ b/src/test/java/satisfactory/items/ItemTest.java @@ -47,7 +47,8 @@ class ItemTest { @Test void productionUraniumFuelRod(){ - test(Database.UraniumFuelRod, "uranium_fuel_rod"); + //test(Database.UraniumFuelRod, "uranium_fuel_rod"); + fail(); } } \ No newline at end of file