Browse Source

now adding connector directly after target blockt to route

lookup-tables
Stephan Richter 5 years ago
parent
commit
a6090b4cf9
  1. 16
      src/main/java/de/srsoftware/web4rail/Plan.java
  2. 8
      src/main/java/de/srsoftware/web4rail/Route.java
  3. 15
      src/main/java/de/srsoftware/web4rail/tiles/BlockH.java
  4. 15
      src/main/java/de/srsoftware/web4rail/tiles/BlockV.java

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

@ -29,6 +29,7 @@ import de.srsoftware.web4rail.moving.Train; @@ -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 { @@ -171,7 +172,20 @@ public class Plan {
Vector<Route> 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<Connector, State> 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<Connector, State> connectors = tile.connections(connector.from);
List<Route>routes = route.multiply(connectors.size());
LOG.debug("{}",tile);

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

@ -72,12 +72,12 @@ public class Route { @@ -72,12 +72,12 @@ public class Route {
StringBuilder sb = new StringBuilder();
for (int i=0; i<path.size();i++) {
Tile tile = path.get(i);
if (i==0) {
if (i>0) 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();

15
src/main/java/de/srsoftware/web4rail/tiles/BlockH.java

@ -1,12 +1,27 @@ @@ -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<Connector, State> 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() {

15
src/main/java/de/srsoftware/web4rail/tiles/BlockV.java

@ -1,13 +1,28 @@ @@ -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<Connector, State> 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;

Loading…
Cancel
Save