Browse Source

working on signals on routes

lookup-tables
Stephan Richter 5 years ago
parent
commit
0aa00ae065
  1. 9
      resources/css/style.css
  2. 5
      src/main/java/de/srsoftware/web4rail/Application.java
  3. 5
      src/main/java/de/srsoftware/web4rail/Route.java
  4. 23
      src/main/java/de/srsoftware/web4rail/moving/Train.java
  5. 4
      src/main/java/de/srsoftware/web4rail/tiles/Block.java
  6. 19
      src/main/java/de/srsoftware/web4rail/tiles/Signal.java
  7. 2
      src/main/java/de/srsoftware/web4rail/tiles/Tile.java
  8. 1
      src/main/java/de/srsoftware/web4rail/tiles/TurnoutL.java

9
resources/css/style.css

@ -140,9 +140,12 @@ h2{
stroke: red; stroke: red;
} }
.sig_a{ .signal.stop .sig_a{
fill: red; fill: red;
} }
.signal.go .sig_a{
fill: lime;
}
.sig_b{ .sig_b{
fill: black; fill: black;
@ -167,4 +170,8 @@ svg.right rect,
svg.straight .left, svg.straight .left,
svg.straight .right{ svg.straight .right{
fill: white !important; fill: white !important;
}
.occupied .block{
fill: yellow;
} }

5
src/main/java/de/srsoftware/web4rail/Application.java

@ -15,6 +15,7 @@ import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.nio.file.Files; import java.nio.file.Files;
import java.util.HashMap; import java.util.HashMap;
import java.util.Random;
import java.util.Vector; import java.util.Vector;
import org.slf4j.Logger; import org.slf4j.Logger;
@ -52,7 +53,9 @@ public class Application {
plan = new Plan(); plan = new Plan();
} }
Locomotive BR110 = new Locomotive("BR110"); Locomotive BR110 = new Locomotive("BR110");
Block block = new Vector<>(plan.blocks()).lastElement(); Vector<Block> blocks = new Vector<>(plan.blocks());
Random rand = new Random();
Block block = blocks.get(rand.nextInt(blocks.size()));
if (block != null) block.train(new Train(BR110)); if (block != null) block.train(new Train(BR110));
Desktop.getDesktop().browse(URI.create("http://localhost:"+config.getInt(PORT)+"/plan")); Desktop.getDesktop().browse(URI.create("http://localhost:"+config.getInt(PORT)+"/plan"));
} }

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

@ -209,6 +209,11 @@ public class Route {
if (lastTile instanceof Turnout) addTurnout((Turnout) lastTile,state); if (lastTile instanceof Turnout) addTurnout((Turnout) lastTile,state);
} }
public Route setSignals() throws IOException {
for (Signal signal : signals) signal.state("go");
return this;
}
public Block startBlock() { public Block startBlock() {
return (Block) path.get(0); return (Block) path.get(0);
} }

23
src/main/java/de/srsoftware/web4rail/moving/Train.java

@ -31,6 +31,10 @@ public class Train {
} else cars.add(car); } else cars.add(car);
} }
public void block(Block block) {
this.block = block;
}
public int length() { public int length() {
int result = 0; int result = 0;
for (Locomotive loco : locos) result += loco.length; for (Locomotive loco : locos) result += loco.length;
@ -48,14 +52,6 @@ public class Train {
return window; return window;
} }
private String t(String message, Object...fills) {
return Translation.get(Application.class, message, fills);
}
public void block(Block block) {
this.block = block;
}
public String start() throws IOException { public String start() throws IOException {
if (block == null) return t("{] not in a block",this); if (block == null) return t("{] not in a block",this);
HashSet<Route> routes = block.routes(); HashSet<Route> routes = block.routes();
@ -69,7 +65,16 @@ public class Train {
Random rand = new Random(); Random rand = new Random();
if (route != null) route.unlock(); if (route != null) route.unlock();
int sel = rand.nextInt(availableRoutes.size()); int sel = rand.nextInt(availableRoutes.size());
route = availableRoutes.get(sel).lock(this); route = availableRoutes.get(sel).lock(this).setSignals();
return t("started {}",this); return t("started {}",this);
} }
private String t(String message, Object...fills) {
return Translation.get(Application.class, message, fills);
}
@Override
public String toString() {
return name();
}
} }

4
src/main/java/de/srsoftware/web4rail/tiles/Block.java

@ -58,7 +58,9 @@ public abstract class Block extends StretchableTile{
public Tag tag(Map<String, Object> replacements) throws IOException { public Tag tag(Map<String, Object> replacements) throws IOException {
if (replacements == null) replacements = new HashMap<String, Object>(); if (replacements == null) replacements = new HashMap<String, Object>();
replacements.put("%text%",train == null ? name : train.name()); replacements.put("%text%",train == null ? name : train.name());
return super.tag(replacements); Tag tag = super.tag(replacements);
if (train != null) tag.clazz(tag.get("class")+" occupied");
return tag;
} }
@Override @Override

19
src/main/java/de/srsoftware/web4rail/tiles/Signal.java

@ -1,8 +1,15 @@
package de.srsoftware.web4rail.tiles; package de.srsoftware.web4rail.tiles;
import java.io.IOException;
import java.util.Map;
import de.srsoftware.tools.Tag;
import de.srsoftware.web4rail.Plan.Direction; import de.srsoftware.web4rail.Plan.Direction;
public abstract class Signal extends Tile{ public abstract class Signal extends Tile{
private static final String STOP = "stop";
private String state = STOP;
public Signal() { public Signal() {
super(); super();
@ -10,4 +17,16 @@ public abstract class Signal extends Tile{
} }
public abstract boolean isAffectedFrom(Direction dir); public abstract boolean isAffectedFrom(Direction dir);
public void state(String state) throws IOException {
this.state = state;
plan.stream("place "+tag(null));
}
@Override
public Tag tag(Map<String, Object> replacements) throws IOException {
Tag tag = super.tag(replacements);
tag.clazz(tag.get("class")+" "+state);
return tag;
}
} }

2
src/main/java/de/srsoftware/web4rail/tiles/Tile.java

@ -31,7 +31,7 @@ public abstract class Tile {
protected HashSet<Shadow> shadows = new HashSet<>(); protected HashSet<Shadow> shadows = new HashSet<>();
private HashSet<Route> routes = new HashSet<>(); private HashSet<Route> routes = new HashSet<>();
protected Plan plan; protected Plan plan;
private Train lockedBy; protected Train lockedBy;
protected static Logger LOG = LoggerFactory.getLogger(Tile.class); protected static Logger LOG = LoggerFactory.getLogger(Tile.class);

1
src/main/java/de/srsoftware/web4rail/tiles/TurnoutL.java

@ -5,6 +5,7 @@ import java.io.IOException;
public class TurnoutL extends Turnout { public class TurnoutL extends Turnout {
@Override @Override
public Object click() throws IOException { public Object click() throws IOException {
if (lockedBy != null) return t("{} is locked by {}!",this,lockedBy);
state = (state == State.STRAIGHT) ? State.LEFT : State.STRAIGHT; state = (state == State.STRAIGHT) ? State.LEFT : State.STRAIGHT;
return tag(null); return tag(null);
} }

Loading…
Cancel
Save