renamed turnouts, worked on route discovery
@@ -107,7 +107,7 @@ svg circle{
|
||||
|
||||
.window{
|
||||
position: fixed;
|
||||
top: 10px;
|
||||
top: 50%;
|
||||
bottom: 10px;
|
||||
left: 10px;
|
||||
right: 10px;
|
||||
|
||||
|
Before Width: | Height: | Size: 156 B After Width: | Height: | Size: 156 B |
|
Before Width: | Height: | Size: 152 B After Width: | Height: | Size: 152 B |
|
Before Width: | Height: | Size: 152 B After Width: | Height: | Size: 152 B |
|
Before Width: | Height: | Size: 148 B After Width: | Height: | Size: 148 B |
|
Before Width: | Height: | Size: 152 B After Width: | Height: | Size: 152 B |
|
Before Width: | Height: | Size: 148 B After Width: | Height: | Size: 148 B |
|
Before Width: | Height: | Size: 156 B After Width: | Height: | Size: 156 B |
|
Before Width: | Height: | Size: 152 B After Width: | Height: | Size: 152 B |
@@ -12,6 +12,7 @@ import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Vector;
|
||||
|
||||
@@ -38,7 +39,6 @@ import de.srsoftware.web4rail.tiles.EndS;
|
||||
import de.srsoftware.web4rail.tiles.EndW;
|
||||
import de.srsoftware.web4rail.tiles.Eraser;
|
||||
import de.srsoftware.web4rail.tiles.Shadow;
|
||||
import de.srsoftware.web4rail.tiles.Signal;
|
||||
import de.srsoftware.web4rail.tiles.SignalE;
|
||||
import de.srsoftware.web4rail.tiles.SignalN;
|
||||
import de.srsoftware.web4rail.tiles.SignalS;
|
||||
@@ -46,14 +46,15 @@ import de.srsoftware.web4rail.tiles.SignalW;
|
||||
import de.srsoftware.web4rail.tiles.StraightH;
|
||||
import de.srsoftware.web4rail.tiles.StraightV;
|
||||
import de.srsoftware.web4rail.tiles.Tile;
|
||||
import de.srsoftware.web4rail.tiles.TurnoutEN;
|
||||
import de.srsoftware.web4rail.tiles.TurnoutES;
|
||||
import de.srsoftware.web4rail.tiles.TurnoutNE;
|
||||
import de.srsoftware.web4rail.tiles.TurnoutNW;
|
||||
import de.srsoftware.web4rail.tiles.TurnoutSE;
|
||||
import de.srsoftware.web4rail.tiles.TurnoutSW;
|
||||
import de.srsoftware.web4rail.tiles.TurnoutWN;
|
||||
import de.srsoftware.web4rail.tiles.TurnoutWS;
|
||||
import de.srsoftware.web4rail.tiles.Turnout.State;
|
||||
import de.srsoftware.web4rail.tiles.TurnoutLE;
|
||||
import de.srsoftware.web4rail.tiles.TurnoutLN;
|
||||
import de.srsoftware.web4rail.tiles.TurnoutLS;
|
||||
import de.srsoftware.web4rail.tiles.TurnoutLW;
|
||||
import de.srsoftware.web4rail.tiles.TurnoutRE;
|
||||
import de.srsoftware.web4rail.tiles.TurnoutRN;
|
||||
import de.srsoftware.web4rail.tiles.TurnoutRS;
|
||||
import de.srsoftware.web4rail.tiles.TurnoutRW;
|
||||
|
||||
public class Plan {
|
||||
public enum Direction{
|
||||
@@ -102,6 +103,7 @@ public class Plan {
|
||||
private String analyze() {
|
||||
Vector<Route> routes = new Vector<Route>();
|
||||
for (Block block : blocks) {
|
||||
block.routes().clear();
|
||||
for (Connector con : block.startPoints()) routes.addAll(follow(new Route().start(block),con));
|
||||
}
|
||||
this.routes.clear();
|
||||
@@ -112,19 +114,28 @@ public class Plan {
|
||||
return t("Found {} routes.",routes.size());
|
||||
}
|
||||
|
||||
private Collection<Route> follow(Route route, Connector con) {
|
||||
Tile tile = get(con.x,con.y);
|
||||
private Collection<Route> follow(Route route, Connector connector) {
|
||||
Tile tile = get(connector.x,connector.y);
|
||||
Vector<Route> results = new Vector<>();
|
||||
if (tile == null) return results;
|
||||
Tile added = route.add(tile instanceof Shadow ? ((Shadow)tile).overlay() : tile);
|
||||
if (added instanceof Signal) {
|
||||
Signal signal = (Signal) added;
|
||||
if (signal.isAffectedFrom(con.from)) route.addSignal(signal);
|
||||
}
|
||||
if (added instanceof Block) return List.of(route);
|
||||
List<Connector> connectors = tile.connections(con.from);
|
||||
Tile addedTile = route.add(tile,connector.from);
|
||||
if (addedTile instanceof Block) return List.of(route);
|
||||
Map<Connector, State> connectors = tile.connections(connector.from);
|
||||
List<Route>routes = route.multiply(connectors.size());
|
||||
for (int i=0; i<connectors.size(); i++) results.addAll(follow(routes.get(i),connectors.get(i)));
|
||||
LOG.debug("{}",tile);
|
||||
if (connectors.size()>1) LOG.debug("SPLITTING @ {}",tile);
|
||||
|
||||
for (Entry<Connector, State> entry: connectors.entrySet()) {
|
||||
route = routes.remove(0);
|
||||
connector = entry.getKey();
|
||||
State state = entry.getValue();
|
||||
route.setLast(state);
|
||||
if (connectors.size()>1) {
|
||||
LOG.debug("RESUMING from {}",tile);
|
||||
}
|
||||
results.addAll(follow(route,connector));
|
||||
}
|
||||
|
||||
return results;
|
||||
}
|
||||
|
||||
@@ -267,7 +278,9 @@ public class Plan {
|
||||
}
|
||||
return t("Unknown action: {}",action);
|
||||
} catch (Exception e) {
|
||||
return e.getMessage();
|
||||
String msg = e.getMessage();
|
||||
if (msg == null || msg.isEmpty()) msg = t("An unknown error occured!");
|
||||
return msg;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -363,14 +376,14 @@ public class Plan {
|
||||
tiles.append(new EndW().tag(null));
|
||||
tiles.append(new EndN().tag(null));
|
||||
tiles.append(new EndS().tag(null));
|
||||
tiles.append(new TurnoutSW().tag(null));
|
||||
tiles.append(new TurnoutSE().tag(null));
|
||||
tiles.append(new TurnoutNW().tag(null));
|
||||
tiles.append(new TurnoutNE().tag(null));
|
||||
tiles.append(new TurnoutES().tag(null));
|
||||
tiles.append(new TurnoutEN().tag(null));
|
||||
tiles.append(new TurnoutWS().tag(null));
|
||||
tiles.append(new TurnoutWN().tag(null));
|
||||
tiles.append(new TurnoutRS().tag(null));
|
||||
tiles.append(new TurnoutRN().tag(null));
|
||||
tiles.append(new TurnoutRW().tag(null));
|
||||
tiles.append(new TurnoutRE().tag(null));
|
||||
tiles.append(new TurnoutLN().tag(null));
|
||||
tiles.append(new TurnoutLS().tag(null));
|
||||
tiles.append(new TurnoutLW().tag(null));
|
||||
tiles.append(new TurnoutLE().tag(null));
|
||||
tiles.append(new CrossH().tag(null));
|
||||
tiles.append(new CrossV().tag(null));
|
||||
tiles.append(new Eraser().tag(null));
|
||||
|
||||
@@ -1,38 +1,47 @@
|
||||
package de.srsoftware.web4rail;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Vector;
|
||||
|
||||
import de.keawe.tools.translations.Translation;
|
||||
import de.srsoftware.tools.Tag;
|
||||
import de.srsoftware.web4rail.Plan.Direction;
|
||||
import de.srsoftware.web4rail.tiles.Block;
|
||||
import de.srsoftware.web4rail.tiles.Contact;
|
||||
import de.srsoftware.web4rail.tiles.Shadow;
|
||||
import de.srsoftware.web4rail.tiles.Signal;
|
||||
import de.srsoftware.web4rail.tiles.Tile;
|
||||
import de.srsoftware.web4rail.tiles.Turnout;
|
||||
import de.srsoftware.web4rail.tiles.Turnout.State;
|
||||
|
||||
public class Route {
|
||||
|
||||
private Vector<Tile> path;
|
||||
private Vector<Signal> signals;
|
||||
private Vector<Contact> contacts;
|
||||
private HashMap<Turnout,Turnout.State> turnouts;
|
||||
private String id;
|
||||
private String name;
|
||||
|
||||
public Tile add(Tile tile) {
|
||||
public Tile add(Tile tile, Direction direrction) {
|
||||
if (tile instanceof Shadow) tile = ((Shadow)tile).overlay();
|
||||
path.add(tile);
|
||||
if (tile instanceof Contact) contacts.add((Contact) tile);
|
||||
return tile;
|
||||
}
|
||||
if (tile instanceof Signal) {
|
||||
Signal signal = (Signal) tile;
|
||||
if (signal.isAffectedFrom(direrction)) signals.add(signal);
|
||||
}
|
||||
|
||||
public Route addSignal(Signal signal) {
|
||||
signals.add(signal);
|
||||
return this;
|
||||
return tile;
|
||||
}
|
||||
|
||||
protected Route clone() {
|
||||
Route clone = new Route();
|
||||
clone.contacts = new Vector<Contact>(contacts);
|
||||
clone.signals = new Vector<Signal>(signals);
|
||||
clone.turnouts = new HashMap<>(turnouts);
|
||||
clone.path = new Vector<>(path);
|
||||
return clone;
|
||||
}
|
||||
@@ -68,14 +77,22 @@ public class Route {
|
||||
|
||||
public Window properties() {
|
||||
Window win = new Window("route-properties",t("Properties of {})",this));
|
||||
|
||||
new Tag("h4").content(t("Signals")).addTo(win);
|
||||
Tag list = new Tag("ul");
|
||||
for (Signal s : signals) new Tag("li").content(s.toString()).addTo(list);
|
||||
list.addTo(win);
|
||||
|
||||
new Tag("h4").content(t("Contacts")).addTo(win);
|
||||
list = new Tag("ul");
|
||||
for (Contact c : contacts) new Tag("li").content(c.toString()).addTo(list);
|
||||
list.addTo(win);
|
||||
|
||||
new Tag("h4").content(t("Turnouts")).addTo(win);
|
||||
list = new Tag("ul");
|
||||
for (Entry<Turnout, State> entry : turnouts.entrySet()) new Tag("li").content(entry.getKey()+" : "+entry.getValue()).addTo(list);
|
||||
list.addTo(win);
|
||||
|
||||
return win;
|
||||
}
|
||||
|
||||
@@ -83,6 +100,7 @@ public class Route {
|
||||
contacts = new Vector<Contact>();
|
||||
signals = new Vector<Signal>();
|
||||
path = new Vector<Tile>();
|
||||
turnouts = new HashMap<>();
|
||||
path.add(block);
|
||||
return this;
|
||||
}
|
||||
@@ -99,4 +117,10 @@ public class Route {
|
||||
protected static String t(String txt, Object...fills) {
|
||||
return Translation.get(Application.class, txt, fills);
|
||||
}
|
||||
|
||||
public void setLast(State state) {
|
||||
if (state == null || state == State.UNDEF) return;
|
||||
Tile lastTile = path.lastElement();
|
||||
if (lastTile instanceof Turnout) turnouts.put((Turnout) lastTile,state);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,21 +1,22 @@
|
||||
package de.srsoftware.web4rail.tiles;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Vector;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import de.srsoftware.web4rail.Connector;
|
||||
import de.srsoftware.web4rail.Plan.Direction;
|
||||
import de.srsoftware.web4rail.tiles.Turnout.State;
|
||||
|
||||
public class ContactH extends Contact {
|
||||
@Override
|
||||
public List<Connector> connections(Direction from) {
|
||||
public Map<Connector, State> connections(Direction from) {
|
||||
switch (from) {
|
||||
case WEST:
|
||||
return List.of(new Connector(x+1,y,from));
|
||||
return Map.of(new Connector(x+1,y,from),State.UNDEF);
|
||||
case EAST:
|
||||
return List.of(new Connector(x-1,y,from));
|
||||
return Map.of(new Connector(x-1,y,from),State.UNDEF);
|
||||
default:
|
||||
return new Vector<>();
|
||||
return new HashMap<>();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,22 +1,23 @@
|
||||
package de.srsoftware.web4rail.tiles;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Vector;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import de.srsoftware.web4rail.Connector;
|
||||
import de.srsoftware.web4rail.Plan.Direction;
|
||||
import de.srsoftware.web4rail.tiles.Turnout.State;
|
||||
|
||||
public class ContactV extends Contact {
|
||||
|
||||
@Override
|
||||
public List<Connector> connections(Direction from) {
|
||||
public Map<Connector, State> connections(Direction from) {
|
||||
switch (from) {
|
||||
case NORTH:
|
||||
return List.of(new Connector(x,y+1,from));
|
||||
return Map.of(new Connector(x,y+1,from),State.UNDEF);
|
||||
case SOUTH:
|
||||
return List.of(new Connector(x,y-1,from));
|
||||
return Map.of(new Connector(x,y-1,from),State.UNDEF);
|
||||
default:
|
||||
return new Vector<>();
|
||||
return new HashMap<>();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
package de.srsoftware.web4rail.tiles;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import de.srsoftware.web4rail.Connector;
|
||||
import de.srsoftware.web4rail.Plan.Direction;
|
||||
|
||||
public abstract class Cross extends Tile {
|
||||
public abstract List<Connector> offsetConnections(Direction from);
|
||||
public abstract Map<Connector,Turnout.State> offsetConnections(Direction from);
|
||||
}
|
||||
|
||||
@@ -1,25 +1,25 @@
|
||||
package de.srsoftware.web4rail.tiles;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Vector;
|
||||
|
||||
import de.srsoftware.tools.Tag;
|
||||
import de.srsoftware.web4rail.Connector;
|
||||
import de.srsoftware.web4rail.Plan.Direction;
|
||||
import de.srsoftware.web4rail.tiles.Turnout.State;
|
||||
|
||||
public class CrossH extends Cross{
|
||||
|
||||
@Override
|
||||
public List<Connector> connections(Direction from) {
|
||||
public Map<Connector, State> connections(Direction from) {
|
||||
switch (from) {
|
||||
case NORTH:
|
||||
return List.of(new Connector(x+1,y+1,Direction.NORTH));
|
||||
return Map.of(new Connector(x+1,y+1,Direction.NORTH),State.UNDEF);
|
||||
case SOUTH:
|
||||
return List.of(new Connector(x+1,y-1,Direction.SOUTH));
|
||||
return Map.of(new Connector(x+1,y-1,Direction.SOUTH),State.UNDEF);
|
||||
default:
|
||||
return new Vector<>();
|
||||
return new HashMap<>();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,14 +29,14 @@ public class CrossH extends Cross{
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Connector> offsetConnections(Direction from) {
|
||||
public Map<Connector,State> offsetConnections(Direction from) {
|
||||
switch (from) {
|
||||
case NORTH:
|
||||
return List.of(new Connector(x,y+1,Direction.NORTH));
|
||||
return Map.of(new Connector(x,y+1,Direction.NORTH),State.UNDEF);
|
||||
case SOUTH:
|
||||
return List.of(new Connector(x,y-1,Direction.SOUTH));
|
||||
return Map.of(new Connector(x,y-1,Direction.SOUTH),State.UNDEF);
|
||||
default:
|
||||
return new Vector<>();
|
||||
return new HashMap<>();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
package de.srsoftware.web4rail.tiles;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import de.srsoftware.tools.Tag;
|
||||
import de.srsoftware.web4rail.Connector;
|
||||
import de.srsoftware.web4rail.Plan.Direction;
|
||||
import de.srsoftware.web4rail.tiles.Turnout.State;
|
||||
|
||||
public class CrossV extends Cross{
|
||||
|
||||
@@ -16,7 +16,7 @@ public class CrossV extends Cross{
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Connector> offsetConnections(Direction from) {
|
||||
public Map<Connector, State> offsetConnections(Direction from) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,22 +1,23 @@
|
||||
package de.srsoftware.web4rail.tiles;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Vector;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import de.srsoftware.web4rail.Connector;
|
||||
import de.srsoftware.web4rail.Plan.Direction;
|
||||
import de.srsoftware.web4rail.tiles.Turnout.State;
|
||||
|
||||
public class DiagES extends Tile{
|
||||
|
||||
@Override
|
||||
public List<Connector> connections(Direction from) {
|
||||
public Map<Connector, State> connections(Direction from) {
|
||||
switch (from) {
|
||||
case SOUTH:
|
||||
return List.of(new Connector(x+1,y,Direction.WEST));
|
||||
return Map.of(new Connector(x+1,y,Direction.WEST),State.UNDEF);
|
||||
case EAST:
|
||||
return List.of(new Connector(x,y+1,Direction.NORTH));
|
||||
return Map.of(new Connector(x,y+1,Direction.NORTH),State.UNDEF);
|
||||
default:
|
||||
return new Vector<Connector>();
|
||||
return new HashMap<>();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,22 +1,23 @@
|
||||
package de.srsoftware.web4rail.tiles;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Vector;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import de.srsoftware.web4rail.Connector;
|
||||
import de.srsoftware.web4rail.Plan.Direction;
|
||||
import de.srsoftware.web4rail.tiles.Turnout.State;
|
||||
|
||||
public class DiagNE extends Tile{
|
||||
|
||||
@Override
|
||||
public List<Connector> connections(Direction from) {
|
||||
public Map<Connector, State> connections(Direction from) {
|
||||
switch (from) {
|
||||
case NORTH:
|
||||
return List.of(new Connector(x+1,y,Direction.WEST));
|
||||
return Map.of(new Connector(x+1,y,Direction.WEST),State.UNDEF);
|
||||
case EAST:
|
||||
return List.of(new Connector(x,y-1,Direction.SOUTH));
|
||||
return Map.of(new Connector(x,y-1,Direction.SOUTH),State.UNDEF);
|
||||
default:
|
||||
return new Vector<>();
|
||||
return new HashMap<>();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,21 +1,22 @@
|
||||
package de.srsoftware.web4rail.tiles;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Vector;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import de.srsoftware.web4rail.Connector;
|
||||
import de.srsoftware.web4rail.Plan.Direction;
|
||||
import de.srsoftware.web4rail.tiles.Turnout.State;
|
||||
|
||||
public class DiagSW extends Tile{
|
||||
@Override
|
||||
public List<Connector> connections(Direction from) {
|
||||
public Map<Connector, State> connections(Direction from) {
|
||||
switch (from) {
|
||||
case SOUTH:
|
||||
return List.of(new Connector(x-1,y,Direction.EAST));
|
||||
return Map.of(new Connector(x-1,y,Direction.EAST),State.UNDEF);
|
||||
case WEST:
|
||||
return List.of(new Connector(x,y+1,Direction.NORTH));
|
||||
return Map.of(new Connector(x,y+1,Direction.NORTH),State.UNDEF);
|
||||
default:
|
||||
return new Vector<>();
|
||||
return new HashMap<>();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,22 +1,23 @@
|
||||
package de.srsoftware.web4rail.tiles;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Vector;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import de.srsoftware.web4rail.Connector;
|
||||
import de.srsoftware.web4rail.Plan.Direction;
|
||||
import de.srsoftware.web4rail.tiles.Turnout.State;
|
||||
|
||||
public class DiagWN extends Tile{
|
||||
|
||||
@Override
|
||||
public List<Connector> connections(Direction from) {
|
||||
public Map<Connector, State> connections(Direction from) {
|
||||
switch (from) {
|
||||
case NORTH:
|
||||
return List.of(new Connector(x-1,y,Direction.EAST));
|
||||
return Map.of(new Connector(x-1,y,Direction.EAST),State.UNDEF);
|
||||
case WEST:
|
||||
return List.of(new Connector(x,y-1,Direction.SOUTH));
|
||||
return Map.of(new Connector(x,y-1,Direction.SOUTH),State.UNDEF);
|
||||
default:
|
||||
return new Vector<>();
|
||||
return new HashMap<>();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,16 +1,17 @@
|
||||
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 Shadow extends Tile{
|
||||
|
||||
private Tile overlay;
|
||||
|
||||
@Override
|
||||
public List<Connector> connections(Direction from) {
|
||||
public Map<Connector, State> connections(Direction from) {
|
||||
if (overlay instanceof StretchableTile) return overlay.connections(from);
|
||||
if (overlay instanceof Cross) return ((Cross)overlay).offsetConnections(from);
|
||||
return super.connections(from);
|
||||
|
||||
@@ -1,21 +1,22 @@
|
||||
package de.srsoftware.web4rail.tiles;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Vector;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import de.srsoftware.web4rail.Connector;
|
||||
import de.srsoftware.web4rail.Plan.Direction;
|
||||
import de.srsoftware.web4rail.tiles.Turnout.State;
|
||||
|
||||
public class SignalE extends Signal{
|
||||
@Override
|
||||
public List<Connector> connections(Direction from) {
|
||||
public Map<Connector, State> connections(Direction from) {
|
||||
switch (from) {
|
||||
case WEST:
|
||||
return List.of(new Connector(x+1,y,Direction.WEST));
|
||||
return Map.of(new Connector(x+1,y,Direction.WEST),State.UNDEF);
|
||||
case EAST:
|
||||
return List.of(new Connector(x-1,y,Direction.EAST));
|
||||
return Map.of(new Connector(x-1,y,Direction.EAST),State.UNDEF);
|
||||
default:
|
||||
return new Vector<>();
|
||||
return new HashMap<>();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,22 +1,23 @@
|
||||
package de.srsoftware.web4rail.tiles;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Vector;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import de.srsoftware.web4rail.Connector;
|
||||
import de.srsoftware.web4rail.Plan.Direction;
|
||||
import de.srsoftware.web4rail.tiles.Turnout.State;
|
||||
|
||||
public class SignalN extends Signal {
|
||||
|
||||
@Override
|
||||
public List<Connector> connections(Direction from) {
|
||||
public Map<Connector, State> connections(Direction from) {
|
||||
switch (from) {
|
||||
case NORTH:
|
||||
return List.of(new Connector(x,y+1,Direction.NORTH));
|
||||
return Map.of(new Connector(x,y+1,Direction.NORTH),State.UNDEF);
|
||||
case SOUTH:
|
||||
return List.of(new Connector(x,y-1,Direction.SOUTH));
|
||||
return Map.of(new Connector(x,y-1,Direction.SOUTH),State.UNDEF);
|
||||
default:
|
||||
return new Vector<>();
|
||||
return new HashMap<>();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,22 +1,23 @@
|
||||
package de.srsoftware.web4rail.tiles;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Vector;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import de.srsoftware.web4rail.Connector;
|
||||
import de.srsoftware.web4rail.Plan.Direction;
|
||||
import de.srsoftware.web4rail.tiles.Turnout.State;
|
||||
|
||||
public class SignalS extends Signal{
|
||||
|
||||
@Override
|
||||
public List<Connector> connections(Direction from) {
|
||||
public Map<Connector, State> connections(Direction from) {
|
||||
switch (from) {
|
||||
case NORTH:
|
||||
return List.of(new Connector(x,y+1,Direction.NORTH));
|
||||
return Map.of(new Connector(x,y+1,Direction.NORTH),State.UNDEF);
|
||||
case SOUTH:
|
||||
return List.of(new Connector(x,y-1,Direction.SOUTH));
|
||||
return Map.of(new Connector(x,y-1,Direction.SOUTH),State.UNDEF);
|
||||
default:
|
||||
return new Vector<>();
|
||||
return new HashMap<>();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,21 +1,22 @@
|
||||
package de.srsoftware.web4rail.tiles;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Vector;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import de.srsoftware.web4rail.Connector;
|
||||
import de.srsoftware.web4rail.Plan.Direction;
|
||||
import de.srsoftware.web4rail.tiles.Turnout.State;
|
||||
|
||||
public class SignalW extends Signal{
|
||||
@Override
|
||||
public List<Connector> connections(Direction from) {
|
||||
public Map<Connector, State> connections(Direction from) {
|
||||
switch (from) {
|
||||
case WEST:
|
||||
return List.of(new Connector(x+1,y,Direction.WEST));
|
||||
return Map.of(new Connector(x+1,y,Direction.WEST),State.UNDEF);
|
||||
case EAST:
|
||||
return List.of(new Connector(x-1,y,Direction.EAST));
|
||||
return Map.of(new Connector(x-1,y,Direction.EAST),State.UNDEF);
|
||||
default:
|
||||
return new Vector<>();
|
||||
return new HashMap<>();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,22 +1,23 @@
|
||||
package de.srsoftware.web4rail.tiles;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Vector;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import de.srsoftware.web4rail.Connector;
|
||||
import de.srsoftware.web4rail.Plan.Direction;
|
||||
import de.srsoftware.web4rail.tiles.Turnout.State;
|
||||
|
||||
public class StraightH extends StretchableTile{
|
||||
|
||||
@Override
|
||||
public List<Connector> connections(Direction from) {
|
||||
public Map<Connector, State> connections(Direction from) {
|
||||
switch (from) {
|
||||
case WEST:
|
||||
return List.of(new Connector(x+len(),y,Direction.WEST));
|
||||
return Map.of(new Connector(x+len(),y,Direction.WEST),State.UNDEF);
|
||||
case EAST:
|
||||
return List.of(new Connector(x-1,y,Direction.EAST));
|
||||
return Map.of(new Connector(x-1,y,Direction.EAST),State.UNDEF);
|
||||
default:
|
||||
return new Vector<>();
|
||||
return new HashMap<>();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,22 +1,23 @@
|
||||
package de.srsoftware.web4rail.tiles;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Vector;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import de.srsoftware.web4rail.Connector;
|
||||
import de.srsoftware.web4rail.Plan.Direction;
|
||||
import de.srsoftware.web4rail.tiles.Turnout.State;
|
||||
|
||||
public class StraightV extends StretchableTile{
|
||||
|
||||
@Override
|
||||
public List<Connector> connections(Direction from) {
|
||||
public Map<Connector, State> connections(Direction from) {
|
||||
switch (from) {
|
||||
case NORTH:
|
||||
return List.of(new Connector(x,y+height(),Direction.NORTH));
|
||||
return Map.of(new Connector(x,y+height(),Direction.NORTH),State.UNDEF);
|
||||
case SOUTH:
|
||||
return List.of(new Connector(x,y-1,Direction.SOUTH));
|
||||
return Map.of(new Connector(x,y-1,Direction.SOUTH),State.UNDEF);
|
||||
default:
|
||||
return new Vector<>();
|
||||
return new HashMap<>();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -42,8 +42,8 @@ public abstract class Tile {
|
||||
return new JSONObject();
|
||||
}
|
||||
|
||||
public List<Connector> connections(Direction from){
|
||||
return new Vector<>();
|
||||
public Map<Connector,Turnout.State> connections(Direction from){
|
||||
return new HashMap<>();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
package de.srsoftware.web4rail.tiles;
|
||||
|
||||
public abstract class Turnout extends Tile {
|
||||
|
||||
public enum State{
|
||||
LEFT,STRAIGHT,RIGHT,UNDEF;
|
||||
}
|
||||
private boolean straight = true;
|
||||
|
||||
public boolean toggle() {
|
||||
|
||||
@@ -1,23 +0,0 @@
|
||||
package de.srsoftware.web4rail.tiles;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Vector;
|
||||
|
||||
import de.srsoftware.web4rail.Connector;
|
||||
import de.srsoftware.web4rail.Plan.Direction;
|
||||
|
||||
public class TurnoutEN extends Turnout{
|
||||
|
||||
@Override
|
||||
public List<Connector> connections(Direction from) {
|
||||
switch (from) {
|
||||
case EAST:
|
||||
return List.of(new Connector(x,y-1,Direction.SOUTH),new Connector(x-1, y, Direction.EAST));
|
||||
case NORTH:
|
||||
case WEST:
|
||||
return List.of(new Connector(x+1,y,Direction.WEST));
|
||||
default:
|
||||
return new Vector<>();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
package de.srsoftware.web4rail.tiles;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Vector;
|
||||
|
||||
import de.srsoftware.web4rail.Connector;
|
||||
import de.srsoftware.web4rail.Plan.Direction;
|
||||
|
||||
public class TurnoutES extends Turnout{
|
||||
|
||||
@Override
|
||||
public List<Connector> connections(Direction from) {
|
||||
switch (from) {
|
||||
case EAST:
|
||||
return List.of(new Connector(x,y+1,Direction.NORTH),new Connector(x-1, y, Direction.EAST));
|
||||
case SOUTH:
|
||||
case WEST:
|
||||
return List.of(new Connector(x+1,y,Direction.WEST));
|
||||
default:
|
||||
return new Vector<>();
|
||||
}
|
||||
}
|
||||
}
|
||||
24
src/main/java/de/srsoftware/web4rail/tiles/TurnoutLE.java
Normal file
@@ -0,0 +1,24 @@
|
||||
package de.srsoftware.web4rail.tiles;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import de.srsoftware.web4rail.Connector;
|
||||
import de.srsoftware.web4rail.Plan.Direction;
|
||||
|
||||
public class TurnoutLE extends Turnout{
|
||||
|
||||
@Override
|
||||
public Map<Connector, State> connections(Direction from) {
|
||||
switch (from) {
|
||||
case EAST:
|
||||
return Map.of(new Connector(x,y+1,Direction.NORTH),State.LEFT,new Connector(x-1, y, Direction.EAST),State.STRAIGHT);
|
||||
case SOUTH:
|
||||
return Map.of(new Connector(x+1,y,Direction.WEST),State.LEFT);
|
||||
case WEST:
|
||||
return Map.of(new Connector(x+1,y,Direction.WEST),State.STRAIGHT);
|
||||
default:
|
||||
return new HashMap<>();
|
||||
}
|
||||
}
|
||||
}
|
||||
24
src/main/java/de/srsoftware/web4rail/tiles/TurnoutLN.java
Normal file
@@ -0,0 +1,24 @@
|
||||
package de.srsoftware.web4rail.tiles;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import de.srsoftware.web4rail.Connector;
|
||||
import de.srsoftware.web4rail.Plan.Direction;
|
||||
|
||||
public class TurnoutLN extends Turnout{
|
||||
|
||||
@Override
|
||||
public Map<Connector, State> connections(Direction from) {
|
||||
switch (from) {
|
||||
case NORTH:
|
||||
return Map.of(new Connector(x,y+1,Direction.NORTH),State.STRAIGHT,new Connector(x+1, y, Direction.WEST),State.LEFT);
|
||||
case SOUTH:
|
||||
return Map.of(new Connector(x,y-1,Direction.SOUTH),State.STRAIGHT);
|
||||
case EAST:
|
||||
return Map.of(new Connector(x,y-1,Direction.SOUTH),State.LEFT);
|
||||
default:
|
||||
return new HashMap<>();
|
||||
}
|
||||
}
|
||||
}
|
||||
24
src/main/java/de/srsoftware/web4rail/tiles/TurnoutLS.java
Normal file
@@ -0,0 +1,24 @@
|
||||
package de.srsoftware.web4rail.tiles;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import de.srsoftware.web4rail.Connector;
|
||||
import de.srsoftware.web4rail.Plan.Direction;
|
||||
|
||||
public class TurnoutLS extends Turnout{
|
||||
|
||||
@Override
|
||||
public Map<Connector, State> connections(Direction from) {
|
||||
switch (from) {
|
||||
case SOUTH:
|
||||
return Map.of(new Connector(x-1,y,Direction.EAST),State.LEFT,new Connector(x, y-1, Direction.SOUTH),State.STRAIGHT);
|
||||
case WEST:
|
||||
return Map.of(new Connector(x,y+1,Direction.NORTH),State.LEFT);
|
||||
case NORTH:
|
||||
return Map.of(new Connector(x,y+1,Direction.NORTH),State.STRAIGHT);
|
||||
default:
|
||||
return new HashMap<>();
|
||||
}
|
||||
}
|
||||
}
|
||||
24
src/main/java/de/srsoftware/web4rail/tiles/TurnoutLW.java
Normal file
@@ -0,0 +1,24 @@
|
||||
package de.srsoftware.web4rail.tiles;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import de.srsoftware.web4rail.Connector;
|
||||
import de.srsoftware.web4rail.Plan.Direction;
|
||||
|
||||
public class TurnoutLW extends Turnout{
|
||||
|
||||
@Override
|
||||
public Map<Connector, State> connections(Direction from) {
|
||||
switch (from) {
|
||||
case WEST:
|
||||
return Map.of(new Connector(x+1,y,Direction.WEST),State.STRAIGHT,new Connector(x, y-1, Direction.SOUTH),State.LEFT);
|
||||
case EAST:
|
||||
return Map.of(new Connector(x-1,y,Direction.EAST),State.STRAIGHT);
|
||||
case NORTH:
|
||||
return Map.of(new Connector(x-1,y,Direction.EAST),State.LEFT);
|
||||
default:
|
||||
return new HashMap<>();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
package de.srsoftware.web4rail.tiles;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Vector;
|
||||
|
||||
import de.srsoftware.web4rail.Connector;
|
||||
import de.srsoftware.web4rail.Plan.Direction;
|
||||
|
||||
public class TurnoutNE extends Turnout{
|
||||
|
||||
@Override
|
||||
public List<Connector> connections(Direction from) {
|
||||
switch (from) {
|
||||
case NORTH:
|
||||
return List.of(new Connector(x,y+1,Direction.NORTH),new Connector(x+1, y, Direction.WEST));
|
||||
case SOUTH:
|
||||
case EAST:
|
||||
return List.of(new Connector(x,y-1,Direction.SOUTH));
|
||||
default:
|
||||
return new Vector<>();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
package de.srsoftware.web4rail.tiles;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Vector;
|
||||
|
||||
import de.srsoftware.web4rail.Connector;
|
||||
import de.srsoftware.web4rail.Plan.Direction;
|
||||
|
||||
public class TurnoutNW extends Turnout{
|
||||
|
||||
@Override
|
||||
public List<Connector> connections(Direction from) {
|
||||
switch (from) {
|
||||
case NORTH:
|
||||
return List.of(new Connector(x-1,y,Direction.EAST),new Connector(x, y+1, Direction.NORTH));
|
||||
case WEST:
|
||||
case SOUTH:
|
||||
return List.of(new Connector(x,y-1,Direction.SOUTH));
|
||||
default:
|
||||
return new Vector<>();
|
||||
}
|
||||
}
|
||||
}
|
||||
24
src/main/java/de/srsoftware/web4rail/tiles/TurnoutRE.java
Normal file
@@ -0,0 +1,24 @@
|
||||
package de.srsoftware.web4rail.tiles;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import de.srsoftware.web4rail.Connector;
|
||||
import de.srsoftware.web4rail.Plan.Direction;
|
||||
|
||||
public class TurnoutRE extends Turnout{
|
||||
|
||||
@Override
|
||||
public Map<Connector, State> connections(Direction from) {
|
||||
switch (from) {
|
||||
case EAST:
|
||||
return Map.of(new Connector(x,y-1,Direction.SOUTH),State.RIGHT,new Connector(x-1, y, Direction.EAST),State.STRAIGHT);
|
||||
case NORTH:
|
||||
return Map.of(new Connector(x+1,y,Direction.WEST),State.RIGHT);
|
||||
case WEST:
|
||||
return Map.of(new Connector(x+1,y,Direction.WEST),State.STRAIGHT);
|
||||
default:
|
||||
return new HashMap<>();
|
||||
}
|
||||
}
|
||||
}
|
||||
24
src/main/java/de/srsoftware/web4rail/tiles/TurnoutRN.java
Normal file
@@ -0,0 +1,24 @@
|
||||
package de.srsoftware.web4rail.tiles;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import de.srsoftware.web4rail.Connector;
|
||||
import de.srsoftware.web4rail.Plan.Direction;
|
||||
|
||||
public class TurnoutRN extends Turnout{
|
||||
|
||||
@Override
|
||||
public Map<Connector, State> connections(Direction from) {
|
||||
switch (from) {
|
||||
case NORTH:
|
||||
return Map.of(new Connector(x-1,y,Direction.EAST),State.RIGHT,new Connector(x, y+1, Direction.NORTH),State.STRAIGHT);
|
||||
case WEST:
|
||||
return Map.of(new Connector(x,y-1,Direction.SOUTH),State.RIGHT);
|
||||
case SOUTH:
|
||||
return Map.of(new Connector(x,y-1,Direction.SOUTH),State.STRAIGHT);
|
||||
default:
|
||||
return new HashMap<>();
|
||||
}
|
||||
}
|
||||
}
|
||||
24
src/main/java/de/srsoftware/web4rail/tiles/TurnoutRS.java
Normal file
@@ -0,0 +1,24 @@
|
||||
package de.srsoftware.web4rail.tiles;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import de.srsoftware.web4rail.Connector;
|
||||
import de.srsoftware.web4rail.Plan.Direction;
|
||||
|
||||
public class TurnoutRS extends Turnout{
|
||||
|
||||
@Override
|
||||
public Map<Connector, State> connections(Direction from) {
|
||||
switch (from) {
|
||||
case SOUTH:
|
||||
return Map.of(new Connector(x+1,y,Direction.WEST),State.RIGHT,new Connector(x, y-1, Direction.SOUTH),State.STRAIGHT);
|
||||
case EAST:
|
||||
return Map.of(new Connector(x,y+1,Direction.NORTH),State.RIGHT);
|
||||
case NORTH:
|
||||
return Map.of(new Connector(x,y+1,Direction.NORTH),State.STRAIGHT);
|
||||
default:
|
||||
return new HashMap<>();
|
||||
}
|
||||
}
|
||||
}
|
||||
24
src/main/java/de/srsoftware/web4rail/tiles/TurnoutRW.java
Normal file
@@ -0,0 +1,24 @@
|
||||
package de.srsoftware.web4rail.tiles;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import de.srsoftware.web4rail.Connector;
|
||||
import de.srsoftware.web4rail.Plan.Direction;
|
||||
|
||||
public class TurnoutRW extends Turnout{
|
||||
|
||||
@Override
|
||||
public Map<Connector, State> connections(Direction from) {
|
||||
switch (from) {
|
||||
case WEST:
|
||||
return Map.of(new Connector(x+1,y,Direction.WEST),State.STRAIGHT,new Connector(x, y+1, Direction.NORTH),State.RIGHT);
|
||||
case EAST:
|
||||
return Map.of(new Connector(x-1,y,Direction.EAST),State.STRAIGHT);
|
||||
case SOUTH:
|
||||
return Map.of(new Connector(x-1,y,Direction.EAST),State.RIGHT);
|
||||
default:
|
||||
return new HashMap<>();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
package de.srsoftware.web4rail.tiles;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Vector;
|
||||
|
||||
import de.srsoftware.web4rail.Connector;
|
||||
import de.srsoftware.web4rail.Plan.Direction;
|
||||
|
||||
public class TurnoutSE extends Turnout{
|
||||
|
||||
@Override
|
||||
public List<Connector> connections(Direction from) {
|
||||
switch (from) {
|
||||
case SOUTH:
|
||||
return List.of(new Connector(x+1,y,Direction.WEST),new Connector(x, y-1, Direction.SOUTH));
|
||||
case EAST:
|
||||
case NORTH:
|
||||
return List.of(new Connector(x,y+1,Direction.NORTH));
|
||||
default:
|
||||
return new Vector<>();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
package de.srsoftware.web4rail.tiles;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Vector;
|
||||
|
||||
import de.srsoftware.web4rail.Connector;
|
||||
import de.srsoftware.web4rail.Plan.Direction;
|
||||
|
||||
public class TurnoutSW extends Turnout{
|
||||
|
||||
@Override
|
||||
public List<Connector> connections(Direction from) {
|
||||
switch (from) {
|
||||
case SOUTH:
|
||||
return List.of(new Connector(x-1,y,Direction.EAST),new Connector(x, y-1, Direction.SOUTH));
|
||||
case WEST:
|
||||
case NORTH:
|
||||
return List.of(new Connector(x,y+1,Direction.NORTH));
|
||||
default:
|
||||
return new Vector<>();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
package de.srsoftware.web4rail.tiles;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Vector;
|
||||
|
||||
import de.srsoftware.web4rail.Connector;
|
||||
import de.srsoftware.web4rail.Plan.Direction;
|
||||
|
||||
public class TurnoutWN extends Turnout{
|
||||
|
||||
@Override
|
||||
public List<Connector> connections(Direction from) {
|
||||
switch (from) {
|
||||
case WEST:
|
||||
return List.of(new Connector(x+1,y,Direction.WEST),new Connector(x, y-1, Direction.SOUTH));
|
||||
case EAST:
|
||||
case NORTH:
|
||||
return List.of(new Connector(x-1,y,Direction.EAST));
|
||||
default:
|
||||
return new Vector<>();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
package de.srsoftware.web4rail.tiles;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Vector;
|
||||
|
||||
import de.srsoftware.web4rail.Connector;
|
||||
import de.srsoftware.web4rail.Plan.Direction;
|
||||
|
||||
public class TurnoutWS extends Turnout{
|
||||
|
||||
@Override
|
||||
public List<Connector> connections(Direction from) {
|
||||
switch (from) {
|
||||
case WEST:
|
||||
return List.of(new Connector(x+1,y,Direction.WEST),new Connector(x, y+1, Direction.NORTH));
|
||||
case EAST:
|
||||
case SOUTH:
|
||||
return List.of(new Connector(x-1,y,Direction.EAST));
|
||||
default:
|
||||
return new Vector<>();
|
||||
}
|
||||
}
|
||||
}
|
||||