renamed turnouts, worked on route discovery

This commit is contained in:
Stephan Richter
2020-09-16 19:29:05 +02:00
parent 4ee75d0a53
commit 3c5d1161a7
45 changed files with 370 additions and 310 deletions

View File

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

View File

Before

Width:  |  Height:  |  Size: 156 B

After

Width:  |  Height:  |  Size: 156 B

View File

Before

Width:  |  Height:  |  Size: 152 B

After

Width:  |  Height:  |  Size: 152 B

View File

Before

Width:  |  Height:  |  Size: 152 B

After

Width:  |  Height:  |  Size: 152 B

View File

Before

Width:  |  Height:  |  Size: 148 B

After

Width:  |  Height:  |  Size: 148 B

View File

Before

Width:  |  Height:  |  Size: 152 B

After

Width:  |  Height:  |  Size: 152 B

View File

Before

Width:  |  Height:  |  Size: 148 B

After

Width:  |  Height:  |  Size: 148 B

View File

Before

Width:  |  Height:  |  Size: 156 B

After

Width:  |  Height:  |  Size: 156 B

View File

Before

Width:  |  Height:  |  Size: 152 B

After

Width:  |  Height:  |  Size: 152 B

View File

@@ -12,6 +12,7 @@ import java.util.Collection;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.Vector; 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.EndW;
import de.srsoftware.web4rail.tiles.Eraser; import de.srsoftware.web4rail.tiles.Eraser;
import de.srsoftware.web4rail.tiles.Shadow; import de.srsoftware.web4rail.tiles.Shadow;
import de.srsoftware.web4rail.tiles.Signal;
import de.srsoftware.web4rail.tiles.SignalE; import de.srsoftware.web4rail.tiles.SignalE;
import de.srsoftware.web4rail.tiles.SignalN; import de.srsoftware.web4rail.tiles.SignalN;
import de.srsoftware.web4rail.tiles.SignalS; 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.StraightH;
import de.srsoftware.web4rail.tiles.StraightV; import de.srsoftware.web4rail.tiles.StraightV;
import de.srsoftware.web4rail.tiles.Tile; import de.srsoftware.web4rail.tiles.Tile;
import de.srsoftware.web4rail.tiles.TurnoutEN; import de.srsoftware.web4rail.tiles.Turnout.State;
import de.srsoftware.web4rail.tiles.TurnoutES; import de.srsoftware.web4rail.tiles.TurnoutLE;
import de.srsoftware.web4rail.tiles.TurnoutNE; import de.srsoftware.web4rail.tiles.TurnoutLN;
import de.srsoftware.web4rail.tiles.TurnoutNW; import de.srsoftware.web4rail.tiles.TurnoutLS;
import de.srsoftware.web4rail.tiles.TurnoutSE; import de.srsoftware.web4rail.tiles.TurnoutLW;
import de.srsoftware.web4rail.tiles.TurnoutSW; import de.srsoftware.web4rail.tiles.TurnoutRE;
import de.srsoftware.web4rail.tiles.TurnoutWN; import de.srsoftware.web4rail.tiles.TurnoutRN;
import de.srsoftware.web4rail.tiles.TurnoutWS; import de.srsoftware.web4rail.tiles.TurnoutRS;
import de.srsoftware.web4rail.tiles.TurnoutRW;
public class Plan { public class Plan {
public enum Direction{ public enum Direction{
@@ -102,6 +103,7 @@ public class Plan {
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) {
block.routes().clear();
for (Connector con : block.startPoints()) routes.addAll(follow(new Route().start(block),con)); for (Connector con : block.startPoints()) routes.addAll(follow(new Route().start(block),con));
} }
this.routes.clear(); this.routes.clear();
@@ -112,19 +114,28 @@ public class Plan {
return t("Found {} routes.",routes.size()); return t("Found {} routes.",routes.size());
} }
private Collection<Route> follow(Route route, Connector con) { private Collection<Route> follow(Route route, Connector connector) {
Tile tile = get(con.x,con.y); Tile tile = get(connector.x,connector.y);
Vector<Route> results = new Vector<>(); Vector<Route> results = new Vector<>();
if (tile == null) return results; if (tile == null) return results;
Tile added = route.add(tile instanceof Shadow ? ((Shadow)tile).overlay() : tile); Tile addedTile = route.add(tile,connector.from);
if (added instanceof Signal) { if (addedTile instanceof Block) return List.of(route);
Signal signal = (Signal) added; Map<Connector, State> connectors = tile.connections(connector.from);
if (signal.isAffectedFrom(con.from)) route.addSignal(signal);
}
if (added instanceof Block) return List.of(route);
List<Connector> connectors = tile.connections(con.from);
List<Route>routes = route.multiply(connectors.size()); 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; return results;
} }
@@ -267,7 +278,9 @@ public class Plan {
} }
return t("Unknown action: {}",action); return t("Unknown action: {}",action);
} catch (Exception e) { } 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 EndW().tag(null));
tiles.append(new EndN().tag(null)); tiles.append(new EndN().tag(null));
tiles.append(new EndS().tag(null)); tiles.append(new EndS().tag(null));
tiles.append(new TurnoutSW().tag(null)); tiles.append(new TurnoutRS().tag(null));
tiles.append(new TurnoutSE().tag(null)); tiles.append(new TurnoutRN().tag(null));
tiles.append(new TurnoutNW().tag(null)); tiles.append(new TurnoutRW().tag(null));
tiles.append(new TurnoutNE().tag(null)); tiles.append(new TurnoutRE().tag(null));
tiles.append(new TurnoutES().tag(null)); tiles.append(new TurnoutLN().tag(null));
tiles.append(new TurnoutEN().tag(null)); tiles.append(new TurnoutLS().tag(null));
tiles.append(new TurnoutWS().tag(null)); tiles.append(new TurnoutLW().tag(null));
tiles.append(new TurnoutWN().tag(null)); tiles.append(new TurnoutLE().tag(null));
tiles.append(new CrossH().tag(null)); tiles.append(new CrossH().tag(null));
tiles.append(new CrossV().tag(null)); tiles.append(new CrossV().tag(null));
tiles.append(new Eraser().tag(null)); tiles.append(new Eraser().tag(null));

View File

@@ -1,38 +1,47 @@
package de.srsoftware.web4rail; package de.srsoftware.web4rail;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map.Entry;
import java.util.Vector; import java.util.Vector;
import de.keawe.tools.translations.Translation; import de.keawe.tools.translations.Translation;
import de.srsoftware.tools.Tag; import de.srsoftware.tools.Tag;
import de.srsoftware.web4rail.Plan.Direction;
import de.srsoftware.web4rail.tiles.Block; import de.srsoftware.web4rail.tiles.Block;
import de.srsoftware.web4rail.tiles.Contact; import de.srsoftware.web4rail.tiles.Contact;
import de.srsoftware.web4rail.tiles.Shadow;
import de.srsoftware.web4rail.tiles.Signal; import de.srsoftware.web4rail.tiles.Signal;
import de.srsoftware.web4rail.tiles.Tile; import de.srsoftware.web4rail.tiles.Tile;
import de.srsoftware.web4rail.tiles.Turnout;
import de.srsoftware.web4rail.tiles.Turnout.State;
public class Route { public class Route {
private Vector<Tile> path; private Vector<Tile> path;
private Vector<Signal> signals; private Vector<Signal> signals;
private Vector<Contact> contacts; private Vector<Contact> contacts;
private HashMap<Turnout,Turnout.State> turnouts;
private String id; private String id;
private String name; 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); path.add(tile);
if (tile instanceof Contact) contacts.add((Contact) 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) { return tile;
signals.add(signal);
return this;
} }
protected Route clone() { protected Route clone() {
Route clone = new Route(); Route clone = new Route();
clone.contacts = new Vector<Contact>(contacts); clone.contacts = new Vector<Contact>(contacts);
clone.signals = new Vector<Signal>(signals); clone.signals = new Vector<Signal>(signals);
clone.turnouts = new HashMap<>(turnouts);
clone.path = new Vector<>(path); clone.path = new Vector<>(path);
return clone; return clone;
} }
@@ -68,14 +77,22 @@ public class Route {
public Window properties() { public Window properties() {
Window win = new Window("route-properties",t("Properties of {})",this)); Window win = new Window("route-properties",t("Properties of {})",this));
new Tag("h4").content(t("Signals")).addTo(win); new Tag("h4").content(t("Signals")).addTo(win);
Tag list = new Tag("ul"); Tag list = new Tag("ul");
for (Signal s : signals) new Tag("li").content(s.toString()).addTo(list); for (Signal s : signals) new Tag("li").content(s.toString()).addTo(list);
list.addTo(win); list.addTo(win);
new Tag("h4").content(t("Contacts")).addTo(win); new Tag("h4").content(t("Contacts")).addTo(win);
list = new Tag("ul"); list = new Tag("ul");
for (Contact c : contacts) new Tag("li").content(c.toString()).addTo(list); for (Contact c : contacts) new Tag("li").content(c.toString()).addTo(list);
list.addTo(win); 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; return win;
} }
@@ -83,6 +100,7 @@ public class Route {
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<>();
path.add(block); path.add(block);
return this; return this;
} }
@@ -99,4 +117,10 @@ public class Route {
protected static String t(String txt, Object...fills) { protected static String t(String txt, Object...fills) {
return Translation.get(Application.class, txt, 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);
}
} }

View File

@@ -1,21 +1,22 @@
package de.srsoftware.web4rail.tiles; package de.srsoftware.web4rail.tiles;
import java.util.List; import java.util.HashMap;
import java.util.Vector; import java.util.Map;
import de.srsoftware.web4rail.Connector; import de.srsoftware.web4rail.Connector;
import de.srsoftware.web4rail.Plan.Direction; import de.srsoftware.web4rail.Plan.Direction;
import de.srsoftware.web4rail.tiles.Turnout.State;
public class ContactH extends Contact { public class ContactH extends Contact {
@Override @Override
public List<Connector> connections(Direction from) { public Map<Connector, State> connections(Direction from) {
switch (from) { switch (from) {
case WEST: case WEST:
return List.of(new Connector(x+1,y,from)); return Map.of(new Connector(x+1,y,from),State.UNDEF);
case EAST: case EAST:
return List.of(new Connector(x-1,y,from)); return Map.of(new Connector(x-1,y,from),State.UNDEF);
default: default:
return new Vector<>(); return new HashMap<>();
} }
} }
} }

View File

@@ -1,22 +1,23 @@
package de.srsoftware.web4rail.tiles; package de.srsoftware.web4rail.tiles;
import java.util.List; import java.util.HashMap;
import java.util.Vector; import java.util.Map;
import de.srsoftware.web4rail.Connector; import de.srsoftware.web4rail.Connector;
import de.srsoftware.web4rail.Plan.Direction; import de.srsoftware.web4rail.Plan.Direction;
import de.srsoftware.web4rail.tiles.Turnout.State;
public class ContactV extends Contact { public class ContactV extends Contact {
@Override @Override
public List<Connector> connections(Direction from) { public Map<Connector, State> connections(Direction from) {
switch (from) { switch (from) {
case NORTH: case NORTH:
return List.of(new Connector(x,y+1,from)); return Map.of(new Connector(x,y+1,from),State.UNDEF);
case SOUTH: case SOUTH:
return List.of(new Connector(x,y-1,from)); return Map.of(new Connector(x,y-1,from),State.UNDEF);
default: default:
return new Vector<>(); return new HashMap<>();
} }
} }
} }

View File

@@ -1,10 +1,10 @@
package de.srsoftware.web4rail.tiles; package de.srsoftware.web4rail.tiles;
import java.util.List; import java.util.Map;
import de.srsoftware.web4rail.Connector; import de.srsoftware.web4rail.Connector;
import de.srsoftware.web4rail.Plan.Direction; import de.srsoftware.web4rail.Plan.Direction;
public abstract class Cross extends Tile { public abstract class Cross extends Tile {
public abstract List<Connector> offsetConnections(Direction from); public abstract Map<Connector,Turnout.State> offsetConnections(Direction from);
} }

View File

@@ -1,25 +1,25 @@
package de.srsoftware.web4rail.tiles; package de.srsoftware.web4rail.tiles;
import java.io.IOException; import java.io.IOException;
import java.util.List; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.Vector;
import de.srsoftware.tools.Tag; import de.srsoftware.tools.Tag;
import de.srsoftware.web4rail.Connector; import de.srsoftware.web4rail.Connector;
import de.srsoftware.web4rail.Plan.Direction; import de.srsoftware.web4rail.Plan.Direction;
import de.srsoftware.web4rail.tiles.Turnout.State;
public class CrossH extends Cross{ public class CrossH extends Cross{
@Override @Override
public List<Connector> connections(Direction from) { public Map<Connector, State> connections(Direction from) {
switch (from) { switch (from) {
case NORTH: 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: 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: default:
return new Vector<>(); return new HashMap<>();
} }
} }
@@ -29,14 +29,14 @@ public class CrossH extends Cross{
} }
@Override @Override
public List<Connector> offsetConnections(Direction from) { public Map<Connector,State> offsetConnections(Direction from) {
switch (from) { switch (from) {
case NORTH: 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: 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: default:
return new Vector<>(); return new HashMap<>();
} }
} }

View File

@@ -1,12 +1,12 @@
package de.srsoftware.web4rail.tiles; package de.srsoftware.web4rail.tiles;
import java.io.IOException; import java.io.IOException;
import java.util.List;
import java.util.Map; import java.util.Map;
import de.srsoftware.tools.Tag; import de.srsoftware.tools.Tag;
import de.srsoftware.web4rail.Connector; import de.srsoftware.web4rail.Connector;
import de.srsoftware.web4rail.Plan.Direction; import de.srsoftware.web4rail.Plan.Direction;
import de.srsoftware.web4rail.tiles.Turnout.State;
public class CrossV extends Cross{ public class CrossV extends Cross{
@@ -16,7 +16,7 @@ public class CrossV extends Cross{
} }
@Override @Override
public List<Connector> offsetConnections(Direction from) { public Map<Connector, State> offsetConnections(Direction from) {
return null; return null;
} }

View File

@@ -1,22 +1,23 @@
package de.srsoftware.web4rail.tiles; package de.srsoftware.web4rail.tiles;
import java.util.List; import java.util.HashMap;
import java.util.Vector; import java.util.Map;
import de.srsoftware.web4rail.Connector; import de.srsoftware.web4rail.Connector;
import de.srsoftware.web4rail.Plan.Direction; import de.srsoftware.web4rail.Plan.Direction;
import de.srsoftware.web4rail.tiles.Turnout.State;
public class DiagES extends Tile{ public class DiagES extends Tile{
@Override @Override
public List<Connector> connections(Direction from) { public Map<Connector, State> connections(Direction from) {
switch (from) { switch (from) {
case SOUTH: 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: 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: default:
return new Vector<Connector>(); return new HashMap<>();
} }
} }
} }

View File

@@ -1,22 +1,23 @@
package de.srsoftware.web4rail.tiles; package de.srsoftware.web4rail.tiles;
import java.util.List; import java.util.HashMap;
import java.util.Vector; import java.util.Map;
import de.srsoftware.web4rail.Connector; import de.srsoftware.web4rail.Connector;
import de.srsoftware.web4rail.Plan.Direction; import de.srsoftware.web4rail.Plan.Direction;
import de.srsoftware.web4rail.tiles.Turnout.State;
public class DiagNE extends Tile{ public class DiagNE extends Tile{
@Override @Override
public List<Connector> connections(Direction from) { public Map<Connector, State> connections(Direction from) {
switch (from) { switch (from) {
case NORTH: 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: 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: default:
return new Vector<>(); return new HashMap<>();
} }
} }
} }

View File

@@ -1,21 +1,22 @@
package de.srsoftware.web4rail.tiles; package de.srsoftware.web4rail.tiles;
import java.util.List; import java.util.HashMap;
import java.util.Vector; import java.util.Map;
import de.srsoftware.web4rail.Connector; import de.srsoftware.web4rail.Connector;
import de.srsoftware.web4rail.Plan.Direction; import de.srsoftware.web4rail.Plan.Direction;
import de.srsoftware.web4rail.tiles.Turnout.State;
public class DiagSW extends Tile{ public class DiagSW extends Tile{
@Override @Override
public List<Connector> connections(Direction from) { public Map<Connector, State> connections(Direction from) {
switch (from) { switch (from) {
case SOUTH: 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: 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: default:
return new Vector<>(); return new HashMap<>();
} }
} }
} }

View File

@@ -1,22 +1,23 @@
package de.srsoftware.web4rail.tiles; package de.srsoftware.web4rail.tiles;
import java.util.List; import java.util.HashMap;
import java.util.Vector; import java.util.Map;
import de.srsoftware.web4rail.Connector; import de.srsoftware.web4rail.Connector;
import de.srsoftware.web4rail.Plan.Direction; import de.srsoftware.web4rail.Plan.Direction;
import de.srsoftware.web4rail.tiles.Turnout.State;
public class DiagWN extends Tile{ public class DiagWN extends Tile{
@Override @Override
public List<Connector> connections(Direction from) { public Map<Connector, State> connections(Direction from) {
switch (from) { switch (from) {
case NORTH: 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: 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: default:
return new Vector<>(); return new HashMap<>();
} }
} }
} }

View File

@@ -1,16 +1,17 @@
package de.srsoftware.web4rail.tiles; package de.srsoftware.web4rail.tiles;
import java.util.List; import java.util.Map;
import de.srsoftware.web4rail.Connector; import de.srsoftware.web4rail.Connector;
import de.srsoftware.web4rail.Plan.Direction; import de.srsoftware.web4rail.Plan.Direction;
import de.srsoftware.web4rail.tiles.Turnout.State;
public class Shadow extends Tile{ public class Shadow extends Tile{
private Tile overlay; private Tile overlay;
@Override @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 StretchableTile) return overlay.connections(from);
if (overlay instanceof Cross) return ((Cross)overlay).offsetConnections(from); if (overlay instanceof Cross) return ((Cross)overlay).offsetConnections(from);
return super.connections(from); return super.connections(from);

View File

@@ -1,21 +1,22 @@
package de.srsoftware.web4rail.tiles; package de.srsoftware.web4rail.tiles;
import java.util.List; import java.util.HashMap;
import java.util.Vector; import java.util.Map;
import de.srsoftware.web4rail.Connector; import de.srsoftware.web4rail.Connector;
import de.srsoftware.web4rail.Plan.Direction; import de.srsoftware.web4rail.Plan.Direction;
import de.srsoftware.web4rail.tiles.Turnout.State;
public class SignalE extends Signal{ public class SignalE extends Signal{
@Override @Override
public List<Connector> connections(Direction from) { public Map<Connector, State> connections(Direction from) {
switch (from) { switch (from) {
case WEST: 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: 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: default:
return new Vector<>(); return new HashMap<>();
} }
} }

View File

@@ -1,22 +1,23 @@
package de.srsoftware.web4rail.tiles; package de.srsoftware.web4rail.tiles;
import java.util.List; import java.util.HashMap;
import java.util.Vector; import java.util.Map;
import de.srsoftware.web4rail.Connector; import de.srsoftware.web4rail.Connector;
import de.srsoftware.web4rail.Plan.Direction; import de.srsoftware.web4rail.Plan.Direction;
import de.srsoftware.web4rail.tiles.Turnout.State;
public class SignalN extends Signal { public class SignalN extends Signal {
@Override @Override
public List<Connector> connections(Direction from) { public Map<Connector, State> connections(Direction from) {
switch (from) { switch (from) {
case NORTH: 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: 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: default:
return new Vector<>(); return new HashMap<>();
} }
} }

View File

@@ -1,22 +1,23 @@
package de.srsoftware.web4rail.tiles; package de.srsoftware.web4rail.tiles;
import java.util.List; import java.util.HashMap;
import java.util.Vector; import java.util.Map;
import de.srsoftware.web4rail.Connector; import de.srsoftware.web4rail.Connector;
import de.srsoftware.web4rail.Plan.Direction; import de.srsoftware.web4rail.Plan.Direction;
import de.srsoftware.web4rail.tiles.Turnout.State;
public class SignalS extends Signal{ public class SignalS extends Signal{
@Override @Override
public List<Connector> connections(Direction from) { public Map<Connector, State> connections(Direction from) {
switch (from) { switch (from) {
case NORTH: 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: 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: default:
return new Vector<>(); return new HashMap<>();
} }
} }

View File

@@ -1,21 +1,22 @@
package de.srsoftware.web4rail.tiles; package de.srsoftware.web4rail.tiles;
import java.util.List; import java.util.HashMap;
import java.util.Vector; import java.util.Map;
import de.srsoftware.web4rail.Connector; import de.srsoftware.web4rail.Connector;
import de.srsoftware.web4rail.Plan.Direction; import de.srsoftware.web4rail.Plan.Direction;
import de.srsoftware.web4rail.tiles.Turnout.State;
public class SignalW extends Signal{ public class SignalW extends Signal{
@Override @Override
public List<Connector> connections(Direction from) { public Map<Connector, State> connections(Direction from) {
switch (from) { switch (from) {
case WEST: 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: 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: default:
return new Vector<>(); return new HashMap<>();
} }
} }

View File

@@ -1,22 +1,23 @@
package de.srsoftware.web4rail.tiles; package de.srsoftware.web4rail.tiles;
import java.util.List; import java.util.HashMap;
import java.util.Vector; import java.util.Map;
import de.srsoftware.web4rail.Connector; import de.srsoftware.web4rail.Connector;
import de.srsoftware.web4rail.Plan.Direction; import de.srsoftware.web4rail.Plan.Direction;
import de.srsoftware.web4rail.tiles.Turnout.State;
public class StraightH extends StretchableTile{ public class StraightH extends StretchableTile{
@Override @Override
public List<Connector> connections(Direction from) { public Map<Connector, State> connections(Direction from) {
switch (from) { switch (from) {
case WEST: 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: 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: default:
return new Vector<>(); return new HashMap<>();
} }
} }

View File

@@ -1,22 +1,23 @@
package de.srsoftware.web4rail.tiles; package de.srsoftware.web4rail.tiles;
import java.util.List; import java.util.HashMap;
import java.util.Vector; import java.util.Map;
import de.srsoftware.web4rail.Connector; import de.srsoftware.web4rail.Connector;
import de.srsoftware.web4rail.Plan.Direction; import de.srsoftware.web4rail.Plan.Direction;
import de.srsoftware.web4rail.tiles.Turnout.State;
public class StraightV extends StretchableTile{ public class StraightV extends StretchableTile{
@Override @Override
public List<Connector> connections(Direction from) { public Map<Connector, State> connections(Direction from) {
switch (from) { switch (from) {
case NORTH: 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: 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: default:
return new Vector<>(); return new HashMap<>();
} }
} }

View File

@@ -42,8 +42,8 @@ public abstract class Tile {
return new JSONObject(); return new JSONObject();
} }
public List<Connector> connections(Direction from){ public Map<Connector,Turnout.State> connections(Direction from){
return new Vector<>(); return new HashMap<>();
} }

View File

@@ -1,7 +1,9 @@
package de.srsoftware.web4rail.tiles; package de.srsoftware.web4rail.tiles;
public abstract class Turnout extends Tile { public abstract class Turnout extends Tile {
public enum State{
LEFT,STRAIGHT,RIGHT,UNDEF;
}
private boolean straight = true; private boolean straight = true;
public boolean toggle() { public boolean toggle() {

View File

@@ -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<>();
}
}
}

View File

@@ -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<>();
}
}
}

View 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<>();
}
}
}

View 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<>();
}
}
}

View 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<>();
}
}
}

View 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<>();
}
}
}

View File

@@ -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<>();
}
}
}

View File

@@ -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<>();
}
}
}

View 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<>();
}
}
}

View 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<>();
}
}
}

View 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<>();
}
}
}

View 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<>();
}
}
}

View File

@@ -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<>();
}
}
}

View File

@@ -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<>();
}
}
}

View File

@@ -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<>();
}
}
}

View File

@@ -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<>();
}
}
}