Browse Source

fix for #24

lookup-tables
Stephan Richter 5 years ago
parent
commit
da7fd17f21
  1. 2
      pom.xml
  2. 3
      src/main/java/de/srsoftware/web4rail/Application.java
  3. 4
      src/main/java/de/srsoftware/web4rail/ControlUnit.java
  4. 7
      src/main/java/de/srsoftware/web4rail/Plan.java
  5. 2
      src/main/java/de/srsoftware/web4rail/tiles/Cross.java
  6. 3
      src/main/java/de/srsoftware/web4rail/tiles/CrossH.java
  7. 26
      src/main/java/de/srsoftware/web4rail/tiles/CrossV.java
  8. 2
      src/main/java/de/srsoftware/web4rail/tiles/Shadow.java
  9. 25
      src/main/java/de/srsoftware/web4rail/tiles/StretchableTile.java
  10. 2
      src/main/java/de/srsoftware/web4rail/tiles/Tile.java
  11. 33
      src/main/java/de/srsoftware/web4rail/tiles/TileWithShadow.java

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>

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

@ -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) {

4
src/main/java/de/srsoftware/web4rail/ControlUnit.java

@ -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);

7
src/main/java/de/srsoftware/web4rail/Plan.java

@ -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());
} }

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

@ -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);
} }

3
src/main/java/de/srsoftware/web4rail/tiles/CrossH.java

@ -40,8 +40,7 @@ public class CrossH extends Cross{
default: default:
return new HashMap<>(); return new HashMap<>();
} }
}
}
@Override @Override
public Tag tag(Map<String,Object> replacements) throws IOException { public Tag tag(Map<String,Object> replacements) throws IOException {

26
src/main/java/de/srsoftware/web4rail/tiles/CrossV.java

@ -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,14 +11,35 @@ 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;
} }
@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

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

@ -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;

25
src/main/java/de/srsoftware/web4rail/tiles/StretchableTile.java

@ -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;
} }

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

@ -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);
} }

33
src/main/java/de/srsoftware/web4rail/tiles/TileWithShadow.java

@ -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();
}
}
}
Loading…
Cancel
Save