diff --git a/src/main/java/de/srsoftware/web4rail/Plan.java b/src/main/java/de/srsoftware/web4rail/Plan.java index 41097a0..0ba9a80 100644 --- a/src/main/java/de/srsoftware/web4rail/Plan.java +++ b/src/main/java/de/srsoftware/web4rail/Plan.java @@ -29,6 +29,7 @@ import de.srsoftware.web4rail.moving.Train; import de.srsoftware.web4rail.tiles.Block; import de.srsoftware.web4rail.tiles.BlockH; import de.srsoftware.web4rail.tiles.BlockV; +import de.srsoftware.web4rail.tiles.Contact; import de.srsoftware.web4rail.tiles.ContactH; import de.srsoftware.web4rail.tiles.ContactV; import de.srsoftware.web4rail.tiles.CrossH; @@ -171,7 +172,20 @@ public class Plan { Vector results = new Vector<>(); if (tile == null) return results; Tile addedTile = route.add(tile,connector.from); - if (addedTile instanceof Block) return List.of(route); + if (addedTile instanceof Block) { + Map cons = addedTile.connections(connector.from); + LOG.debug("Found {}, coming from {}.",addedTile,connector.from); + for (Connector con : cons.keySet()) { // falls direkt nach dem Block noch ein Kontakt kommt: diesen mit zu Route hinzufügen + LOG.debug("This is connected to {}",con); + Tile nextTile = get(con.x,con.y,false); + if (nextTile instanceof Contact) { + LOG.debug("{} is followed by {}",addedTile,nextTile); + route.add(nextTile, con.from); + } + break; + } + return List.of(route); + } Map connectors = tile.connections(connector.from); Listroutes = route.multiply(connectors.size()); LOG.debug("{}",tile); diff --git a/src/main/java/de/srsoftware/web4rail/Route.java b/src/main/java/de/srsoftware/web4rail/Route.java index 0cb6b11..475568b 100644 --- a/src/main/java/de/srsoftware/web4rail/Route.java +++ b/src/main/java/de/srsoftware/web4rail/Route.java @@ -72,12 +72,12 @@ public class Route { StringBuilder sb = new StringBuilder(); for (int i=0; i0) sb.append(" – "); + if (tile instanceof Block) { sb.append(((Block)tile).name); - } else if (i==path.size()-1){ - sb.append("-"+((Block)tile).name); + if (i>0) break; // Kontakt nach dem Ziel-Block nicht mitnehmen } else { - sb.append("-"+tile.x+":"+tile.y); + sb.append(tile.x+":"+tile.y); } } id = sb.toString(); diff --git a/src/main/java/de/srsoftware/web4rail/tiles/BlockH.java b/src/main/java/de/srsoftware/web4rail/tiles/BlockH.java index 08fdaaf..93aa790 100644 --- a/src/main/java/de/srsoftware/web4rail/tiles/BlockH.java +++ b/src/main/java/de/srsoftware/web4rail/tiles/BlockH.java @@ -1,12 +1,27 @@ package de.srsoftware.web4rail.tiles; +import java.util.HashMap; 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 BlockH extends Block{ Contact north,center,south; + + @Override + public Map connections(Direction from) { + switch (from) { + case WEST: + return Map.of(new Connector(x+len(),y,Direction.WEST),State.UNDEF); + case EAST: + return Map.of(new Connector(x-1,y,Direction.EAST),State.UNDEF); + default: + return new HashMap<>(); + } + } @Override public int len() { diff --git a/src/main/java/de/srsoftware/web4rail/tiles/BlockV.java b/src/main/java/de/srsoftware/web4rail/tiles/BlockV.java index e1e0130..523a8b8 100644 --- a/src/main/java/de/srsoftware/web4rail/tiles/BlockV.java +++ b/src/main/java/de/srsoftware/web4rail/tiles/BlockV.java @@ -1,13 +1,28 @@ package de.srsoftware.web4rail.tiles; +import java.util.HashMap; 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 BlockV extends Block{ Contact west,center,east; + @Override + public Map connections(Direction from) { + switch (from) { + case NORTH: + return Map.of(new Connector(x,y+height(),Direction.NORTH),State.UNDEF); + case SOUTH: + return Map.of(new Connector(x,y-1,Direction.SOUTH),State.UNDEF); + default: + return new HashMap<>(); + } + } + @Override public int height() { return length;