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;
import de.srsoftware.web4rail.tiles.Block; import de.srsoftware.web4rail.tiles.Block;
import de.srsoftware.web4rail.tiles.BlockH; import de.srsoftware.web4rail.tiles.BlockH;
import de.srsoftware.web4rail.tiles.BlockV; import de.srsoftware.web4rail.tiles.BlockV;
import de.srsoftware.web4rail.tiles.Contact;
import de.srsoftware.web4rail.tiles.ContactH; import de.srsoftware.web4rail.tiles.ContactH;
import de.srsoftware.web4rail.tiles.ContactV; import de.srsoftware.web4rail.tiles.ContactV;
import de.srsoftware.web4rail.tiles.CrossH; import de.srsoftware.web4rail.tiles.CrossH;
@ -171,7 +172,20 @@ public class Plan {
Vector<Route> results = new Vector<>(); Vector<Route> results = new Vector<>();
if (tile == null) return results; if (tile == null) return results;
Tile addedTile = route.add(tile,connector.from); 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); Map<Connector, State> connectors = tile.connections(connector.from);
List<Route>routes = route.multiply(connectors.size()); List<Route>routes = route.multiply(connectors.size());
LOG.debug("{}",tile); LOG.debug("{}",tile);

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

@ -72,12 +72,12 @@ public class Route {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
for (int i=0; i<path.size();i++) { for (int i=0; i<path.size();i++) {
Tile tile = path.get(i); Tile tile = path.get(i);
if (i==0) { if (i>0) sb.append(" – ");
if (tile instanceof Block) {
sb.append(((Block)tile).name); sb.append(((Block)tile).name);
} else if (i==path.size()-1){ if (i>0) break; // Kontakt nach dem Ziel-Block nicht mitnehmen
sb.append("-"+((Block)tile).name);
} else { } else {
sb.append("-"+tile.x+":"+tile.y); sb.append(tile.x+":"+tile.y);
} }
} }
id = sb.toString(); id = sb.toString();

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

@ -1,12 +1,27 @@
package de.srsoftware.web4rail.tiles; package de.srsoftware.web4rail.tiles;
import java.util.HashMap;
import java.util.List; 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 BlockH extends Block{ public class BlockH extends Block{
Contact north,center,south; 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 @Override
public int len() { public int len() {

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

@ -1,13 +1,28 @@
package de.srsoftware.web4rail.tiles; package de.srsoftware.web4rail.tiles;
import java.util.HashMap;
import java.util.List; 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 BlockV extends Block{ public class BlockV extends Block{
Contact west,center,east; 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 @Override
public int height() { public int height() {
return length; return length;

Loading…
Cancel
Save