From a614f171c712de37feae6d8e4ad64c6bfa74a42a Mon Sep 17 00:00:00 2001 From: FyloZ Date: Sun, 12 Jun 2022 21:15:56 -0400 Subject: [PATCH] Start dynamic network --- src/configuration/XmlConfigurationParser.java | 4 +- src/simulation/ComponentRoute.java | 33 +++++++++++++-- src/simulation/Factory.java | 5 ++- src/simulation/Warehouse.java | 4 +- src/view/MainPanel.java | 40 ++++++++++--------- 5 files changed, 60 insertions(+), 26 deletions(-) diff --git a/src/configuration/XmlConfigurationParser.java b/src/configuration/XmlConfigurationParser.java index c93b6a8..4d3a066 100644 --- a/src/configuration/XmlConfigurationParser.java +++ b/src/configuration/XmlConfigurationParser.java @@ -182,8 +182,8 @@ public class XmlConfigurationParser implements ConfigurationParser { Collection routes = new ArrayList<>(); for (Element elem : new IterableElementList(routesElement.getChildNodes())) { - int from = Integer.parseInt(elem.getAttribute(ATTRIBUTE_TO)); - int to = Integer.parseInt(elem.getAttribute(ATTRIBUTE_FROM)); + int from = Integer.parseInt(elem.getAttribute(ATTRIBUTE_FROM)); + int to = Integer.parseInt(elem.getAttribute(ATTRIBUTE_TO)); routes.add(new Route(from, to)); } diff --git a/src/simulation/ComponentRoute.java b/src/simulation/ComponentRoute.java index f38b240..09caebe 100644 --- a/src/simulation/ComponentRoute.java +++ b/src/simulation/ComponentRoute.java @@ -1,8 +1,13 @@ package simulation; public class ComponentRoute { + public static final int SPEED = 1; + private final Component component; private final Building outputBuilding; + private final int directionX; + private final int directionY; + private int x; private int y; @@ -11,6 +16,26 @@ public class ComponentRoute { this.outputBuilding = outputBuilding; this.x = x; this.y = y; + + directionX = normalizedDirection(x, outputBuilding.getX()); + directionY = normalizedDirection(y, outputBuilding.getY()); + } + + private int normalizedDirection(int from, int to) { + return Integer.compare(to, from); + } + + public void updatePosition() { + x += directionX; + y += directionY; + } + + public void sendToOutputBuilding() { + outputBuilding.processInput(component); + } + + public boolean isTransitFinished() { + return x == outputBuilding.getX() && y == outputBuilding.getY(); } public Component getComponent() { @@ -21,11 +46,11 @@ public class ComponentRoute { return outputBuilding; } - public void setX(int x) { - this.x = x; + public int getX() { + return x; } - public void setY(int y) { - this.y = y; + public int getY() { + return y; } } diff --git a/src/simulation/Factory.java b/src/simulation/Factory.java index 1fc8742..f0359c7 100644 --- a/src/simulation/Factory.java +++ b/src/simulation/Factory.java @@ -11,12 +11,15 @@ public class Factory extends Building { private final FactoryMetadata metadata; private final Map inputsCount = new HashMap<>(); - private boolean isProductionStarted = false; + private boolean isProductionStarted; private long productionTicks = 0L; public Factory(int id, String type, int x, int y, FactoryMetadata metadata) { super(id, type, x, y); this.metadata = metadata; + + // Les usines sans entrées devraient toujours produire + isProductionStarted = metadata.getInputs().size() == 0; } @Override diff --git a/src/simulation/Warehouse.java b/src/simulation/Warehouse.java index 977050c..8b73b5c 100644 --- a/src/simulation/Warehouse.java +++ b/src/simulation/Warehouse.java @@ -7,6 +7,7 @@ import metadata.WarehouseMetadata; import java.util.ArrayList; import java.util.Collection; +import java.util.Optional; public class Warehouse extends Building implements WarehouseSubject { private final WarehouseMetadata metadata; @@ -19,7 +20,8 @@ public class Warehouse extends Building implements WarehouseSubject { } @Override - public void update() { + public Optional update() { + return Optional.empty(); } @Override diff --git a/src/view/MainPanel.java b/src/view/MainPanel.java index 8e4a4ec..232b5d1 100644 --- a/src/view/MainPanel.java +++ b/src/view/MainPanel.java @@ -4,8 +4,8 @@ import configuration.SimulationConfiguration; import configuration.SimulationConfigurationSingleton; import configuration.SimulationData; import metadata.BuildingMetadata; -import simulation.*; import simulation.Component; +import simulation.*; import javax.imageio.ImageIO; import javax.swing.*; @@ -55,42 +55,39 @@ public class MainPanel extends JPanel { }); } - private final float componentSpeed = 1f; - private int componentX = 0; - private int componentY = 0; - @Override public void paint(Graphics g) { super.paint(g); - // On ajoute à la position le delta x et y de la vitesse -// position.translate(speed.x, speed.y); -// g.fillRect(position.x, position.y, size, size); - if (configuration == null) return; simulationData.getRoutes().forEach(r -> paintRoute(r, g)); simulationData.getBuildings().forEach(b -> paintBuilding(b, g)); - Image image = componentsIcons.get(ComponentType.METAL); - g.drawImage(image, componentX, componentY, null); + for (ComponentRoute route : componentRoutes) { + paintComponentRoute(route, g); - componentX += 1 * componentSpeed; - componentY += 1 * componentSpeed; + // TODO: Not working + if (route.isTransitFinished()) { + componentRoutes.remove(route); + } + } + componentRoutes.forEach(r -> paintComponentRoute(r, g)); } private void paintBuilding(Building building, Graphics g) { - building.update().ifPresent(component -> addComponentRoute(component, building.getId())); + building.update().ifPresent(component -> addComponentRoute(component, building)); Image icon = buildingIcons.get(building.getType()); g.drawImage(icon, building.getX(), building.getY(), null); } private void addComponentRoute(Component component, Building fromBuilding) { - Route route = simulationData.getRoutes().stream() + Optional oroute = simulationData.getRoutes().stream() .filter(r -> r.getFrom() == fromBuilding.getId()) - .findFirst().get(); + .findFirst(); + Route route = oroute.get(); Building toBuilding = buildingsById.get(route.getTo()); componentRoutes.add(new ComponentRoute(component, toBuilding, fromBuilding.getX(), fromBuilding.getY())); } @@ -102,14 +99,21 @@ public class MainPanel extends JPanel { Building toBuilding = buildingsById.get(route.getTo()); Image toIcon = buildingIcons.get(toBuilding.getType()); - g.drawLine(fromBuilding.getX() + fromIcon.getWidth(null) / 2, fromBuilding.getY() + fromIcon.getHeight(null) / 2, toBuilding.getX() + toIcon.getWidth(null) / 2, toBuilding.getY() + toIcon.getHeight(null) / 2); + g.drawLine( + fromBuilding.getX() + fromIcon.getWidth(null) / 2, + fromBuilding.getY() + fromIcon.getHeight(null) / 2, + toBuilding.getX() + toIcon.getWidth(null) / 2, + toBuilding.getY() + toIcon.getHeight(null) / 2 + ); } private void paintComponentRoute(ComponentRoute route, Graphics g) { ComponentType componentType = route.getComponent().getType(); Image componentIcon = componentsIcons.get(componentType); - Vector + route.updatePosition(); + + g.drawImage(componentIcon, route.getX(), route.getY(), null); } private void loadBuildingImage(BuildingMetadata metadata) throws IOException {