replaced 'int rotation' by 'Orientation'
This commit is contained in:
parent
c61317f705
commit
f8e64b1280
@ -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);
|
||||
}
|
||||
|
||||
@ -43,7 +43,7 @@ public class CircuitPanel extends JPanel {
|
||||
break;
|
||||
case BUTTON3:
|
||||
partOptional.ifPresent(part -> {
|
||||
part.rotate();
|
||||
part.clockwise();
|
||||
repaint();
|
||||
});
|
||||
break;
|
||||
|
||||
@ -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<JunctionDto> 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();
|
||||
}
|
||||
|
||||
|
||||
37
src/main/java/de/ph87/electro/circuit/part/Orientation.java
Normal file
37
src/main/java/de/ph87/electro/circuit/part/Orientation.java
Normal file
@ -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<Point2D.Double, Point2D.Double> map;
|
||||
|
||||
private final int deg90;
|
||||
|
||||
Orientation(final int deg90, final Function<Point2D.Double, Point2D.Double> 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;
|
||||
}
|
||||
|
||||
}
|
||||
@ -32,7 +32,7 @@ public abstract class Part {
|
||||
|
||||
protected int y;
|
||||
|
||||
protected int rotation = 0;
|
||||
protected Orientation orientation = Orientation.R0;
|
||||
|
||||
protected final List<Junction> 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<Junction> 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);
|
||||
}
|
||||
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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());
|
||||
|
||||
Loading…
Reference in New Issue
Block a user