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) {
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -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<Wire> wireOptional = circuitPanel.getCircuit().findWireByPoint(e.getPoint());
|
||||
final Optional<Wire> 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<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()) {
|
||||
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;
|
||||
|
||||
@ -28,7 +28,7 @@ public class BatteryLightTest {
|
||||
|
||||
@Test
|
||||
void test() {
|
||||
circuit.evaluate();
|
||||
circuit.evaluateAndRender();
|
||||
|
||||
assertEquals(VOLTAGE, battery.getPlus().getVoltage());
|
||||
assertEquals(VOLTAGE, light.getPin1().getVoltage());
|
||||
|
||||
@ -45,7 +45,7 @@ public class BatterySwitcher1x1Test {
|
||||
|
||||
switcher.setState(state);
|
||||
|
||||
circuit.evaluate();
|
||||
circuit.evaluateAndRender();
|
||||
|
||||
assertEquals(state, switcher.isState());
|
||||
|
||||
|
||||
@ -50,7 +50,7 @@ public class BatterySwitcher1x2Test {
|
||||
|
||||
switcher.setState(state);
|
||||
|
||||
circuit.evaluate();
|
||||
circuit.evaluateAndRender();
|
||||
|
||||
assertEquals(state, switcher.isState());
|
||||
|
||||
|
||||
@ -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());
|
||||
|
||||
@ -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());
|
||||
|
||||
@ -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 -> {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user