From f8e64b12807dfdc90115483d38b9144f233ec32b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrick=20Ha=C3=9Fel?= Date: Wed, 15 May 2024 16:39:48 +0200 Subject: [PATCH] replaced 'int rotation' by 'Orientation' --- .../java/de/ph87/electro/circuit/Circuit.java | 2 +- .../de/ph87/electro/circuit/CircuitPanel.java | 2 +- .../de/ph87/electro/circuit/dto/PartDto.java | 5 ++- .../electro/circuit/part/Orientation.java | 37 +++++++++++++++++++ .../de/ph87/electro/circuit/part/Part.java | 8 ++-- .../circuit/part/impl/PartBattery.java | 7 ++-- .../electro/circuit/CircuitServiceTest.java | 2 +- 7 files changed, 50 insertions(+), 13 deletions(-) create mode 100644 src/main/java/de/ph87/electro/circuit/part/Orientation.java diff --git a/src/main/java/de/ph87/electro/circuit/Circuit.java b/src/main/java/de/ph87/electro/circuit/Circuit.java index a4f8466..89e5f63 100644 --- a/src/main/java/de/ph87/electro/circuit/Circuit.java +++ b/src/main/java/de/ph87/electro/circuit/Circuit.java @@ -36,7 +36,7 @@ public class Circuit { private void addAndRotate(final Part part, final int rotate) { for (int i = 0; i < rotate % 4; i++) { - part.rotate(); + part.clockwise(); } add(part); } diff --git a/src/main/java/de/ph87/electro/circuit/CircuitPanel.java b/src/main/java/de/ph87/electro/circuit/CircuitPanel.java index 0f7b4f3..4adc84f 100644 --- a/src/main/java/de/ph87/electro/circuit/CircuitPanel.java +++ b/src/main/java/de/ph87/electro/circuit/CircuitPanel.java @@ -43,7 +43,7 @@ public class CircuitPanel extends JPanel { break; case BUTTON3: partOptional.ifPresent(part -> { - part.rotate(); + part.clockwise(); repaint(); }); break; diff --git a/src/main/java/de/ph87/electro/circuit/dto/PartDto.java b/src/main/java/de/ph87/electro/circuit/dto/PartDto.java index 40d3e12..ef80c44 100644 --- a/src/main/java/de/ph87/electro/circuit/dto/PartDto.java +++ b/src/main/java/de/ph87/electro/circuit/dto/PartDto.java @@ -1,6 +1,7 @@ package de.ph87.electro.circuit.dto; import com.fasterxml.jackson.annotation.JsonTypeInfo; +import de.ph87.electro.circuit.part.Orientation; import de.ph87.electro.circuit.part.Part; import de.ph87.electro.circuit.part.impl.*; import lombok.Getter; @@ -23,7 +24,7 @@ public class PartDto { private int y; - private int rotation; + private Orientation orientation; private List junctions; @@ -32,7 +33,7 @@ public class PartDto { this.name = part.getName(); this.x = part.getX(); this.y = part.getY(); - this.rotation = part.getRotation(); + this.orientation = part.getOrientation(); this.junctions = part.getJunctions().stream().map(JunctionDto::new).toList(); } diff --git a/src/main/java/de/ph87/electro/circuit/part/Orientation.java b/src/main/java/de/ph87/electro/circuit/part/Orientation.java new file mode 100644 index 0000000..c50432f --- /dev/null +++ b/src/main/java/de/ph87/electro/circuit/part/Orientation.java @@ -0,0 +1,37 @@ +package de.ph87.electro.circuit.part; + +import java.awt.geom.Point2D; +import java.util.function.Function; + +import static java.lang.Math.PI; + +@SuppressWarnings("SuspiciousNameCombination") +public enum Orientation { + R0(0, p -> new Point2D.Double(p.x, p.y)), + R1(1, p -> new Point2D.Double(1 - p.y, p.x)), + R2(2, p -> new Point2D.Double(1 - p.x, 1 - p.y)), + R3(3, p -> new Point2D.Double(p.y, 1 - p.x)), + ; + + private final Function map; + + private final int deg90; + + Orientation(final int deg90, final Function map) { + this.deg90 = deg90; + this.map = map; + } + + public Point2D.Double map(final Point2D.Double p) { + return map.apply(p); + } + + public Orientation clockwise() { + return values()[(ordinal() + 1) % values().length]; + } + + public double getTheta() { + return PI / 2 * deg90; + } + +} diff --git a/src/main/java/de/ph87/electro/circuit/part/Part.java b/src/main/java/de/ph87/electro/circuit/part/Part.java index b67d079..c94ff1a 100644 --- a/src/main/java/de/ph87/electro/circuit/part/Part.java +++ b/src/main/java/de/ph87/electro/circuit/part/Part.java @@ -32,7 +32,7 @@ public abstract class Part { protected int y; - protected int rotation = 0; + protected Orientation orientation = Orientation.R0; protected final List junctions = new ArrayList<>(); @@ -48,7 +48,7 @@ public abstract class Part { this.name = dto.getName(); this.x = dto.getX(); this.y = dto.getY(); - this.rotation = dto.getRotation(); + this.orientation = dto.getOrientation(); } public void link(final List junctions) { @@ -65,8 +65,8 @@ public abstract class Part { junctions.forEach(junction -> junction.paint(g)); } - public void rotate() { - rotation = (rotation + 1) % 4; + public void clockwise() { + orientation = orientation.clockwise(); junctions.forEach(Junction::rotate); } diff --git a/src/main/java/de/ph87/electro/circuit/part/impl/PartBattery.java b/src/main/java/de/ph87/electro/circuit/part/impl/PartBattery.java index b8b46e2..cde7ae8 100644 --- a/src/main/java/de/ph87/electro/circuit/part/impl/PartBattery.java +++ b/src/main/java/de/ph87/electro/circuit/part/impl/PartBattery.java @@ -12,7 +12,6 @@ import java.awt.*; import java.awt.image.BufferedImage; import static de.ph87.electro.CONFIG.*; -import static java.lang.Math.PI; @Getter @ToString(callSuper = true) @@ -56,8 +55,8 @@ public class PartBattery extends Part { } @Override - public void rotate() { - super.rotate(); + public void clockwise() { + super.clockwise(); } public void startPropagation() { @@ -80,7 +79,7 @@ public class PartBattery extends Part { final BufferedImage img = new BufferedImage(RASTER, RASTER, BufferedImage.TYPE_INT_ARGB); final Graphics2D x = (Graphics2D) img.getGraphics(); x.translate(RASTER / 2, RASTER / 2); - x.rotate(PI / 2 * rotation); + x.rotate(orientation.getTheta()); x.translate(-RASTER / 2, -RASTER / 2); line(x, JUNCTION_LEFT, HALF, HALF - GAP / 2 - MINUS_W / 2, HALF, Color.BLACK, SYMBOL_STROKE); line(x, HALF + GAP / 2 + PLUS_W / 2, HALF, JUNCTION_RIGHT, HALF, Color.BLACK, SYMBOL_STROKE); diff --git a/src/test/java/de/ph87/electro/circuit/CircuitServiceTest.java b/src/test/java/de/ph87/electro/circuit/CircuitServiceTest.java index edb2564..7902099 100644 --- a/src/test/java/de/ph87/electro/circuit/CircuitServiceTest.java +++ b/src/test/java/de/ph87/electro/circuit/CircuitServiceTest.java @@ -44,7 +44,7 @@ class CircuitServiceTest { assertEquals(originalPart.getName(), reloadedPart.getName()); assertEquals(originalPart.getX(), reloadedPart.getX()); assertEquals(originalPart.getY(), reloadedPart.getY()); - assertEquals(originalPart.getRotation(), reloadedPart.getRotation()); + assertEquals(originalPart.getOrientation(), reloadedPart.getOrientation()); assertEquals(originalPart.getJunctions().size(), reloadedPart.getJunctions().size()); for (final Junction originalJunction : originalPart.getJunctions()) { System.out.printf(" - Junction: %s\n", originalJunction.getUuid());