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,9 +204,8 @@ 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);
bw.write(list); bw.write(list);
} catch (IOException e) { } catch (IOException e) {

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

@ -5,10 +5,10 @@ import satisfactory.Database;
public class GeothermalGenerator extends PowerGenerationBuilding { public class GeothermalGenerator extends PowerGenerationBuilding {
public GeothermalGenerator() { public GeothermalGenerator() {
power = 9999; // TODO power = 9999; // TODO
cost.put(Database.SuperComputer,8); cost.put(Database.SuperComputer, 8);
cost.put(Database.HeavyModularFrame,16); cost.put(Database.HeavyModularFrame, 16);
cost.put(Database.HighSpeedConnector,16); cost.put(Database.HighSpeedConnector, 16);
cost.put(Database.CopperSheet,40); cost.put(Database.CopperSheet, 40);
cost.put(Database.Rubber,80); cost.put(Database.Rubber, 80);
} }
} }

View File

@ -10,6 +10,6 @@ public abstract class PowerGenerationBuilding extends Building {
protected Map<Item, Integer> consumes; protected Map<Item, Integer> consumes;
public PowerGenerationBuilding() { public PowerGenerationBuilding() {
consumes=new HashMap<>(); consumes = new HashMap<>();
} }
} }

View File

@ -2,7 +2,7 @@ package satisfactory.buildings.production;
import satisfactory.Database; import satisfactory.Database;
public class MinerMk2 extends MinerMk1{ public class MinerMk2 extends MinerMk1 {
public MinerMk2() { public MinerMk2() {
power = 12; power = 12;
cost.put(Database.PortableMiner, 2); cost.put(Database.PortableMiner, 2);

View File

@ -2,7 +2,7 @@ package satisfactory.buildings.production;
import satisfactory.Database; import satisfactory.Database;
public class MinerMk3 extends MinerMk1{ public class MinerMk3 extends MinerMk1 {
public MinerMk3() { public MinerMk3() {
// TODO: real values! // TODO: real values!
power = 12; power = 12;

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,11 +1,10 @@
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 {
public Fluid(String name) { public Fluid(String name) {
super(name); super(name);
} }
} }

View File

@ -1,13 +1,12 @@
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 {
public Gas(String name) { public Gas(String name) {
super(name); super(name);
setIsRaw(); setIsRaw();
} }
} }

View File

@ -1,11 +1,10 @@
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 {
public Ingot(String name) { public Ingot(String name) {
super(name); super(name);
} }
} }

View File

@ -1,13 +1,12 @@
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 {
public Ore(String name) { public Ore(String name) {
super(name); super(name);
setIsRaw(); setIsRaw();
} }
} }

View File

@ -1,11 +1,10 @@
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 {
public Part(String name) { public Part(String name) {
super(name); super(name);
} }
} }

View File

@ -1,12 +1,11 @@
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 {
public Pickup(String name) { public Pickup(String name) {
super(name); super(name);
setIsRaw(); setIsRaw();
} }
} }

View File

@ -1,10 +1,8 @@
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) {
super(name); super(name);
} }
} }

View File

@ -1,11 +1,9 @@
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) {
super(name); super(name);
setIsRaw(); setIsRaw();
} }
} }

View File

@ -1,11 +1,10 @@
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 {
public Tool(String name) { public Tool(String name) {
super(name); super(name);
} }
} }