From 3591741ee5a6c3848898d8fbd7be069dcc113e7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrick=20Ha=C3=9Fel?= Date: Fri, 17 May 2024 09:25:14 +0200 Subject: [PATCH] code clean: evaluate, render, repaint --- .../java/de/ph87/electro/circuit/Circuit.java | 6 ++-- .../de/ph87/electro/circuit/CircuitPanel.java | 8 ++---- .../circuit/CircuitPanelDropTarget.java | 28 +++++++++++++------ .../circuit/CircuitPanelMouseAdapter.java | 28 +++++++++++-------- .../electro/circuit/BatteryLightTest.java | 2 +- .../circuit/BatterySwitcher1x1Test.java | 2 +- .../circuit/BatterySwitcher1x2Test.java | 2 +- .../circuit/BatterySwitcher2x2Test.java | 2 +- .../circuit/BatterySwitcherCrossTest.java | 2 +- .../electro/circuit/CircuitServiceTest.java | 4 +-- 10 files changed, 48 insertions(+), 36 deletions(-) diff --git a/src/main/java/de/ph87/electro/circuit/Circuit.java b/src/main/java/de/ph87/electro/circuit/Circuit.java index ffcfb49..4c97b4e 100644 --- a/src/main/java/de/ph87/electro/circuit/Circuit.java +++ b/src/main/java/de/ph87/electro/circuit/Circuit.java @@ -67,10 +67,10 @@ public class Circuit { public void connect(final Junction a, final Junction b) { a.getDestinations().add(b); b.getDestinations().add(a); - evaluate(); + evaluateAndRender(); } - public void evaluate() { + public void evaluateAndRender() { parts.forEach(Part::reset); streamBatteries().forEach(PartBattery::startPropagation); parts.forEach(Part::render); @@ -100,7 +100,7 @@ public class Circuit { } if (isFree(part.getPosition())) { parts.add(part); - evaluate(); + part.render(); } } diff --git a/src/main/java/de/ph87/electro/circuit/CircuitPanel.java b/src/main/java/de/ph87/electro/circuit/CircuitPanel.java index cffd33b..948c31d 100644 --- a/src/main/java/de/ph87/electro/circuit/CircuitPanel.java +++ b/src/main/java/de/ph87/electro/circuit/CircuitPanel.java @@ -1,6 +1,5 @@ package de.ph87.electro.circuit; -import lombok.Getter; import lombok.extern.slf4j.Slf4j; import javax.swing.*; @@ -11,13 +10,12 @@ import static de.ph87.electro.CONFIG.*; @Slf4j public class CircuitPanel extends JPanel { - private final CircuitPanelMouseAdapter mouseAdapter = new CircuitPanelMouseAdapter(this); - - @Getter private final Circuit circuit = new Circuit(); + private final CircuitPanelMouseAdapter mouseAdapter = new CircuitPanelMouseAdapter(this, circuit); + public CircuitPanel() { - setDropTarget(new CircuitPanelDropTarget(this)); + new CircuitPanelDropTarget(this, circuit); } @Override diff --git a/src/main/java/de/ph87/electro/circuit/CircuitPanelDropTarget.java b/src/main/java/de/ph87/electro/circuit/CircuitPanelDropTarget.java index a8dc8a7..d89e59c 100644 --- a/src/main/java/de/ph87/electro/circuit/CircuitPanelDropTarget.java +++ b/src/main/java/de/ph87/electro/circuit/CircuitPanelDropTarget.java @@ -1,5 +1,6 @@ package de.ph87.electro.circuit; +import de.ph87.electro.circuit.part.Part; import de.ph87.electro.circuit.part.impl.*; import de.ph87.electro.common.AbstractDropTarget; @@ -12,30 +13,34 @@ public class CircuitPanelDropTarget extends AbstractDropTarget { private final CircuitPanel circuitPanel; - public CircuitPanelDropTarget(final CircuitPanel circuitPanel) { + private final Circuit circuit; + + public CircuitPanelDropTarget(final CircuitPanel circuitPanel, final Circuit circuit) { super(circuitPanel); this.circuitPanel = circuitPanel; + this.circuit = circuit; + circuitPanel.setDropTarget(this); } @Override protected boolean drop(final Point point, final String data) { final Point raster = div(point, RASTER); if (data.equals(PartBattery.class.getSimpleName())) { - circuitPanel.getCircuit().partAdd(new PartBattery(raster)); + addPart(new PartBattery(raster)); } else if (data.equals(PartJunctionCorner.class.getSimpleName())) { - circuitPanel.getCircuit().partAdd(new PartJunctionCorner(raster)); + addPart(new PartJunctionCorner(raster)); } else if (data.equals(PartJunctionEdge.class.getSimpleName())) { - circuitPanel.getCircuit().partAdd(new PartJunctionEdge(raster)); + addPart(new PartJunctionEdge(raster)); } else if (data.equals(PartJunctionMiddle.class.getSimpleName())) { - circuitPanel.getCircuit().partAdd(new PartJunctionMiddle(raster)); + addPart(new PartJunctionMiddle(raster)); } else if (data.equals(PartLight.class.getSimpleName())) { - circuitPanel.getCircuit().partAdd(new PartLight(raster)); + addPart(new PartLight(raster)); } else if (data.equals(PartSwitch1x1.class.getSimpleName())) { - circuitPanel.getCircuit().partAdd(new PartSwitch1x1(raster)); + addPart(new PartSwitch1x1(raster)); } else if (data.equals(PartSwitch1x2.class.getSimpleName())) { - circuitPanel.getCircuit().partAdd(new PartSwitch1x2(raster)); + addPart(new PartSwitch1x2(raster)); } else if (data.equals(PartSwitchCross.class.getSimpleName())) { - circuitPanel.getCircuit().partAdd(new PartSwitchCross(raster)); + addPart(new PartSwitchCross(raster)); } else { throw new RuntimeException(); } @@ -43,4 +48,9 @@ public class CircuitPanelDropTarget extends AbstractDropTarget { return true; } + public void addPart(final Part part) { + circuit.partAdd(part); + circuitPanel.repaint(); + } + } diff --git a/src/main/java/de/ph87/electro/circuit/CircuitPanelMouseAdapter.java b/src/main/java/de/ph87/electro/circuit/CircuitPanelMouseAdapter.java index 3b4d728..e3a4982 100644 --- a/src/main/java/de/ph87/electro/circuit/CircuitPanelMouseAdapter.java +++ b/src/main/java/de/ph87/electro/circuit/CircuitPanelMouseAdapter.java @@ -19,6 +19,8 @@ class CircuitPanelMouseAdapter extends MouseAdapter { private final CircuitPanel circuitPanel; + private final Circuit circuit; + private Part partHover = null; private Junction junctionHover = null; @@ -31,8 +33,9 @@ class CircuitPanelMouseAdapter extends MouseAdapter { private Point dragPosition = null; - CircuitPanelMouseAdapter(final CircuitPanel circuitPanel) { + CircuitPanelMouseAdapter(final CircuitPanel circuitPanel, final Circuit circuit) { this.circuitPanel = circuitPanel; + this.circuit = circuit; circuitPanel.addMouseListener(this); circuitPanel.addMouseMotionListener(this); } @@ -40,26 +43,28 @@ class CircuitPanelMouseAdapter extends MouseAdapter { @Override public void mouseClicked(final MouseEvent e) { if (e.getButton() == BUTTON3) { - final Optional wireOptional = circuitPanel.getCircuit().findWireByPoint(e.getPoint()); + final Optional wireOptional = circuit.findWireByPoint(e.getPoint()); if (wireOptional.isPresent()) { final Wire wire = wireOptional.get(); wire.getA().getDestinations().remove(wire.getB()); wire.getB().getDestinations().remove(wire.getA()); - circuitPanel.getCircuit().evaluate(); + circuit.evaluateAndRender(); circuitPanel.repaint(); return; } } final Point cell = div(e.getPoint(), RASTER); - final Optional partOptional = circuitPanel.getCircuit().streamParts().filter(p -> p.getPosition().equals(cell)).findFirst(); + final Optional partOptional = circuit.streamParts().filter(p -> p.getPosition().equals(cell)).findFirst(); switch (e.getButton()) { case BUTTON1: partOptional.ifPresent(Part::action); - circuitPanel.getCircuit().evaluate(); + circuit.evaluateAndRender(); + circuitPanel.repaint(); break; case BUTTON3: partOptional.ifPresent(Part::clockwise); + circuitPanel.repaint(); break; } } @@ -72,7 +77,7 @@ class CircuitPanelMouseAdapter extends MouseAdapter { @Override public void mousePressed(final MouseEvent event) { - circuitPanel.getCircuit().findPart(event.getPoint()).ifPresent(part -> startPartOrJunction(part, event.getPoint())); + circuit.findPart(event.getPoint()).ifPresent(part -> startPartOrJunction(part, event.getPoint())); } private void startPartOrJunction(final Part part, final Point point) { @@ -90,19 +95,18 @@ class CircuitPanelMouseAdapter extends MouseAdapter { findHover(e.getPoint()); if (partDrag != null || junctionDrag != null) { dragPosition = e.getPoint(); - circuitPanel.repaint(); } + circuitPanel.repaint(); } private void findHover(final Point point) { - partHover = circuitPanel.getCircuit().findPart(point).orElse(null); + partHover = circuit.findPart(point).orElse(null); junctionHover = partHover != null ? partHover.findJunction(point).orElse(null) : null; if (junctionHover == null) { - wireHover = circuitPanel.getCircuit().findWireByPoint(point).orElse(null); + wireHover = circuit.findWireByPoint(point).orElse(null); } else { wireHover = null; } - circuitPanel.repaint(); } @Override @@ -115,11 +119,11 @@ class CircuitPanelMouseAdapter extends MouseAdapter { } if (partDrag != null) { - circuitPanel.getCircuit().partMove(partDrag, div(event.getPoint(), RASTER)); + circuit.partMove(partDrag, div(event.getPoint(), RASTER)); } if (junctionDrag != null) { - circuitPanel.getCircuit().findJunctionByPoint(event.getPoint()).filter(destination -> destination != junctionDrag).ifPresent(destination -> circuitPanel.getCircuit().connect(junctionDrag, destination)); + circuit.findJunctionByPoint(event.getPoint()).filter(destination -> destination != junctionDrag).ifPresent(destination -> circuit.connect(junctionDrag, destination)); } partDrag = null; diff --git a/src/test/java/de/ph87/electro/circuit/BatteryLightTest.java b/src/test/java/de/ph87/electro/circuit/BatteryLightTest.java index ded7414..e3ffa39 100644 --- a/src/test/java/de/ph87/electro/circuit/BatteryLightTest.java +++ b/src/test/java/de/ph87/electro/circuit/BatteryLightTest.java @@ -28,7 +28,7 @@ public class BatteryLightTest { @Test void test() { - circuit.evaluate(); + circuit.evaluateAndRender(); assertEquals(VOLTAGE, battery.getPlus().getVoltage()); assertEquals(VOLTAGE, light.getPin1().getVoltage()); diff --git a/src/test/java/de/ph87/electro/circuit/BatterySwitcher1x1Test.java b/src/test/java/de/ph87/electro/circuit/BatterySwitcher1x1Test.java index 6e1abbb..081a1bf 100644 --- a/src/test/java/de/ph87/electro/circuit/BatterySwitcher1x1Test.java +++ b/src/test/java/de/ph87/electro/circuit/BatterySwitcher1x1Test.java @@ -45,7 +45,7 @@ public class BatterySwitcher1x1Test { switcher.setState(state); - circuit.evaluate(); + circuit.evaluateAndRender(); assertEquals(state, switcher.isState()); diff --git a/src/test/java/de/ph87/electro/circuit/BatterySwitcher1x2Test.java b/src/test/java/de/ph87/electro/circuit/BatterySwitcher1x2Test.java index 8d65d7b..290461d 100644 --- a/src/test/java/de/ph87/electro/circuit/BatterySwitcher1x2Test.java +++ b/src/test/java/de/ph87/electro/circuit/BatterySwitcher1x2Test.java @@ -50,7 +50,7 @@ public class BatterySwitcher1x2Test { switcher.setState(state); - circuit.evaluate(); + circuit.evaluateAndRender(); assertEquals(state, switcher.isState()); diff --git a/src/test/java/de/ph87/electro/circuit/BatterySwitcher2x2Test.java b/src/test/java/de/ph87/electro/circuit/BatterySwitcher2x2Test.java index 134ca39..9467bb8 100644 --- a/src/test/java/de/ph87/electro/circuit/BatterySwitcher2x2Test.java +++ b/src/test/java/de/ph87/electro/circuit/BatterySwitcher2x2Test.java @@ -62,7 +62,7 @@ public class BatterySwitcher2x2Test { switcher0.setState(state0); switcher1.setState(state1); - circuit.evaluate(); + circuit.evaluateAndRender(); assertEquals(state0, switcher0.isState()); assertEquals(state1, switcher1.isState()); diff --git a/src/test/java/de/ph87/electro/circuit/BatterySwitcherCrossTest.java b/src/test/java/de/ph87/electro/circuit/BatterySwitcherCrossTest.java index 602ec9b..3b720a6 100644 --- a/src/test/java/de/ph87/electro/circuit/BatterySwitcherCrossTest.java +++ b/src/test/java/de/ph87/electro/circuit/BatterySwitcherCrossTest.java @@ -90,7 +90,7 @@ public class BatterySwitcherCrossTest { switcherX.setState(stateX); switcher1.setState(state1); - circuit.evaluate(); + circuit.evaluateAndRender(); assertEquals(state0, switcher0.isState()); assertEquals(stateX, switcherX.isState()); diff --git a/src/test/java/de/ph87/electro/circuit/CircuitServiceTest.java b/src/test/java/de/ph87/electro/circuit/CircuitServiceTest.java index db381df..a63d150 100644 --- a/src/test/java/de/ph87/electro/circuit/CircuitServiceTest.java +++ b/src/test/java/de/ph87/electro/circuit/CircuitServiceTest.java @@ -36,8 +36,8 @@ class CircuitServiceTest { final ByteArrayInputStream input = new ByteArrayInputStream(output.toByteArray()); final Circuit reloaded = CircuitService.read(input); - original.evaluate(); - reloaded.evaluate(); + original.evaluateAndRender(); + reloaded.evaluateAndRender(); assertEquals(original.getPartCount(), reloaded.getPartCount()); original.streamParts().forEach(originalPart -> {