code clean: evaluate, render, repaint
This commit is contained in:
parent
b832482606
commit
3591741ee5
@ -67,10 +67,10 @@ public class Circuit {
|
|||||||
public void connect(final Junction a, final Junction b) {
|
public void connect(final Junction a, final Junction b) {
|
||||||
a.getDestinations().add(b);
|
a.getDestinations().add(b);
|
||||||
b.getDestinations().add(a);
|
b.getDestinations().add(a);
|
||||||
evaluate();
|
evaluateAndRender();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void evaluate() {
|
public void evaluateAndRender() {
|
||||||
parts.forEach(Part::reset);
|
parts.forEach(Part::reset);
|
||||||
streamBatteries().forEach(PartBattery::startPropagation);
|
streamBatteries().forEach(PartBattery::startPropagation);
|
||||||
parts.forEach(Part::render);
|
parts.forEach(Part::render);
|
||||||
@ -100,7 +100,7 @@ public class Circuit {
|
|||||||
}
|
}
|
||||||
if (isFree(part.getPosition())) {
|
if (isFree(part.getPosition())) {
|
||||||
parts.add(part);
|
parts.add(part);
|
||||||
evaluate();
|
part.render();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,5 @@
|
|||||||
package de.ph87.electro.circuit;
|
package de.ph87.electro.circuit;
|
||||||
|
|
||||||
import lombok.Getter;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
@ -11,13 +10,12 @@ import static de.ph87.electro.CONFIG.*;
|
|||||||
@Slf4j
|
@Slf4j
|
||||||
public class CircuitPanel extends JPanel {
|
public class CircuitPanel extends JPanel {
|
||||||
|
|
||||||
private final CircuitPanelMouseAdapter mouseAdapter = new CircuitPanelMouseAdapter(this);
|
|
||||||
|
|
||||||
@Getter
|
|
||||||
private final Circuit circuit = new Circuit();
|
private final Circuit circuit = new Circuit();
|
||||||
|
|
||||||
|
private final CircuitPanelMouseAdapter mouseAdapter = new CircuitPanelMouseAdapter(this, circuit);
|
||||||
|
|
||||||
public CircuitPanel() {
|
public CircuitPanel() {
|
||||||
setDropTarget(new CircuitPanelDropTarget(this));
|
new CircuitPanelDropTarget(this, circuit);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
package de.ph87.electro.circuit;
|
package de.ph87.electro.circuit;
|
||||||
|
|
||||||
|
import de.ph87.electro.circuit.part.Part;
|
||||||
import de.ph87.electro.circuit.part.impl.*;
|
import de.ph87.electro.circuit.part.impl.*;
|
||||||
import de.ph87.electro.common.AbstractDropTarget;
|
import de.ph87.electro.common.AbstractDropTarget;
|
||||||
|
|
||||||
@ -12,30 +13,34 @@ public class CircuitPanelDropTarget extends AbstractDropTarget {
|
|||||||
|
|
||||||
private final CircuitPanel circuitPanel;
|
private final CircuitPanel circuitPanel;
|
||||||
|
|
||||||
public CircuitPanelDropTarget(final CircuitPanel circuitPanel) {
|
private final Circuit circuit;
|
||||||
|
|
||||||
|
public CircuitPanelDropTarget(final CircuitPanel circuitPanel, final Circuit circuit) {
|
||||||
super(circuitPanel);
|
super(circuitPanel);
|
||||||
this.circuitPanel = circuitPanel;
|
this.circuitPanel = circuitPanel;
|
||||||
|
this.circuit = circuit;
|
||||||
|
circuitPanel.setDropTarget(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean drop(final Point point, final String data) {
|
protected boolean drop(final Point point, final String data) {
|
||||||
final Point raster = div(point, RASTER);
|
final Point raster = div(point, RASTER);
|
||||||
if (data.equals(PartBattery.class.getSimpleName())) {
|
if (data.equals(PartBattery.class.getSimpleName())) {
|
||||||
circuitPanel.getCircuit().partAdd(new PartBattery(raster));
|
addPart(new PartBattery(raster));
|
||||||
} else if (data.equals(PartJunctionCorner.class.getSimpleName())) {
|
} else if (data.equals(PartJunctionCorner.class.getSimpleName())) {
|
||||||
circuitPanel.getCircuit().partAdd(new PartJunctionCorner(raster));
|
addPart(new PartJunctionCorner(raster));
|
||||||
} else if (data.equals(PartJunctionEdge.class.getSimpleName())) {
|
} else if (data.equals(PartJunctionEdge.class.getSimpleName())) {
|
||||||
circuitPanel.getCircuit().partAdd(new PartJunctionEdge(raster));
|
addPart(new PartJunctionEdge(raster));
|
||||||
} else if (data.equals(PartJunctionMiddle.class.getSimpleName())) {
|
} else if (data.equals(PartJunctionMiddle.class.getSimpleName())) {
|
||||||
circuitPanel.getCircuit().partAdd(new PartJunctionMiddle(raster));
|
addPart(new PartJunctionMiddle(raster));
|
||||||
} else if (data.equals(PartLight.class.getSimpleName())) {
|
} else if (data.equals(PartLight.class.getSimpleName())) {
|
||||||
circuitPanel.getCircuit().partAdd(new PartLight(raster));
|
addPart(new PartLight(raster));
|
||||||
} else if (data.equals(PartSwitch1x1.class.getSimpleName())) {
|
} else if (data.equals(PartSwitch1x1.class.getSimpleName())) {
|
||||||
circuitPanel.getCircuit().partAdd(new PartSwitch1x1(raster));
|
addPart(new PartSwitch1x1(raster));
|
||||||
} else if (data.equals(PartSwitch1x2.class.getSimpleName())) {
|
} else if (data.equals(PartSwitch1x2.class.getSimpleName())) {
|
||||||
circuitPanel.getCircuit().partAdd(new PartSwitch1x2(raster));
|
addPart(new PartSwitch1x2(raster));
|
||||||
} else if (data.equals(PartSwitchCross.class.getSimpleName())) {
|
} else if (data.equals(PartSwitchCross.class.getSimpleName())) {
|
||||||
circuitPanel.getCircuit().partAdd(new PartSwitchCross(raster));
|
addPart(new PartSwitchCross(raster));
|
||||||
} else {
|
} else {
|
||||||
throw new RuntimeException();
|
throw new RuntimeException();
|
||||||
}
|
}
|
||||||
@ -43,4 +48,9 @@ public class CircuitPanelDropTarget extends AbstractDropTarget {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void addPart(final Part part) {
|
||||||
|
circuit.partAdd(part);
|
||||||
|
circuitPanel.repaint();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -19,6 +19,8 @@ class CircuitPanelMouseAdapter extends MouseAdapter {
|
|||||||
|
|
||||||
private final CircuitPanel circuitPanel;
|
private final CircuitPanel circuitPanel;
|
||||||
|
|
||||||
|
private final Circuit circuit;
|
||||||
|
|
||||||
private Part partHover = null;
|
private Part partHover = null;
|
||||||
|
|
||||||
private Junction junctionHover = null;
|
private Junction junctionHover = null;
|
||||||
@ -31,8 +33,9 @@ class CircuitPanelMouseAdapter extends MouseAdapter {
|
|||||||
|
|
||||||
private Point dragPosition = null;
|
private Point dragPosition = null;
|
||||||
|
|
||||||
CircuitPanelMouseAdapter(final CircuitPanel circuitPanel) {
|
CircuitPanelMouseAdapter(final CircuitPanel circuitPanel, final Circuit circuit) {
|
||||||
this.circuitPanel = circuitPanel;
|
this.circuitPanel = circuitPanel;
|
||||||
|
this.circuit = circuit;
|
||||||
circuitPanel.addMouseListener(this);
|
circuitPanel.addMouseListener(this);
|
||||||
circuitPanel.addMouseMotionListener(this);
|
circuitPanel.addMouseMotionListener(this);
|
||||||
}
|
}
|
||||||
@ -40,26 +43,28 @@ class CircuitPanelMouseAdapter extends MouseAdapter {
|
|||||||
@Override
|
@Override
|
||||||
public void mouseClicked(final MouseEvent e) {
|
public void mouseClicked(final MouseEvent e) {
|
||||||
if (e.getButton() == BUTTON3) {
|
if (e.getButton() == BUTTON3) {
|
||||||
final Optional<Wire> wireOptional = circuitPanel.getCircuit().findWireByPoint(e.getPoint());
|
final Optional<Wire> wireOptional = circuit.findWireByPoint(e.getPoint());
|
||||||
if (wireOptional.isPresent()) {
|
if (wireOptional.isPresent()) {
|
||||||
final Wire wire = wireOptional.get();
|
final Wire wire = wireOptional.get();
|
||||||
wire.getA().getDestinations().remove(wire.getB());
|
wire.getA().getDestinations().remove(wire.getB());
|
||||||
wire.getB().getDestinations().remove(wire.getA());
|
wire.getB().getDestinations().remove(wire.getA());
|
||||||
circuitPanel.getCircuit().evaluate();
|
circuit.evaluateAndRender();
|
||||||
circuitPanel.repaint();
|
circuitPanel.repaint();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
final Point cell = div(e.getPoint(), RASTER);
|
final Point cell = div(e.getPoint(), RASTER);
|
||||||
final Optional<Part> partOptional = circuitPanel.getCircuit().streamParts().filter(p -> p.getPosition().equals(cell)).findFirst();
|
final Optional<Part> partOptional = circuit.streamParts().filter(p -> p.getPosition().equals(cell)).findFirst();
|
||||||
switch (e.getButton()) {
|
switch (e.getButton()) {
|
||||||
case BUTTON1:
|
case BUTTON1:
|
||||||
partOptional.ifPresent(Part::action);
|
partOptional.ifPresent(Part::action);
|
||||||
circuitPanel.getCircuit().evaluate();
|
circuit.evaluateAndRender();
|
||||||
|
circuitPanel.repaint();
|
||||||
break;
|
break;
|
||||||
case BUTTON3:
|
case BUTTON3:
|
||||||
partOptional.ifPresent(Part::clockwise);
|
partOptional.ifPresent(Part::clockwise);
|
||||||
|
circuitPanel.repaint();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -72,7 +77,7 @@ class CircuitPanelMouseAdapter extends MouseAdapter {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void mousePressed(final MouseEvent event) {
|
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) {
|
private void startPartOrJunction(final Part part, final Point point) {
|
||||||
@ -90,19 +95,18 @@ class CircuitPanelMouseAdapter extends MouseAdapter {
|
|||||||
findHover(e.getPoint());
|
findHover(e.getPoint());
|
||||||
if (partDrag != null || junctionDrag != null) {
|
if (partDrag != null || junctionDrag != null) {
|
||||||
dragPosition = e.getPoint();
|
dragPosition = e.getPoint();
|
||||||
circuitPanel.repaint();
|
|
||||||
}
|
}
|
||||||
|
circuitPanel.repaint();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void findHover(final Point point) {
|
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;
|
junctionHover = partHover != null ? partHover.findJunction(point).orElse(null) : null;
|
||||||
if (junctionHover == null) {
|
if (junctionHover == null) {
|
||||||
wireHover = circuitPanel.getCircuit().findWireByPoint(point).orElse(null);
|
wireHover = circuit.findWireByPoint(point).orElse(null);
|
||||||
} else {
|
} else {
|
||||||
wireHover = null;
|
wireHover = null;
|
||||||
}
|
}
|
||||||
circuitPanel.repaint();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -115,11 +119,11 @@ class CircuitPanelMouseAdapter extends MouseAdapter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (partDrag != null) {
|
if (partDrag != null) {
|
||||||
circuitPanel.getCircuit().partMove(partDrag, div(event.getPoint(), RASTER));
|
circuit.partMove(partDrag, div(event.getPoint(), RASTER));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (junctionDrag != null) {
|
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;
|
partDrag = null;
|
||||||
|
|||||||
@ -28,7 +28,7 @@ public class BatteryLightTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
void test() {
|
void test() {
|
||||||
circuit.evaluate();
|
circuit.evaluateAndRender();
|
||||||
|
|
||||||
assertEquals(VOLTAGE, battery.getPlus().getVoltage());
|
assertEquals(VOLTAGE, battery.getPlus().getVoltage());
|
||||||
assertEquals(VOLTAGE, light.getPin1().getVoltage());
|
assertEquals(VOLTAGE, light.getPin1().getVoltage());
|
||||||
|
|||||||
@ -45,7 +45,7 @@ public class BatterySwitcher1x1Test {
|
|||||||
|
|
||||||
switcher.setState(state);
|
switcher.setState(state);
|
||||||
|
|
||||||
circuit.evaluate();
|
circuit.evaluateAndRender();
|
||||||
|
|
||||||
assertEquals(state, switcher.isState());
|
assertEquals(state, switcher.isState());
|
||||||
|
|
||||||
|
|||||||
@ -50,7 +50,7 @@ public class BatterySwitcher1x2Test {
|
|||||||
|
|
||||||
switcher.setState(state);
|
switcher.setState(state);
|
||||||
|
|
||||||
circuit.evaluate();
|
circuit.evaluateAndRender();
|
||||||
|
|
||||||
assertEquals(state, switcher.isState());
|
assertEquals(state, switcher.isState());
|
||||||
|
|
||||||
|
|||||||
@ -62,7 +62,7 @@ public class BatterySwitcher2x2Test {
|
|||||||
switcher0.setState(state0);
|
switcher0.setState(state0);
|
||||||
switcher1.setState(state1);
|
switcher1.setState(state1);
|
||||||
|
|
||||||
circuit.evaluate();
|
circuit.evaluateAndRender();
|
||||||
|
|
||||||
assertEquals(state0, switcher0.isState());
|
assertEquals(state0, switcher0.isState());
|
||||||
assertEquals(state1, switcher1.isState());
|
assertEquals(state1, switcher1.isState());
|
||||||
|
|||||||
@ -90,7 +90,7 @@ public class BatterySwitcherCrossTest {
|
|||||||
switcherX.setState(stateX);
|
switcherX.setState(stateX);
|
||||||
switcher1.setState(state1);
|
switcher1.setState(state1);
|
||||||
|
|
||||||
circuit.evaluate();
|
circuit.evaluateAndRender();
|
||||||
|
|
||||||
assertEquals(state0, switcher0.isState());
|
assertEquals(state0, switcher0.isState());
|
||||||
assertEquals(stateX, switcherX.isState());
|
assertEquals(stateX, switcherX.isState());
|
||||||
|
|||||||
@ -36,8 +36,8 @@ class CircuitServiceTest {
|
|||||||
final ByteArrayInputStream input = new ByteArrayInputStream(output.toByteArray());
|
final ByteArrayInputStream input = new ByteArrayInputStream(output.toByteArray());
|
||||||
final Circuit reloaded = CircuitService.read(input);
|
final Circuit reloaded = CircuitService.read(input);
|
||||||
|
|
||||||
original.evaluate();
|
original.evaluateAndRender();
|
||||||
reloaded.evaluate();
|
reloaded.evaluateAndRender();
|
||||||
|
|
||||||
assertEquals(original.getPartCount(), reloaded.getPartCount());
|
assertEquals(original.getPartCount(), reloaded.getPartCount());
|
||||||
original.streamParts().forEach(originalPart -> {
|
original.streamParts().forEach(originalPart -> {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user