master
agp8x 2023-04-09 11:17:57 +02:00
parent 25b4444a73
commit c42915ecb4
19 changed files with 80 additions and 104 deletions

View File

@ -8,9 +8,7 @@ import satisfactory.items.type.*;
import java.util.*; import java.util.*;
public class Database { public class Database {
private static final Collection<Item> items = new HashSet<>();
public static final Map<Item, Recipe> preferences = new HashMap<>(); public static final Map<Item, Recipe> preferences = new HashMap<>();
// Items & recipes // Items & recipes
public static final Item IronOre = new Ore("Iron Ore"); public static final Item IronOre = new Ore("Iron Ore");
public static final Item IronIngot = new Ingot("Iron Ingot"); public static final Item IronIngot = new Ingot("Iron Ingot");
@ -95,29 +93,17 @@ public class Database {
public static final Item Silica = new Part("Silica"); public static final Item Silica = new Part("Silica");
public static final Item Bauxite = new Ore("Bauxite"); public static final Item Bauxite = new Ore("Bauxite");
public static final Item AluminaSolution = new ProcessedFluid("Alumina Solution"); public static final Item AluminaSolution = new ProcessedFluid("Alumina Solution");
public static final Item SulfuricAcid = new ProcessedFluid("Sulfuric Acid"); public static final Item SulfuricAcid = new ProcessedFluid("Sulfuric Acid");
public static final Item EncasedUraniumCell = new Part("Encased Uranium Cell"); public static final Item EncasedUraniumCell = new Part("Encased Uranium Cell");
public static final Item ElectromagneticControlRod = new Part("Electromagnetic Control Rod"); public static final Item ElectromagneticControlRod = new Part("Electromagnetic Control Rod");
public static final Item UraniumFuelRod = new Part("Uranium Fuel Rod"); public static final Item UraniumFuelRod = new Part("Uranium Fuel Rod");
public static final Item Uranium = new Ore("Uranium"); public static final Item Uranium = new Ore("Uranium");
public static final Item Battery = new Part("Battery"); public static final Item Battery = new Part("Battery");
public static final Item MagneticFieldGenerator = new Part("Magnetic Field Generator"); public static final Item MagneticFieldGenerator = new Part("Magnetic Field Generator");
public static final Item HeatSink = new Part("Heat Sink"); public static final Item HeatSink = new Part("Heat Sink");
public static final Item AssemblyDirectorSystem = new Part("Assembly Director System"); public static final Item AssemblyDirectorSystem = new Part("Assembly Director System");
public static final Item NitrogenGas = new Gas("Nitrogen Gas"); public static final Item NitrogenGas = new Gas("Nitrogen Gas");
public static final Item CoolingSystem = new Part("Cooling System"); public static final Item CoolingSystem = new Part("Cooling System");
public static final Item FusedModularFrame = new Part("Fused Modular Frame"); public static final Item FusedModularFrame = new Part("Fused Modular Frame");
public static final Item PortableMiner = new Tool("Portable Miner"); public static final Item PortableMiner = new Tool("Portable Miner");
public static final Item Turbofuel = new ProcessedFluid("Turbofuel"); public static final Item Turbofuel = new ProcessedFluid("Turbofuel");
@ -133,6 +119,7 @@ public class Database {
public static final Item ClusterNobelisk = new Part("Cluster Nobelisk"); public static final Item ClusterNobelisk = new Part("Cluster Nobelisk");
public static final Item ObjectScanner = new Tool("Object Scanner"); public static final Item ObjectScanner = new Tool("Object Scanner");
public static final Item NobeliskDetonator = new Tool("Nobelisk Detonator"); public static final Item NobeliskDetonator = new Tool("Nobelisk Detonator");
private static final Collection<Item> items = new HashSet<>();
static { static {
{ {

View File

@ -3,8 +3,6 @@ package satisfactory;
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.JsonProcessingException;
import guru.nidi.graphviz.engine.Format; import guru.nidi.graphviz.engine.Format;
import guru.nidi.graphviz.engine.Graphviz; import guru.nidi.graphviz.engine.Graphviz;
import guru.nidi.graphviz.engine.GraphvizCmdLineEngine;
import guru.nidi.graphviz.engine.GraphvizJdkEngine;
import guru.nidi.graphviz.model.MutableGraph; import guru.nidi.graphviz.model.MutableGraph;
import guru.nidi.graphviz.parse.Parser; import guru.nidi.graphviz.parse.Parser;
import org.jgrapht.Graph; import org.jgrapht.Graph;
@ -21,8 +19,10 @@ import java.io.BufferedWriter;
import java.io.File; import java.io.File;
import java.io.FileWriter; import java.io.FileWriter;
import java.io.IOException; import java.io.IOException;
import java.util.*; import java.util.Arrays;
import java.util.concurrent.Callable; import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import static satisfactory.Utils.*; import static satisfactory.Utils.*;
@ -204,7 +204,6 @@ public class Test {
} }
// ref.put(Database.CircuitBoard, 15.0); // ref.put(Database.CircuitBoard, 15.0);
try (BufferedWriter bw = new BufferedWriter(new FileWriter(LISTS + name + "_java.txt"))) { try (BufferedWriter bw = new BufferedWriter(new FileWriter(LISTS + name + "_java.txt"))) {
String list = plan.getMap().entrySet().stream().map(item -> String list = plan.getMap().entrySet().stream().map(item ->
"ref.put(Database." + name2(item.getKey().getName()) + ", " + item.getValue() + ");" "ref.put(Database." + name2(item.getKey().getName()) + ", " + item.getValue() + ");"
).reduce("", (s, s2) -> s + "\n" + s2); ).reduce("", (s, s2) -> s + "\n" + s2);

View File

@ -18,7 +18,6 @@ import satisfactory.items.ProductionEdge;
import java.io.File; import java.io.File;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors;
public class Utils { public class Utils {

View File

@ -4,15 +4,18 @@ import org.jgrapht.Graph;
import org.jgrapht.graph.DefaultWeightedEdge; import org.jgrapht.graph.DefaultWeightedEdge;
import satisfactory.Database; import satisfactory.Database;
import java.util.*; import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
public abstract class Item { public abstract class Item {
protected boolean isRaw = false;
private final String name; private final String name;
private final Set<Recipe> recipes; private final Set<Recipe> recipes;
private Recipe preference = null;
public int sum = 0; public int sum = 0;
protected boolean isRaw = false;
private Recipe preference = null;
protected Item(String name, Set<Recipe> recipes) { protected Item(String name, Set<Recipe> recipes) {
this.name = name; this.name = name;
@ -27,6 +30,15 @@ public abstract class Item {
this(name, new HashSet<>()); this(name, new HashSet<>());
} }
public static Map<Item, Double> production(Graph<Item, DefaultWeightedEdge> graph) {
Map<Item, Double> map = new HashMap<>();
graph.vertexSet().forEach(item -> {
double rate = graph.outgoingEdgesOf(item).stream().mapToDouble(graph::getEdgeWeight).sum();
map.put(item, rate);
});
return map;
}
public void add(Recipe recipe) { public void add(Recipe recipe) {
if (recipes.isEmpty()) { if (recipes.isEmpty()) {
setPreference(recipe); setPreference(recipe);
@ -84,19 +96,6 @@ public abstract class Item {
'}'; '}';
} }
public void setPreference(Recipe preference) {
this.preference = preference;
}
public static Map<Item, Double> production(Graph<Item, DefaultWeightedEdge> graph) {
Map<Item, Double> map = new HashMap<>();
graph.vertexSet().forEach(item -> {
double rate = graph.outgoingEdgesOf(item).stream().mapToDouble(graph::getEdgeWeight).sum();
map.put(item, rate);
});
return map;
}
public Graph<Item, DefaultWeightedEdge> hierarchy() { public Graph<Item, DefaultWeightedEdge> hierarchy() {
System.out.println(getRecipe() + " == " + this.preference); System.out.println(getRecipe() + " == " + this.preference);
return getRecipe().buildGraph(this); return getRecipe().buildGraph(this);
@ -110,4 +109,8 @@ public abstract class Item {
return preference; return preference;
} }
public void setPreference(Recipe preference) {
this.preference = preference;
}
} }

View File

@ -14,9 +14,9 @@ import java.util.stream.Collectors;
public class Recipe { public class Recipe {
private final Map<Item, Double> inputs; private final Map<Item, Double> inputs;
private final Map<Item, Double> outputs; private final Map<Item, Double> outputs;
private final int duration;
private boolean isHandCraftable = true; private boolean isHandCraftable = true;
private String name; private String name;
private final int duration;
public Recipe(int duration, Class<? extends Building> building) { public Recipe(int duration, Class<? extends Building> building) {
this(duration, new HashMap<>(), new HashMap<>(), building); this(duration, new HashMap<>(), new HashMap<>(), building);

View File

@ -7,7 +7,6 @@ import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors;
public class SumResult { public class SumResult {
private final Graph<Item, ProductionEdge> production; private final Graph<Item, ProductionEdge> production;
@ -23,21 +22,6 @@ public class SumResult {
map = new HashMap<>(); map = new HashMap<>();
} }
public Graph<Item, ProductionEdge> getProduction() {
return production;
}
public Map<Item, Double> getMap() {
return map;
}
public SumResult merge(SumResult other) {
HashMap<Item, Double> map = new HashMap<>();
map.putAll(this.map);
other.map.forEach((item, aDouble) -> map.merge(item, aDouble, Double::sum));
return new SumResult(merge(production, other.getProduction()), map);
}
public static Graph<Item, ProductionEdge> sum(Item item, int amount) { public static Graph<Item, ProductionEdge> sum(Item item, int amount) {
return item.getRecipe().sum(item, amount).getProduction(); return item.getRecipe().sum(item, amount).getProduction();
} }
@ -77,4 +61,19 @@ public class SumResult {
}); });
return result; return result;
} }
public Graph<Item, ProductionEdge> getProduction() {
return production;
}
public Map<Item, Double> getMap() {
return map;
}
public SumResult merge(SumResult other) {
HashMap<Item, Double> map = new HashMap<>();
map.putAll(this.map);
other.map.forEach((item, aDouble) -> map.merge(item, aDouble, Double::sum));
return new SumResult(merge(production, other.getProduction()), map);
}
} }

View File

@ -1,7 +1,6 @@
package satisfactory.items.type; package satisfactory.items.type;
import satisfactory.items.Item; import satisfactory.items.Item;
import satisfactory.items.Recipe;
public abstract class Fluid extends Item { public abstract class Fluid extends Item {

View File

@ -1,7 +1,6 @@
package satisfactory.items.type; package satisfactory.items.type;
import satisfactory.items.Item; import satisfactory.items.Item;
import satisfactory.items.Recipe;
public class Gas extends Item { public class Gas extends Item {

View File

@ -1,7 +1,6 @@
package satisfactory.items.type; package satisfactory.items.type;
import satisfactory.items.Item; import satisfactory.items.Item;
import satisfactory.items.Recipe;
public class Ingot extends Item { public class Ingot extends Item {

View File

@ -1,7 +1,6 @@
package satisfactory.items.type; package satisfactory.items.type;
import satisfactory.items.Item; import satisfactory.items.Item;
import satisfactory.items.Recipe;
public class Ore extends Item { public class Ore extends Item {

View File

@ -1,7 +1,6 @@
package satisfactory.items.type; package satisfactory.items.type;
import satisfactory.items.Item; import satisfactory.items.Item;
import satisfactory.items.Recipe;
public class Part extends Item { public class Part extends Item {

View File

@ -1,7 +1,6 @@
package satisfactory.items.type; package satisfactory.items.type;
import satisfactory.items.Item; import satisfactory.items.Item;
import satisfactory.items.Recipe;
public class Pickup extends Item { public class Pickup extends Item {

View File

@ -1,7 +1,5 @@
package satisfactory.items.type; package satisfactory.items.type;
import satisfactory.items.Recipe;
public class ProcessedFluid extends Fluid { public class ProcessedFluid extends Fluid {
public ProcessedFluid(String name) { public ProcessedFluid(String name) {

View File

@ -1,7 +1,5 @@
package satisfactory.items.type; package satisfactory.items.type;
import satisfactory.items.Recipe;
public class RawFluid extends Fluid { public class RawFluid extends Fluid {
public RawFluid(String name) { public RawFluid(String name) {

View File

@ -1,7 +1,6 @@
package satisfactory.items.type; package satisfactory.items.type;
import satisfactory.items.Item; import satisfactory.items.Item;
import satisfactory.items.Recipe;
public class Tool extends Item { public class Tool extends Item {