Browse Source

implemented route detection

lookup-tables
Stephan Richter 5 years ago
parent
commit
467c8ea1c1
  1. 20
      src/main/java/de/srsoftware/web4rail/Plan.java
  2. 3
      src/main/java/de/srsoftware/web4rail/Route.java
  3. 9
      src/main/java/de/srsoftware/web4rail/tiles/Cross.java
  4. 28
      src/main/java/de/srsoftware/web4rail/tiles/CrossH.java
  5. 9
      src/main/java/de/srsoftware/web4rail/tiles/CrossV.java
  6. 16
      src/main/java/de/srsoftware/web4rail/tiles/DiagNE.java
  7. 17
      src/main/java/de/srsoftware/web4rail/tiles/DiagSW.java
  8. 11
      src/main/java/de/srsoftware/web4rail/tiles/Shadow.java
  9. 17
      src/main/java/de/srsoftware/web4rail/tiles/StraightV.java
  10. 18
      src/main/java/de/srsoftware/web4rail/tiles/TurnoutNW.java

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

@ -92,24 +92,22 @@ public class Plan { @@ -92,24 +92,22 @@ public class Plan {
private String analyze() {
Vector<Route> routes = new Vector<Route>();
for (Block block : blocks) {
LOG.debug("searching routes from {}",block);
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));
}
for (Route r : routes) LOG.debug("found route: {}",r);
return "analyze() not implemented, yet!";
}
private Collection<Route> follow(Route route, Connector con) {
LOG.debug("follow({}, {})",route,con);
private Collection<Route> follow(Route route, Connector con) {
Tile tile = get(con.x(),con.y());
Vector<Route> result = new Vector<>();
if (tile == null) return result;
route.add(tile);
Vector<Route> results = new Vector<>();
if (tile == null) return results;
Tile added = route.add(tile instanceof Shadow ? ((Shadow)tile).overlay() : tile);
if (added instanceof Block) return List.of(route);
List<Connector> connectors = tile.connections(con.from());
List<Route>routes = route.multiply(connectors.size());
for (int i=0; i<connectors.size(); i++) result.addAll(follow(routes.get(i),connectors.get(i)));
return routes;
for (int i=0; i<connectors.size(); i++) results.addAll(follow(routes.get(i),connectors.get(i)));
return results;
}
public Tile get(int x, int y) {

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

@ -10,8 +10,9 @@ public class Route { @@ -10,8 +10,9 @@ public class Route {
private Vector<Tile> path;
public void add(Tile tile) {
public Tile add(Tile tile) {
path.add(tile);
return tile;
}
protected Route clone() {

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

@ -0,0 +1,9 @@ @@ -0,0 +1,9 @@
package de.srsoftware.web4rail.tiles;
import java.util.List;
import de.srsoftware.web4rail.Connector;
public abstract class Cross extends Tile {
public abstract List<Connector> offsetConnections(String from);
}

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

@ -1,17 +1,43 @@ @@ -1,17 +1,43 @@
package de.srsoftware.web4rail.tiles;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.Vector;
import de.srsoftware.tools.Tag;
import de.srsoftware.web4rail.Connector;
import de.srsoftware.web4rail.Plan;
public class CrossH extends Tile{
public class CrossH extends Cross{
@Override
public List<Connector> connections(String from) {
switch (from) {
case Plan.NORTH:
return List.of(new Connector(x+1,y+1,Plan.NORTH));
case Plan.SOUTH:
return List.of(new Connector(x+1,y-1,Plan.SOUTH));
}
return new Vector<>();
}
@Override
public int len() {
return 2;
}
@Override
public List<Connector> offsetConnections(String from) {
switch (from) {
case Plan.NORTH:
return List.of(new Connector(x,y+1,Plan.NORTH));
case Plan.SOUTH:
return List.of(new Connector(x,y-1,Plan.SOUTH));
}
return new Vector<>();
}
@Override
public Tag tag(Map<String,Object> replacements) throws IOException {
return super.tag(replacements).size(200,100).attr("viewbox", "0 0 200 100");

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

@ -1,17 +1,24 @@ @@ -1,17 +1,24 @@
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;
public class CrossV extends Tile{
public class CrossV extends Cross{
@Override
public int height() {
return 2;
}
@Override
public List<Connector> offsetConnections(String from) {
return null;
}
@Override
public Tag tag(Map<String,Object> replacements) throws IOException {
return super.tag(replacements).size(100,200).attr("viewbox", "0 0 100 200");

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

@ -1,5 +1,21 @@ @@ -1,5 +1,21 @@
package de.srsoftware.web4rail.tiles;
import java.util.List;
import java.util.Vector;
import de.srsoftware.web4rail.Connector;
import de.srsoftware.web4rail.Plan;
public class DiagNE extends Tile{
@Override
public List<Connector> connections(String from) {
switch (from) {
case Plan.NORTH:
return List.of(new Connector(x+1,y,Plan.WEST));
case Plan.EAST:
return List.of(new Connector(x,y-1,Plan.SOUTH));
}
return new Vector<>();
}
}

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

@ -1,5 +1,20 @@ @@ -1,5 +1,20 @@
package de.srsoftware.web4rail.tiles;
import java.util.List;
import java.util.Vector;
import de.srsoftware.web4rail.Connector;
import de.srsoftware.web4rail.Plan;
public class DiagSW extends Tile{
@Override
public List<Connector> connections(String from) {
switch (from) {
case Plan.SOUTH:
return List.of(new Connector(x-1,y,Plan.EAST));
case Plan.WEST:
return List.of(new Connector(x,y+1,Plan.NORTH));
}
return new Vector<>();
}
}

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

@ -1,8 +1,19 @@ @@ -1,8 +1,19 @@
package de.srsoftware.web4rail.tiles;
import java.util.List;
import de.srsoftware.web4rail.Connector;
public class Shadow extends Tile{
private Tile overlay;
@Override
public List<Connector> connections(String from) {
if (overlay instanceof StretchableTile) return overlay.connections(from);
if (overlay instanceof Cross) return ((Cross)overlay).offsetConnections(from);
return super.connections(from);
}
public Shadow(Tile overlay) {
this.overlay = overlay;

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

@ -1,7 +1,24 @@ @@ -1,7 +1,24 @@
package de.srsoftware.web4rail.tiles;
import java.util.List;
import java.util.Vector;
import de.srsoftware.web4rail.Connector;
import de.srsoftware.web4rail.Plan;
public class StraightV extends StretchableTile{
@Override
public List<Connector> connections(String from) {
switch (from) {
case Plan.NORTH:
return List.of(new Connector(x,y+height(),from));
case Plan.SOUTH:
return List.of(new Connector(x,y-1,from));
}
return new Vector<>();
}
@Override
public int height() {
return length;

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

@ -1,6 +1,22 @@ @@ -1,6 +1,22 @@
package de.srsoftware.web4rail.tiles;
public class TurnoutNW extends Turnout{
import java.util.List;
import java.util.Vector;
import de.srsoftware.web4rail.Connector;
import de.srsoftware.web4rail.Plan;
public class TurnoutNW extends Turnout{
@Override
public List<Connector> connections(String from) {
switch (from) {
case Plan.NORTH:
return List.of(new Connector(x-1,y,Plan.EAST),new Connector(x, y+1, Plan.NORTH));
case Plan.WEST:
case Plan.SOUTH:
return List.of(new Connector(x,y-1,Plan.SOUTH));
}
return new Vector<>();
}
}

Loading…
Cancel
Save