fix for #24
This commit is contained in:
2
pom.xml
2
pom.xml
@@ -4,7 +4,7 @@
|
|||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<groupId>de.srsoftware</groupId>
|
<groupId>de.srsoftware</groupId>
|
||||||
<artifactId>web4rail</artifactId>
|
<artifactId>web4rail</artifactId>
|
||||||
<version>1.2.33</version>
|
<version>1.2.34</version>
|
||||||
<name>Web4Rail</name>
|
<name>Web4Rail</name>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
<description>Java Model Railway Control</description>
|
<description>Java Model Railway Control</description>
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ import java.net.InetSocketAddress;
|
|||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
import java.net.URLDecoder;
|
import java.net.URLDecoder;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.NoSuchFileException;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
@@ -66,7 +67,7 @@ public class Application extends BaseClass{
|
|||||||
server.start();
|
server.start();
|
||||||
try {
|
try {
|
||||||
Plan.load(Plan.DEFAULT_NAME);
|
Plan.load(Plan.DEFAULT_NAME);
|
||||||
} catch (FileNotFoundException e) {
|
} catch (FileNotFoundException|NoSuchFileException e) {
|
||||||
plan = new Plan();
|
plan = new Plan();
|
||||||
}
|
}
|
||||||
for (String arg : args) {
|
for (String arg : args) {
|
||||||
|
|||||||
@@ -176,14 +176,14 @@ public class ControlUnit extends Thread implements Constants{
|
|||||||
*/
|
*/
|
||||||
public Object properties() {
|
public Object properties() {
|
||||||
Window win = new Window("cu-props", t("Properties of the control unit"));
|
Window win = new Window("cu-props", t("Properties of the control unit"));
|
||||||
Form form = new Form();
|
Form form = new Form("cu-prop-form");
|
||||||
new Input(ACTION,ACTION_UPDATE).hideIn(form);
|
new Input(ACTION,ACTION_UPDATE).hideIn(form);
|
||||||
new Input(REALM,REALM_CU).hideIn(form);
|
new Input(REALM,REALM_CU).hideIn(form);
|
||||||
Fieldset fieldset = new Fieldset(t("Server connection"));
|
Fieldset fieldset = new Fieldset(t("Server connection"));
|
||||||
new Input(HOST,host).addTo(new Label(t("Hostname"))).addTo(fieldset);
|
new Input(HOST,host).addTo(new Label(t("Hostname"))).addTo(fieldset);
|
||||||
new Input(PORT,port).numeric().addTo(new Label(t("Port"))).addTo(fieldset);
|
new Input(PORT,port).numeric().addTo(new Label(t("Port"))).addTo(fieldset);
|
||||||
new Input(BUS,bus).numeric().addTo(new Label(t("Bus"))).addTo(fieldset);
|
new Input(BUS,bus).numeric().addTo(new Label(t("Bus"))).addTo(fieldset);
|
||||||
new Button(t("Apply")).addTo(fieldset).addTo(form).addTo(win);
|
new Button(t("Apply"),form).addTo(fieldset).addTo(form).addTo(win);
|
||||||
|
|
||||||
fieldset = new Fieldset("Actions");
|
fieldset = new Fieldset("Actions");
|
||||||
new Button(t("Connect"),"connectCu();").addTo(fieldset).addTo(win);
|
new Button(t("Connect"),"connectCu();").addTo(fieldset).addTo(win);
|
||||||
|
|||||||
@@ -62,9 +62,9 @@ import de.srsoftware.web4rail.tiles.SignalS;
|
|||||||
import de.srsoftware.web4rail.tiles.SignalW;
|
import de.srsoftware.web4rail.tiles.SignalW;
|
||||||
import de.srsoftware.web4rail.tiles.StraightH;
|
import de.srsoftware.web4rail.tiles.StraightH;
|
||||||
import de.srsoftware.web4rail.tiles.StraightV;
|
import de.srsoftware.web4rail.tiles.StraightV;
|
||||||
import de.srsoftware.web4rail.tiles.StretchableTile;
|
|
||||||
import de.srsoftware.web4rail.tiles.TextDisplay;
|
import de.srsoftware.web4rail.tiles.TextDisplay;
|
||||||
import de.srsoftware.web4rail.tiles.Tile;
|
import de.srsoftware.web4rail.tiles.Tile;
|
||||||
|
import de.srsoftware.web4rail.tiles.TileWithShadow;
|
||||||
import de.srsoftware.web4rail.tiles.Turnout.State;
|
import de.srsoftware.web4rail.tiles.Turnout.State;
|
||||||
import de.srsoftware.web4rail.tiles.Turnout3E;
|
import de.srsoftware.web4rail.tiles.Turnout3E;
|
||||||
import de.srsoftware.web4rail.tiles.TurnoutLE;
|
import de.srsoftware.web4rail.tiles.TurnoutLE;
|
||||||
@@ -238,8 +238,9 @@ public class Plan extends BaseClass{
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
if (tile instanceof StretchableTile) ((StretchableTile)tile).placeShadows();
|
tile.position(x, y);
|
||||||
place(tile.position(x, y));
|
if (tile instanceof TileWithShadow) ((TileWithShadow)tile).placeShadows();
|
||||||
|
place(tile);
|
||||||
return t("Added {}",tile.getClass().getSimpleName());
|
return t("Added {}",tile.getClass().getSimpleName());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,6 +5,6 @@ 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;
|
||||||
|
|
||||||
public abstract class Cross extends Tile {
|
public abstract class Cross extends TileWithShadow {
|
||||||
public abstract Map<Connector,Turnout.State> offsetConnections(Direction from);
|
public abstract Map<Connector,Turnout.State> offsetConnections(Direction from);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,7 +40,6 @@ public class CrossH extends Cross{
|
|||||||
default:
|
default:
|
||||||
return new HashMap<>();
|
return new HashMap<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package de.srsoftware.web4rail.tiles;
|
package de.srsoftware.web4rail.tiles;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import de.srsoftware.tools.Tag;
|
import de.srsoftware.tools.Tag;
|
||||||
@@ -10,6 +11,19 @@ import de.srsoftware.web4rail.tiles.Turnout.State;
|
|||||||
|
|
||||||
public class CrossV extends Cross{
|
public class CrossV extends Cross{
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<Connector, State> connections(Direction from) {
|
||||||
|
if (isNull(from)) return new HashMap<>();
|
||||||
|
switch (from) {
|
||||||
|
case WEST:
|
||||||
|
return Map.of(new Connector(x+1,y+1,Direction.WEST),State.UNDEF);
|
||||||
|
case EAST:
|
||||||
|
return Map.of(new Connector(x-1,y+1,Direction.EAST),State.UNDEF);
|
||||||
|
default:
|
||||||
|
return new HashMap<>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int height() {
|
public int height() {
|
||||||
return 2;
|
return 2;
|
||||||
@@ -17,7 +31,15 @@ public class CrossV extends Cross{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Map<Connector,State> offsetConnections(Direction from) {
|
public Map<Connector,State> offsetConnections(Direction from) {
|
||||||
return null;
|
if (isNull(from)) return new HashMap<>();
|
||||||
|
switch (from) {
|
||||||
|
case WEST:
|
||||||
|
return Map.of(new Connector(x+1,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
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ public class Shadow extends Tile{
|
|||||||
return super.connections(from);
|
return super.connections(from);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Shadow(StretchableTile overlay, int x, int y) {
|
public Shadow(TileWithShadow overlay, int x, int y) {
|
||||||
this.overlay = overlay;
|
this.overlay = overlay;
|
||||||
this.x = x;
|
this.x = x;
|
||||||
this.y = y;
|
this.y = y;
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ package de.srsoftware.web4rail.tiles;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
import java.util.Vector;
|
|
||||||
|
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
|
|
||||||
@@ -13,14 +12,9 @@ import de.srsoftware.web4rail.Window;
|
|||||||
import de.srsoftware.web4rail.tags.Fieldset;
|
import de.srsoftware.web4rail.tags.Fieldset;
|
||||||
import de.srsoftware.web4rail.tags.Input;
|
import de.srsoftware.web4rail.tags.Input;
|
||||||
|
|
||||||
public abstract class StretchableTile extends Tile {
|
public abstract class StretchableTile extends TileWithShadow {
|
||||||
private static final String STRETCH_LENGTH = "stretch";
|
private static final String STRETCH_LENGTH = "stretch";
|
||||||
private int stretch = 1;
|
private int stretch = 1;
|
||||||
private Vector<Id> shadows = new Vector<Id>();
|
|
||||||
|
|
||||||
public void add(Shadow shadow) {
|
|
||||||
shadows.add(shadow.id());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public JSONObject config() {
|
public JSONObject config() {
|
||||||
@@ -58,15 +52,7 @@ public abstract class StretchableTile extends Tile {
|
|||||||
if (!tileAtDest.move(dx, dy)) return false;
|
if (!tileAtDest.move(dx, dy)) return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean moved = super.move(dx, dy);
|
return super.move(dx, dy);
|
||||||
if (moved) placeShadows();
|
|
||||||
return moved;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void placeShadows() {
|
|
||||||
removeShadows();
|
|
||||||
for (int dx=1; dx<width(); dx++) plan.place(new Shadow(this, x+dx, y));
|
|
||||||
for (int dy=1; dy<height(); dy++) plan.place(new Shadow(this, x, y+dy));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -82,13 +68,6 @@ public abstract class StretchableTile extends Tile {
|
|||||||
return super.remove();
|
return super.remove();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void removeShadows() {
|
|
||||||
while (!shadows.isEmpty()) {
|
|
||||||
Tile tile = BaseClass.get(shadows.remove(0));
|
|
||||||
if (tile instanceof Shadow) tile.remove();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public int stretch() {
|
public int stretch() {
|
||||||
return stretch;
|
return stretch;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -109,7 +109,7 @@ public abstract class Tile extends BaseClass implements Comparable<Tile>{
|
|||||||
clazz = Tile.class.getName().replace(".Tile", "."+clazz);
|
clazz = Tile.class.getName().replace(".Tile", "."+clazz);
|
||||||
Tile tile = (Tile) Tile.class.getClassLoader().loadClass(clazz).getDeclaredConstructor().newInstance();
|
Tile tile = (Tile) Tile.class.getClassLoader().loadClass(clazz).getDeclaredConstructor().newInstance();
|
||||||
tile.load(json).register();
|
tile.load(json).register();
|
||||||
if (tile instanceof StretchableTile) ((StretchableTile)tile).placeShadows();
|
if (tile instanceof TileWithShadow) ((TileWithShadow)tile).placeShadows();
|
||||||
plan.place(tile);
|
plan.place(tile);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,33 @@
|
|||||||
|
package de.srsoftware.web4rail.tiles;
|
||||||
|
|
||||||
|
import java.util.Vector;
|
||||||
|
|
||||||
|
import de.srsoftware.web4rail.BaseClass;
|
||||||
|
|
||||||
|
public class TileWithShadow extends Tile {
|
||||||
|
private Vector<Id> shadows = new Vector<Id>();
|
||||||
|
|
||||||
|
public void add(Shadow shadow) {
|
||||||
|
shadows.add(shadow.id());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean move(int dx, int dy) {
|
||||||
|
boolean moved = super.move(dx, dy);
|
||||||
|
if (moved) placeShadows();
|
||||||
|
return moved;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void placeShadows() {
|
||||||
|
removeShadows();
|
||||||
|
for (int dx=1; dx<width(); dx++) plan.place(new Shadow(this, x+dx, y));
|
||||||
|
for (int dy=1; dy<height(); dy++) plan.place(new Shadow(this, x, y+dy));
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void removeShadows() {
|
||||||
|
while (!shadows.isEmpty()) {
|
||||||
|
Tile tile = BaseClass.get(shadows.remove(0));
|
||||||
|
if (tile instanceof Shadow) tile.remove();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user