From 0aa00ae065fc88bc4504cbfc4dd41edae7a7ed2b Mon Sep 17 00:00:00 2001 From: Stephan Richter Date: Sat, 19 Sep 2020 14:10:26 +0200 Subject: [PATCH] working on signals on routes --- resources/css/style.css | 9 +++++++- .../de/srsoftware/web4rail/Application.java | 5 +++- .../java/de/srsoftware/web4rail/Route.java | 5 ++++ .../de/srsoftware/web4rail/moving/Train.java | 23 +++++++++++-------- .../de/srsoftware/web4rail/tiles/Block.java | 4 +++- .../de/srsoftware/web4rail/tiles/Signal.java | 19 +++++++++++++++ .../de/srsoftware/web4rail/tiles/Tile.java | 2 +- .../srsoftware/web4rail/tiles/TurnoutL.java | 1 + 8 files changed, 55 insertions(+), 13 deletions(-) diff --git a/resources/css/style.css b/resources/css/style.css index c6adc62..179eac5 100644 --- a/resources/css/style.css +++ b/resources/css/style.css @@ -140,9 +140,12 @@ h2{ stroke: red; } -.sig_a{ +.signal.stop .sig_a{ fill: red; } +.signal.go .sig_a{ + fill: lime; +} .sig_b{ fill: black; @@ -167,4 +170,8 @@ svg.right rect, svg.straight .left, svg.straight .right{ fill: white !important; +} + +.occupied .block{ + fill: yellow; } \ No newline at end of file diff --git a/src/main/java/de/srsoftware/web4rail/Application.java b/src/main/java/de/srsoftware/web4rail/Application.java index ab687a7..96c4511 100644 --- a/src/main/java/de/srsoftware/web4rail/Application.java +++ b/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.file.Files; import java.util.HashMap; +import java.util.Random; import java.util.Vector; import org.slf4j.Logger; @@ -52,7 +53,9 @@ public class Application { plan = new Plan(); } Locomotive BR110 = new Locomotive("BR110"); - Block block = new Vector<>(plan.blocks()).lastElement(); + Vector 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)); Desktop.getDesktop().browse(URI.create("http://localhost:"+config.getInt(PORT)+"/plan")); } diff --git a/src/main/java/de/srsoftware/web4rail/Route.java b/src/main/java/de/srsoftware/web4rail/Route.java index 62caceb..55f3891 100644 --- a/src/main/java/de/srsoftware/web4rail/Route.java +++ b/src/main/java/de/srsoftware/web4rail/Route.java @@ -209,6 +209,11 @@ public class Route { 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() { return (Block) path.get(0); } diff --git a/src/main/java/de/srsoftware/web4rail/moving/Train.java b/src/main/java/de/srsoftware/web4rail/moving/Train.java index eb3c550..9416514 100644 --- a/src/main/java/de/srsoftware/web4rail/moving/Train.java +++ b/src/main/java/de/srsoftware/web4rail/moving/Train.java @@ -31,6 +31,10 @@ public class Train { } else cars.add(car); } + public void block(Block block) { + this.block = block; + } + public int length() { int result = 0; for (Locomotive loco : locos) result += loco.length; @@ -48,14 +52,6 @@ public class Train { 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 { if (block == null) return t("{] not in a block",this); HashSet routes = block.routes(); @@ -69,7 +65,16 @@ public class Train { Random rand = new Random(); if (route != null) route.unlock(); int sel = rand.nextInt(availableRoutes.size()); - route = availableRoutes.get(sel).lock(this); + route = availableRoutes.get(sel).lock(this).setSignals(); return t("started {}",this); } + + private String t(String message, Object...fills) { + return Translation.get(Application.class, message, fills); + } + + @Override + public String toString() { + return name(); + } } diff --git a/src/main/java/de/srsoftware/web4rail/tiles/Block.java b/src/main/java/de/srsoftware/web4rail/tiles/Block.java index 0be4913..4e5da96 100644 --- a/src/main/java/de/srsoftware/web4rail/tiles/Block.java +++ b/src/main/java/de/srsoftware/web4rail/tiles/Block.java @@ -58,7 +58,9 @@ public abstract class Block extends StretchableTile{ public Tag tag(Map replacements) throws IOException { if (replacements == null) replacements = new HashMap(); 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 diff --git a/src/main/java/de/srsoftware/web4rail/tiles/Signal.java b/src/main/java/de/srsoftware/web4rail/tiles/Signal.java index 177cef6..a38cf17 100644 --- a/src/main/java/de/srsoftware/web4rail/tiles/Signal.java +++ b/src/main/java/de/srsoftware/web4rail/tiles/Signal.java @@ -1,8 +1,15 @@ package de.srsoftware.web4rail.tiles; +import java.io.IOException; +import java.util.Map; + +import de.srsoftware.tools.Tag; import de.srsoftware.web4rail.Plan.Direction; public abstract class Signal extends Tile{ + + private static final String STOP = "stop"; + private String state = STOP; public Signal() { super(); @@ -10,4 +17,16 @@ public abstract class Signal extends Tile{ } 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 replacements) throws IOException { + Tag tag = super.tag(replacements); + tag.clazz(tag.get("class")+" "+state); + return tag; + } } diff --git a/src/main/java/de/srsoftware/web4rail/tiles/Tile.java b/src/main/java/de/srsoftware/web4rail/tiles/Tile.java index 9ffaf43..84c22aa 100644 --- a/src/main/java/de/srsoftware/web4rail/tiles/Tile.java +++ b/src/main/java/de/srsoftware/web4rail/tiles/Tile.java @@ -31,7 +31,7 @@ public abstract class Tile { protected HashSet shadows = new HashSet<>(); private HashSet routes = new HashSet<>(); protected Plan plan; - private Train lockedBy; + protected Train lockedBy; protected static Logger LOG = LoggerFactory.getLogger(Tile.class); diff --git a/src/main/java/de/srsoftware/web4rail/tiles/TurnoutL.java b/src/main/java/de/srsoftware/web4rail/tiles/TurnoutL.java index f62e739..ea2804a 100644 --- a/src/main/java/de/srsoftware/web4rail/tiles/TurnoutL.java +++ b/src/main/java/de/srsoftware/web4rail/tiles/TurnoutL.java @@ -5,6 +5,7 @@ import java.io.IOException; public class TurnoutL extends Turnout { @Override public Object click() throws IOException { + if (lockedBy != null) return t("{} is locked by {}!",this,lockedBy); state = (state == State.STRAIGHT) ? State.LEFT : State.STRAIGHT; return tag(null); }