diff --git a/pom.xml b/pom.xml index 08390a2..0603c2f 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 de.srsoftware web4rail - 0.11.2 + 0.11.3 Web4Rail jar Java Model Railway Control diff --git a/resources/js/plan.js b/resources/js/plan.js index dfc4e39..5d0d952 100644 --- a/resources/js/plan.js +++ b/resources/js/plan.js @@ -13,6 +13,7 @@ var selected = null; var mode = null; var messageTimer = null; var messageOpacity = 0; +var trainAwaitingDestination = null; function addClass(data){ parts = data.split(" "); @@ -32,7 +33,16 @@ function addTile(x,y){ function clickTile(x,y){ var id = x+"-"+y; - if ($('#'+id).length > 0) request({realm:'plan',action:'click',id:id}); + var tiles = $('#'+id); + if (tiles.length > 0) { + if (trainAwaitingDestination != null && tiles.hasClass("Block")) { + request({realm:'train',id:trainAwaitingDestination,action:MOVE,destination:id}); + trainAwaitingDestination = null; + $(PLAN).css('cursor',''); + return false; + } + request({realm:'plan',action:'click',id:id}); + } return false; } @@ -179,6 +189,13 @@ function runAction(ev){ } else return request({action:ev.target.id,realm:realm}); // TODO: ask for name } +function selectDest(trainId){ + trainAwaitingDestination = trainId; + closeWindows(); + $(PLAN).css('cursor','help'); + return false; +} + function stream(ev){ var data = ev.data; console.log("received: ",data); diff --git a/src/main/java/de/srsoftware/web4rail/moving/Train.java b/src/main/java/de/srsoftware/web4rail/moving/Train.java index 0069d28..ce37280 100644 --- a/src/main/java/de/srsoftware/web4rail/moving/Train.java +++ b/src/main/java/de/srsoftware/web4rail/moving/Train.java @@ -71,10 +71,12 @@ public class Train extends BaseClass implements Comparable { private Vector locos = new Vector(); private static final String TAGS = "tags"; + + private static final String DESTINATION = "destination"; private HashSet tags = new HashSet(); - private Block block = null; + private Block block,destination = null; LinkedList trace = new LinkedList(); private class Autopilot extends Thread{ @@ -139,6 +141,8 @@ public class Train extends BaseClass implements Comparable { return train.automatic(); case ACTION_DROP: return train.dropCar(params); + case ACTION_MOVE: + return train.setDestination(params); case ACTION_PROPS: return train.props(); case ACTION_QUIT: @@ -154,7 +158,7 @@ public class Train extends BaseClass implements Comparable { } return t("Unknown action: {}",params.get(ACTION)); } - + public void addToTrace(Vector newTiles) { boolean active = trace.isEmpty(); for (Tile tile : newTiles) { @@ -239,7 +243,7 @@ public class Train extends BaseClass implements Comparable { private Tag carList() { Tag locoProp = new Tag("li").content(t("Cars:")); - Tag locoList = new Tag("ul").clazz("carlist"); + Tag locoList = new Tag("ul").clazz("carlist").content(""); for (Car car : this.cars) { Tag li = new Tag("li"); @@ -482,6 +486,14 @@ public class Train extends BaseClass implements Comparable { ul.addTo(li).addTo(propList); } + Tag dest = new Tag("li").content(t("Destination: ")); + if (isNull(destination)) { + new Button(t("Select from plan"),"return selectDest("+id+");").addTo(dest); + } else { + link("span",Map.of(REALM,REALM_PLAN,ID,destination.id(),ACTION,ACTION_CLICK),destination.toString()).addTo(dest); + } + dest.addTo(propList); + if (isSet(block)) { link("li",Map.of(REALM,REALM_PLAN,ID,block.id(),ACTION,ACTION_CLICK),t("Current location: {}",block)).addTo(propList); Tag actions = new Tag("li").clazz().content(t("Actions:")+NBSP); @@ -548,6 +560,18 @@ public class Train extends BaseClass implements Comparable { if (isSet(block)) block.set(this); } + private String setDestination(HashMap params) { + String dest = params.get(DESTINATION); + if (isNull(dest)) return t("No destination supplied!"); + Tile tile = plan.get(dest, true); + if (isNull(tile)) return t("Tile {} not known!",dest); + if (tile instanceof Block) { + destination = (Block) tile; + return t("{} now heading for {}",this,destination); + } + return t("{} is not a block!",tile); + } + public void setSpeed(int v) { for (Locomotive loco : locos) loco.setSpeed(v); this.speed = v; diff --git a/src/main/java/de/srsoftware/web4rail/tiles/Block.java b/src/main/java/de/srsoftware/web4rail/tiles/Block.java index 5a31b59..c7ed3ee 100644 --- a/src/main/java/de/srsoftware/web4rail/tiles/Block.java +++ b/src/main/java/de/srsoftware/web4rail/tiles/Block.java @@ -282,7 +282,7 @@ public abstract class Block extends StretchableTile{ replacements.put("%text%",name); if (isSet(train)) replacements.put("%text%",train.directedName()); Tag tag = super.tag(replacements); - if (isSet(train)) tag.clazz(tag.get("class")+" occupied"); + tag.clazz(tag.get("class")+" Block"); return tag; } @@ -355,4 +355,4 @@ public abstract class Block extends StretchableTile{ return this; } -} \ No newline at end of file +} diff --git a/src/main/java/de/srsoftware/web4rail/tiles/Shadow.java b/src/main/java/de/srsoftware/web4rail/tiles/Shadow.java index 6bcc2f2..3034e62 100644 --- a/src/main/java/de/srsoftware/web4rail/tiles/Shadow.java +++ b/src/main/java/de/srsoftware/web4rail/tiles/Shadow.java @@ -1,7 +1,9 @@ package de.srsoftware.web4rail.tiles; +import java.io.IOException; import java.util.Map; +import de.srsoftware.tools.Tag; import de.srsoftware.web4rail.Connector; import de.srsoftware.web4rail.Plan.Direction; import de.srsoftware.web4rail.tiles.Turnout.State; @@ -25,4 +27,11 @@ public class Shadow extends Tile{ public Tile overlay() { return overlay; } + + @Override + public Tag tag(Map replacements) throws IOException { + Tag tag = super.tag(replacements); + if (overlay instanceof Block) tag.attr("class", tag.get("class")+" Block"); + return tag; + } }