Browse Source

renamed turnouts, worked on route discovery

lookup-tables
Stephan Richter 5 years ago
parent
commit
3c5d1161a7
  1. 2
      resources/css/style.css
  2. 0
      resources/svg/TurnoutLE.svg
  3. 0
      resources/svg/TurnoutLN.svg
  4. 0
      resources/svg/TurnoutLS.svg
  5. 0
      resources/svg/TurnoutLW.svg
  6. 0
      resources/svg/TurnoutRE.svg
  7. 0
      resources/svg/TurnoutRN.svg
  8. 0
      resources/svg/TurnoutRS.svg
  9. 0
      resources/svg/TurnoutRW.svg
  10. 69
      src/main/java/de/srsoftware/web4rail/Plan.java
  11. 36
      src/main/java/de/srsoftware/web4rail/Route.java
  12. 13
      src/main/java/de/srsoftware/web4rail/tiles/ContactH.java
  13. 13
      src/main/java/de/srsoftware/web4rail/tiles/ContactV.java
  14. 4
      src/main/java/de/srsoftware/web4rail/tiles/Cross.java
  15. 20
      src/main/java/de/srsoftware/web4rail/tiles/CrossH.java
  16. 4
      src/main/java/de/srsoftware/web4rail/tiles/CrossV.java
  17. 13
      src/main/java/de/srsoftware/web4rail/tiles/DiagES.java
  18. 13
      src/main/java/de/srsoftware/web4rail/tiles/DiagNE.java
  19. 13
      src/main/java/de/srsoftware/web4rail/tiles/DiagSW.java
  20. 13
      src/main/java/de/srsoftware/web4rail/tiles/DiagWN.java
  21. 5
      src/main/java/de/srsoftware/web4rail/tiles/Shadow.java
  22. 13
      src/main/java/de/srsoftware/web4rail/tiles/SignalE.java
  23. 13
      src/main/java/de/srsoftware/web4rail/tiles/SignalN.java
  24. 13
      src/main/java/de/srsoftware/web4rail/tiles/SignalS.java
  25. 13
      src/main/java/de/srsoftware/web4rail/tiles/SignalW.java
  26. 13
      src/main/java/de/srsoftware/web4rail/tiles/StraightH.java
  27. 13
      src/main/java/de/srsoftware/web4rail/tiles/StraightV.java
  28. 4
      src/main/java/de/srsoftware/web4rail/tiles/Tile.java
  29. 4
      src/main/java/de/srsoftware/web4rail/tiles/Turnout.java
  30. 23
      src/main/java/de/srsoftware/web4rail/tiles/TurnoutEN.java
  31. 23
      src/main/java/de/srsoftware/web4rail/tiles/TurnoutES.java
  32. 24
      src/main/java/de/srsoftware/web4rail/tiles/TurnoutLE.java
  33. 24
      src/main/java/de/srsoftware/web4rail/tiles/TurnoutLN.java
  34. 24
      src/main/java/de/srsoftware/web4rail/tiles/TurnoutLS.java
  35. 24
      src/main/java/de/srsoftware/web4rail/tiles/TurnoutLW.java
  36. 23
      src/main/java/de/srsoftware/web4rail/tiles/TurnoutNE.java
  37. 23
      src/main/java/de/srsoftware/web4rail/tiles/TurnoutNW.java
  38. 24
      src/main/java/de/srsoftware/web4rail/tiles/TurnoutRE.java
  39. 24
      src/main/java/de/srsoftware/web4rail/tiles/TurnoutRN.java
  40. 24
      src/main/java/de/srsoftware/web4rail/tiles/TurnoutRS.java
  41. 24
      src/main/java/de/srsoftware/web4rail/tiles/TurnoutRW.java
  42. 23
      src/main/java/de/srsoftware/web4rail/tiles/TurnoutSE.java
  43. 23
      src/main/java/de/srsoftware/web4rail/tiles/TurnoutSW.java
  44. 23
      src/main/java/de/srsoftware/web4rail/tiles/TurnoutWN.java
  45. 23
      src/main/java/de/srsoftware/web4rail/tiles/TurnoutWS.java

2
resources/css/style.css

@ -107,7 +107,7 @@ svg circle{ @@ -107,7 +107,7 @@ svg circle{
.window{
position: fixed;
top: 10px;
top: 50%;
bottom: 10px;
left: 10px;
right: 10px;

0
resources/svg/TurnoutES.svg → resources/svg/TurnoutLE.svg

Before

Width:  |  Height:  |  Size: 156 B

After

Width:  |  Height:  |  Size: 156 B

0
resources/svg/TurnoutNE.svg → resources/svg/TurnoutLN.svg

Before

Width:  |  Height:  |  Size: 152 B

After

Width:  |  Height:  |  Size: 152 B

0
resources/svg/TurnoutSW.svg → resources/svg/TurnoutLS.svg

Before

Width:  |  Height:  |  Size: 152 B

After

Width:  |  Height:  |  Size: 152 B

0
resources/svg/TurnoutWN.svg → resources/svg/TurnoutLW.svg

Before

Width:  |  Height:  |  Size: 148 B

After

Width:  |  Height:  |  Size: 148 B

0
resources/svg/TurnoutEN.svg → resources/svg/TurnoutRE.svg

Before

Width:  |  Height:  |  Size: 152 B

After

Width:  |  Height:  |  Size: 152 B

0
resources/svg/TurnoutNW.svg → resources/svg/TurnoutRN.svg

Before

Width:  |  Height:  |  Size: 148 B

After

Width:  |  Height:  |  Size: 148 B

0
resources/svg/TurnoutSE.svg → resources/svg/TurnoutRS.svg

Before

Width:  |  Height:  |  Size: 156 B

After

Width:  |  Height:  |  Size: 156 B

0
resources/svg/TurnoutWS.svg → resources/svg/TurnoutRW.svg

Before

Width:  |  Height:  |  Size: 152 B

After

Width:  |  Height:  |  Size: 152 B

69
src/main/java/de/srsoftware/web4rail/Plan.java

@ -12,6 +12,7 @@ import java.util.Collection; @@ -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; @@ -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; @@ -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 { @@ -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 { @@ -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 { @@ -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 { @@ -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));

36
src/main/java/de/srsoftware/web4rail/Route.java

@ -1,38 +1,47 @@ @@ -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);
if (tile instanceof Signal) {
Signal signal = (Signal) tile;
if (signal.isAffectedFrom(direrction)) signals.add(signal);
}
return tile;
}
public Route addSignal(Signal signal) {
signals.add(signal);
return this;
}
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 { @@ -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 { @@ -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 { @@ -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);
}
}

13
src/main/java/de/srsoftware/web4rail/tiles/ContactH.java

@ -1,21 +1,22 @@ @@ -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<>();
}
}
}

13
src/main/java/de/srsoftware/web4rail/tiles/ContactV.java

@ -1,22 +1,23 @@ @@ -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<>();
}
}
}

4
src/main/java/de/srsoftware/web4rail/tiles/Cross.java

@ -1,10 +1,10 @@ @@ -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);
}

20
src/main/java/de/srsoftware/web4rail/tiles/CrossH.java

@ -1,25 +1,25 @@ @@ -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{ @@ -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<>();
}
}

4
src/main/java/de/srsoftware/web4rail/tiles/CrossV.java

@ -1,12 +1,12 @@ @@ -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{ @@ -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;
}

13
src/main/java/de/srsoftware/web4rail/tiles/DiagES.java

@ -1,22 +1,23 @@ @@ -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<>();
}
}
}

13
src/main/java/de/srsoftware/web4rail/tiles/DiagNE.java

@ -1,22 +1,23 @@ @@ -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<>();
}
}
}

13
src/main/java/de/srsoftware/web4rail/tiles/DiagSW.java

@ -1,21 +1,22 @@ @@ -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<>();
}
}
}

13
src/main/java/de/srsoftware/web4rail/tiles/DiagWN.java

@ -1,22 +1,23 @@ @@ -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<>();
}
}
}

5
src/main/java/de/srsoftware/web4rail/tiles/Shadow.java

@ -1,16 +1,17 @@ @@ -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);

13
src/main/java/de/srsoftware/web4rail/tiles/SignalE.java

@ -1,21 +1,22 @@ @@ -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<>();
}
}

13
src/main/java/de/srsoftware/web4rail/tiles/SignalN.java

@ -1,22 +1,23 @@ @@ -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<>();
}
}

13
src/main/java/de/srsoftware/web4rail/tiles/SignalS.java

@ -1,22 +1,23 @@ @@ -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<>();
}
}

13
src/main/java/de/srsoftware/web4rail/tiles/SignalW.java

@ -1,21 +1,22 @@ @@ -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<>();
}
}

13
src/main/java/de/srsoftware/web4rail/tiles/StraightH.java

@ -1,22 +1,23 @@ @@ -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<>();
}
}

13
src/main/java/de/srsoftware/web4rail/tiles/StraightV.java

@ -1,22 +1,23 @@ @@ -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<>();
}
}

4
src/main/java/de/srsoftware/web4rail/tiles/Tile.java

@ -42,8 +42,8 @@ public abstract class Tile { @@ -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<>();
}

4
src/main/java/de/srsoftware/web4rail/tiles/Turnout.java

@ -1,7 +1,9 @@ @@ -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() {

23
src/main/java/de/srsoftware/web4rail/tiles/TurnoutEN.java

@ -1,23 +0,0 @@ @@ -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<>();
}
}
}

23
src/main/java/de/srsoftware/web4rail/tiles/TurnoutES.java

@ -1,23 +0,0 @@ @@ -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

@ -0,0 +1,24 @@ @@ -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

@ -0,0 +1,24 @@ @@ -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

@ -0,0 +1,24 @@ @@ -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

@ -0,0 +1,24 @@ @@ -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<>();
}
}
}

23
src/main/java/de/srsoftware/web4rail/tiles/TurnoutNE.java

@ -1,23 +0,0 @@ @@ -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<>();
}
}
}

23
src/main/java/de/srsoftware/web4rail/tiles/TurnoutNW.java

@ -1,23 +0,0 @@ @@ -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

@ -0,0 +1,24 @@ @@ -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

@ -0,0 +1,24 @@ @@ -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

@ -0,0 +1,24 @@ @@ -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

@ -0,0 +1,24 @@ @@ -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<>();
}
}
}

23
src/main/java/de/srsoftware/web4rail/tiles/TurnoutSE.java

@ -1,23 +0,0 @@ @@ -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<>();
}
}
}

23
src/main/java/de/srsoftware/web4rail/tiles/TurnoutSW.java

@ -1,23 +0,0 @@ @@ -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<>();
}
}
}

23
src/main/java/de/srsoftware/web4rail/tiles/TurnoutWN.java

@ -1,23 +0,0 @@ @@ -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<>();
}
}
}

23
src/main/java/de/srsoftware/web4rail/tiles/TurnoutWS.java

@ -1,23 +0,0 @@ @@ -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<>();
}
}
}
Loading…
Cancel
Save