implemented bridge
This commit is contained in:
2
pom.xml
2
pom.xml
@@ -4,7 +4,7 @@
|
|||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<groupId>de.srsoftware</groupId>
|
<groupId>de.srsoftware</groupId>
|
||||||
<artifactId>web4rail</artifactId>
|
<artifactId>web4rail</artifactId>
|
||||||
<version>1.1.9</version>
|
<version>1.1.10</version>
|
||||||
<name>Web4Rail</name>
|
<name>Web4Rail</name>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
<description>Java Model Railway Control</description>
|
<description>Java Model Railway Control</description>
|
||||||
|
|||||||
@@ -309,4 +309,14 @@ table.brake-times th{
|
|||||||
border-color: black;
|
border-color: black;
|
||||||
border-style: solid;
|
border-style: solid;
|
||||||
border-width: 1px 0 0;
|
border-width: 1px 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
polyline{
|
||||||
|
stroke: black;
|
||||||
|
stroke-width: 5px;
|
||||||
|
fill: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
svg.disconnected rect{
|
||||||
|
fill: red;
|
||||||
}
|
}
|
||||||
4
resources/svg/BridgeE.svg
Normal file
4
resources/svg/BridgeE.svg
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
<svg width="100" height="" viewbox="0 0 100 100">
|
||||||
|
<rect x="20" y="35" width="80" height="30" />
|
||||||
|
<polyline points="30,10 20,20 20,80 30,90" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 151 B |
4
resources/svg/BridgeN.svg
Normal file
4
resources/svg/BridgeN.svg
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
<svg width="100" height="" viewbox="0 0 100 100">
|
||||||
|
<rect x="35" y="0" width="30" height="80" />
|
||||||
|
<polyline points="10,70 20,80 80,80 90,70" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 150 B |
4
resources/svg/BridgeS.svg
Normal file
4
resources/svg/BridgeS.svg
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
<svg width="100" height="" viewbox="0 0 100 100">
|
||||||
|
<rect x="35" y="20" width="30" height="80" />
|
||||||
|
<polyline points="10,30 20,20 80,20 90,30" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 151 B |
4
resources/svg/BridgeW.svg
Normal file
4
resources/svg/BridgeW.svg
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
<svg width="100" height="" viewbox="0 0 100 100">
|
||||||
|
<rect x="0" y="35" width="80" height="30" />
|
||||||
|
<polyline points="70,10 80,20 80,80 70,90" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 150 B |
@@ -40,6 +40,11 @@ import de.srsoftware.web4rail.tags.Table;
|
|||||||
import de.srsoftware.web4rail.tiles.Block;
|
import de.srsoftware.web4rail.tiles.Block;
|
||||||
import de.srsoftware.web4rail.tiles.BlockH;
|
import de.srsoftware.web4rail.tiles.BlockH;
|
||||||
import de.srsoftware.web4rail.tiles.BlockV;
|
import de.srsoftware.web4rail.tiles.BlockV;
|
||||||
|
import de.srsoftware.web4rail.tiles.Bridge;
|
||||||
|
import de.srsoftware.web4rail.tiles.BridgeE;
|
||||||
|
import de.srsoftware.web4rail.tiles.BridgeN;
|
||||||
|
import de.srsoftware.web4rail.tiles.BridgeS;
|
||||||
|
import de.srsoftware.web4rail.tiles.BridgeW;
|
||||||
import de.srsoftware.web4rail.tiles.Contact;
|
import de.srsoftware.web4rail.tiles.Contact;
|
||||||
import de.srsoftware.web4rail.tiles.ContactH;
|
import de.srsoftware.web4rail.tiles.ContactH;
|
||||||
import de.srsoftware.web4rail.tiles.ContactV;
|
import de.srsoftware.web4rail.tiles.ContactV;
|
||||||
@@ -171,6 +176,10 @@ public class Plan extends BaseClass{
|
|||||||
return analyze();
|
return analyze();
|
||||||
case ACTION_CLICK:
|
case ACTION_CLICK:
|
||||||
return click(get(params.get(ID),true));
|
return click(get(params.get(ID),true));
|
||||||
|
case ACTION_CONNECT:
|
||||||
|
Tile tile = get(params.get(ID), false);
|
||||||
|
if (tile instanceof Bridge) return ((Bridge)tile).requestConnect();
|
||||||
|
break;
|
||||||
case ACTION_MOVE:
|
case ACTION_MOVE:
|
||||||
return moveTile(params.get(DIRECTION),params.get(ID));
|
return moveTile(params.get(DIRECTION),params.get(ID));
|
||||||
case ACTION_PROPS:
|
case ACTION_PROPS:
|
||||||
@@ -248,6 +257,9 @@ public class Plan extends BaseClass{
|
|||||||
private String analyze() {
|
private String analyze() {
|
||||||
Vector<Route> routes = new Vector<Route>();
|
Vector<Route> routes = new Vector<Route>();
|
||||||
for (Block block : blocks) {
|
for (Block block : blocks) {
|
||||||
|
if (block.name.equals("Huhu")) {
|
||||||
|
System.err.println("Here we go!");
|
||||||
|
}
|
||||||
for (Connector con : block.startPoints()) {
|
for (Connector con : block.startPoints()) {
|
||||||
routes.addAll(follow(new Route().begin(block,con.from.inverse()),con));
|
routes.addAll(follow(new Route().begin(block,con.from.inverse()),con));
|
||||||
}
|
}
|
||||||
@@ -859,6 +871,10 @@ public class Plan extends BaseClass{
|
|||||||
new CrossV().tag(null).addTo(tiles);
|
new CrossV().tag(null).addTo(tiles);
|
||||||
new CrossH().tag(null).addTo(tiles);
|
new CrossH().tag(null).addTo(tiles);
|
||||||
new CrossPlus().tag(null).addTo(tiles);
|
new CrossPlus().tag(null).addTo(tiles);
|
||||||
|
new BridgeE().tag(null).addTo(tiles);
|
||||||
|
new BridgeN().tag(null).addTo(tiles);
|
||||||
|
new BridgeS().tag(null).addTo(tiles);
|
||||||
|
new BridgeW().tag(null).addTo(tiles);
|
||||||
new StraightH().tag(null).addTo(tiles);
|
new StraightH().tag(null).addTo(tiles);
|
||||||
new StraightV().tag(null).addTo(tiles);
|
new StraightV().tag(null).addTo(tiles);
|
||||||
new ContactH().tag(null).addTo(tiles);
|
new ContactH().tag(null).addTo(tiles);
|
||||||
|
|||||||
@@ -367,14 +367,14 @@ public class Route extends BaseClass implements Comparable<Route>{
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Route begin(Block block,Direction from) {
|
public Route begin(Block block,Direction to) {
|
||||||
// add those fields to clone, too!
|
// add those fields to clone, too!
|
||||||
contacts = new Vector<Contact>();
|
contacts = new Vector<Contact>();
|
||||||
signals = new Vector<Signal>();
|
signals = new Vector<Signal>();
|
||||||
path = new Vector<Tile>();
|
path = new Vector<Tile>();
|
||||||
turnouts = new HashMap<>();
|
turnouts = new HashMap<>();
|
||||||
startBlock = block;
|
startBlock = block;
|
||||||
startDirection = from;
|
startDirection = to;
|
||||||
path.add(block);
|
path.add(block);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|||||||
59
src/main/java/de/srsoftware/web4rail/tiles/Bridge.java
Normal file
59
src/main/java/de/srsoftware/web4rail/tiles/Bridge.java
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
package de.srsoftware.web4rail.tiles;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import de.srsoftware.tools.Tag;
|
||||||
|
import de.srsoftware.web4rail.Connector;
|
||||||
|
import de.srsoftware.web4rail.Window;
|
||||||
|
import de.srsoftware.web4rail.tags.Button;
|
||||||
|
import de.srsoftware.web4rail.tiles.Turnout.State;
|
||||||
|
|
||||||
|
public abstract class Bridge extends Tile {
|
||||||
|
private static Bridge pendingConnection = null;
|
||||||
|
protected Bridge counterpart = null;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object click() throws IOException {
|
||||||
|
if (pendingConnection != null) return connect();
|
||||||
|
return super.click();
|
||||||
|
}
|
||||||
|
|
||||||
|
private Object connect() {
|
||||||
|
if (this == pendingConnection) return t("Cannot connect {} to itself!",this);
|
||||||
|
if (isSet(counterpart)) {
|
||||||
|
counterpart.counterpart = null; // drop other connection
|
||||||
|
plan.place(counterpart);
|
||||||
|
}
|
||||||
|
counterpart = pendingConnection;
|
||||||
|
counterpart.counterpart = this;
|
||||||
|
pendingConnection = null;
|
||||||
|
plan.place(this);
|
||||||
|
plan.place(counterpart);
|
||||||
|
return t("Connected {} and {}.",this,counterpart);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected abstract Connector connector();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Window propMenu() {
|
||||||
|
Window win = super.propMenu();
|
||||||
|
Map<String, String> props = Map.of(REALM,REALM_PLAN,ID,id(),ACTION,ACTION_CONNECT);
|
||||||
|
new Tag("h4").content("Counterpart").addTo(win);
|
||||||
|
new Tag("p").content(isSet(counterpart) ? t("Connected to {}.",counterpart) : t("Not connected to other bridge part!")).addTo(win);
|
||||||
|
new Button(t("Select counterpart"), props).addTo(win);
|
||||||
|
return win;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object requestConnect() {
|
||||||
|
pendingConnection = this;
|
||||||
|
return t("Click other bridge to connect to!");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Tag tag(Map<String, Object> replacements) throws IOException {
|
||||||
|
Tag tag = super.tag(replacements);
|
||||||
|
if (isNull(counterpart)) tag.clazz(tag.get("class")+" disconnected");
|
||||||
|
return tag;
|
||||||
|
}
|
||||||
|
}
|
||||||
30
src/main/java/de/srsoftware/web4rail/tiles/BridgeE.java
Normal file
30
src/main/java/de/srsoftware/web4rail/tiles/BridgeE.java
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
package de.srsoftware.web4rail.tiles;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import de.srsoftware.web4rail.Connector;
|
||||||
|
import de.srsoftware.web4rail.Plan.Direction;
|
||||||
|
import de.srsoftware.web4rail.tiles.Turnout.State;
|
||||||
|
|
||||||
|
public class BridgeE extends Bridge {
|
||||||
|
@Override
|
||||||
|
public List<Direction> possibleDirections() {
|
||||||
|
return List.of(Direction.EAST);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<Connector, State> connections(Direction from) {
|
||||||
|
if (isSet(counterpart)) switch (from) {
|
||||||
|
case EAST:
|
||||||
|
return Map.of(counterpart.connector(),State.UNDEF);
|
||||||
|
default:
|
||||||
|
}
|
||||||
|
return super.connections(from);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Connector connector() {
|
||||||
|
return new Connector(x+1, y, Direction.WEST);
|
||||||
|
}
|
||||||
|
}
|
||||||
30
src/main/java/de/srsoftware/web4rail/tiles/BridgeN.java
Normal file
30
src/main/java/de/srsoftware/web4rail/tiles/BridgeN.java
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
package de.srsoftware.web4rail.tiles;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import de.srsoftware.web4rail.Connector;
|
||||||
|
import de.srsoftware.web4rail.Plan.Direction;
|
||||||
|
import de.srsoftware.web4rail.tiles.Turnout.State;
|
||||||
|
|
||||||
|
public class BridgeN extends Bridge {
|
||||||
|
@Override
|
||||||
|
public List<Direction> possibleDirections() {
|
||||||
|
return List.of(Direction.NORTH);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<Connector, State> connections(Direction from) {
|
||||||
|
if (isSet(counterpart)) switch (from) {
|
||||||
|
case NORTH:
|
||||||
|
return Map.of(counterpart.connector(),State.UNDEF);
|
||||||
|
default:
|
||||||
|
}
|
||||||
|
return super.connections(from);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Connector connector() {
|
||||||
|
return new Connector(x, y-1, Direction.SOUTH);
|
||||||
|
}
|
||||||
|
}
|
||||||
30
src/main/java/de/srsoftware/web4rail/tiles/BridgeS.java
Normal file
30
src/main/java/de/srsoftware/web4rail/tiles/BridgeS.java
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
package de.srsoftware.web4rail.tiles;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import de.srsoftware.web4rail.Connector;
|
||||||
|
import de.srsoftware.web4rail.Plan.Direction;
|
||||||
|
import de.srsoftware.web4rail.tiles.Turnout.State;
|
||||||
|
|
||||||
|
public class BridgeS extends Bridge {
|
||||||
|
@Override
|
||||||
|
public List<Direction> possibleDirections() {
|
||||||
|
return List.of(Direction.SOUTH);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<Connector, State> connections(Direction from) {
|
||||||
|
if (isSet(counterpart)) switch (from) {
|
||||||
|
case SOUTH:
|
||||||
|
return Map.of(counterpart.connector(),State.UNDEF);
|
||||||
|
default:
|
||||||
|
}
|
||||||
|
return super.connections(from);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Connector connector() {
|
||||||
|
return new Connector(x, y+1, Direction.NORTH);
|
||||||
|
}
|
||||||
|
}
|
||||||
31
src/main/java/de/srsoftware/web4rail/tiles/BridgeW.java
Normal file
31
src/main/java/de/srsoftware/web4rail/tiles/BridgeW.java
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
package de.srsoftware.web4rail.tiles;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import de.srsoftware.web4rail.Connector;
|
||||||
|
import de.srsoftware.web4rail.Plan.Direction;
|
||||||
|
import de.srsoftware.web4rail.tiles.Turnout.State;
|
||||||
|
|
||||||
|
public class BridgeW extends Bridge {
|
||||||
|
@Override
|
||||||
|
public List<Direction> possibleDirections() {
|
||||||
|
return List.of(Direction.WEST);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<Connector, State> connections(Direction from) {
|
||||||
|
if (isSet(counterpart))
|
||||||
|
switch (from) {
|
||||||
|
case WEST:
|
||||||
|
return Map.of(counterpart.connector(), State.UNDEF);
|
||||||
|
default:
|
||||||
|
}
|
||||||
|
return super.connections(from);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Connector connector() {
|
||||||
|
return new Connector(x - 1, y, Direction.EAST);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user