implemented bridge
This commit is contained in:
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