Browse Source

improved tile move, added more tiles

lookup-tables
Stephan Richter 5 years ago
parent
commit
e7b9f3cd09
  1. 13
      resources/css/style.css
  2. 4
      resources/js/plan.js
  3. 4
      resources/svg/CrossH.svg
  4. 4
      resources/svg/CrossV.svg
  5. 3
      resources/svg/EndN.svg
  6. 3
      resources/svg/EndS.svg
  7. 2
      resources/svg/StraightV.svg
  8. 4
      resources/svg/TurnoutNE.svg
  9. 4
      resources/svg/TurnoutNW.svg
  10. 57
      src/main/java/de/srsoftware/web4rail/Plan.java
  11. 18
      src/main/java/de/srsoftware/web4rail/tiles/CrossH.java
  12. 18
      src/main/java/de/srsoftware/web4rail/tiles/CrossV.java
  13. 4
      src/main/java/de/srsoftware/web4rail/tiles/EndN.java
  14. 4
      src/main/java/de/srsoftware/web4rail/tiles/EndS.java
  15. 2
      src/main/java/de/srsoftware/web4rail/tiles/EndW.java
  16. 5
      src/main/java/de/srsoftware/web4rail/tiles/Shadow.java
  17. 23
      src/main/java/de/srsoftware/web4rail/tiles/Tile.java

13
resources/css/style.css

@ -7,6 +7,7 @@ html{
} }
body{ body{
min-height: 100%; min-height: 100%;
background: #c6dbd2;
} }
.tile{ .tile{
@ -14,11 +15,19 @@ body{
width: 30px; width: 30px;
height: 30px; height: 30px;
position: absolute; position: absolute;
background: white;
}
.crossH{
width: 60px;
}
.crossV{
height: 60px !important;
} }
svg polygon, svg polygon,
svg rect{ svg rect{
fill:rgb(0,255,255); fill:#617de4;
stroke-width:5; stroke-width:5;
stroke:rgb(0,0,0); stroke:rgb(0,0,0);
} }
@ -45,6 +54,7 @@ svg text{
text-align: center; text-align: center;
} }
.Shadow,
.menu .list{ .menu .list{
display: none; display: none;
} }
@ -67,6 +77,7 @@ svg text{
min-width: 30px; min-width: 30px;
text-align: center; text-align: center;
float: left; float: left;
background: #ecffa2;
} }
#messages{ #messages{

4
resources/js/plan.js

@ -110,6 +110,7 @@ function moveTile(x,y){
method: POST, method: POST,
data : {action:mode,direction:selected.id,x:x,y:y}, data : {action:mode,direction:selected.id,x:x,y:y},
success: function(resp){ success: function(resp){
if (resp.startsWith('<')){
$(resp).each(function(){ $(resp).each(function(){
if (this.id != undefined){ if (this.id != undefined){
$('#'+this.id).remove(); $('#'+this.id).remove();
@ -117,6 +118,9 @@ function moveTile(x,y){
} }
}); });
$('#tile-'+x+'-'+y).remove(); $('#tile-'+x+'-'+y).remove();
} else {
addMessage(resp);
}
} }
}); });
} }

4
resources/svg/CrossH.svg

@ -0,0 +1,4 @@
<svg width="200" height="100" viewbox="0 0 200 100">
<polygon points="35,0 135,100 165,100 65,0" />
<polygon points="35,100 135,00 165,00 65,100" />
</svg>

After

Width:  |  Height:  |  Size: 157 B

4
resources/svg/CrossV.svg

@ -0,0 +1,4 @@
<svg width="100" height="200" viewbox="0 0 100 200">
<polygon points="0,35 100,135 100,165 0,65" />
<polygon points="100,35 0,135 0,165 100,65" />
</svg>

After

Width:  |  Height:  |  Size: 155 B

3
resources/svg/EndN.svg

@ -0,0 +1,3 @@
<svg width="100" height="100" viewbox="0 0 100 100">
<rect x="35" y="40" width="30" height="60" />
</svg>

After

Width:  |  Height:  |  Size: 107 B

3
resources/svg/EndS.svg

@ -0,0 +1,3 @@
<svg width="100" height="100" viewbox="0 0 100 100">
<rect x="35" y="0" width="30" height="60" />
</svg>

After

Width:  |  Height:  |  Size: 106 B

2
resources/svg/StraightV.svg

@ -1,3 +1,3 @@
<svg width="100" height="100" viewbox="0 0 100 100"> <svg width="100" height="100" viewbox="0 0 100 100">
<rect x="35" y="0" width="35" height="100" /> <rect x="35" y="0" width="30" height="100" />
</svg> </svg>

Before

Width:  |  Height:  |  Size: 107 B

After

Width:  |  Height:  |  Size: 107 B

4
resources/svg/TurnoutNE.svg

@ -0,0 +1,4 @@
<svg width="100" height="100" viewbox="0 0 100 100">
<rect x="35" y="0" width="30" height="100" />
<polygon points="65,0 100,35 100,65 35,0" />
</svg>

After

Width:  |  Height:  |  Size: 152 B

4
resources/svg/TurnoutNW.svg

@ -0,0 +1,4 @@
<svg width="100" height="100" viewbox="0 0 100 100">
<rect x="35" y="0" width="30" height="100" />
<polygon points="65,0 0,65 0,35 35,0" />
</svg>

After

Width:  |  Height:  |  Size: 148 B

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

@ -16,18 +16,25 @@ import org.slf4j.LoggerFactory;
import de.keawe.tools.translations.Translation; import de.keawe.tools.translations.Translation;
import de.srsoftware.tools.Tag; import de.srsoftware.tools.Tag;
import de.srsoftware.web4rail.tiles.CrossH;
import de.srsoftware.web4rail.tiles.CrossV;
import de.srsoftware.web4rail.tiles.DiagES; import de.srsoftware.web4rail.tiles.DiagES;
import de.srsoftware.web4rail.tiles.DiagNE; import de.srsoftware.web4rail.tiles.DiagNE;
import de.srsoftware.web4rail.tiles.DiagSW; import de.srsoftware.web4rail.tiles.DiagSW;
import de.srsoftware.web4rail.tiles.DiagWN; import de.srsoftware.web4rail.tiles.DiagWN;
import de.srsoftware.web4rail.tiles.EndE; import de.srsoftware.web4rail.tiles.EndE;
import de.srsoftware.web4rail.tiles.EndN;
import de.srsoftware.web4rail.tiles.EndS;
import de.srsoftware.web4rail.tiles.EndW; import de.srsoftware.web4rail.tiles.EndW;
import de.srsoftware.web4rail.tiles.Eraser; import de.srsoftware.web4rail.tiles.Eraser;
import de.srsoftware.web4rail.tiles.Shadow;
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.Tile; import de.srsoftware.web4rail.tiles.Tile;
import de.srsoftware.web4rail.tiles.TurnoutEN; import de.srsoftware.web4rail.tiles.TurnoutEN;
import de.srsoftware.web4rail.tiles.TurnoutES; import de.srsoftware.web4rail.tiles.TurnoutES;
import de.srsoftware.web4rail.tiles.TurnoutNE;
import de.srsoftware.web4rail.tiles.TurnoutNW;
import de.srsoftware.web4rail.tiles.TurnoutSE; import de.srsoftware.web4rail.tiles.TurnoutSE;
import de.srsoftware.web4rail.tiles.TurnoutSW; import de.srsoftware.web4rail.tiles.TurnoutSW;
import de.srsoftware.web4rail.tiles.TurnoutWN; import de.srsoftware.web4rail.tiles.TurnoutWN;
@ -67,6 +74,9 @@ public class Plan {
clazz = tc.getName().replace(".Tile", "."+clazz); clazz = tc.getName().replace(".Tile", "."+clazz);
Tile tile = (Tile) tc.getClassLoader().loadClass(clazz).getDeclaredConstructor().newInstance(); Tile tile = (Tile) tc.getClassLoader().loadClass(clazz).getDeclaredConstructor().newInstance();
set(x, y, tile); set(x, y, tile);
for (int i=1; i<tile.len(); i++) set(x+i,y,new Shadow());
for (int i=1; i<tile.height(); i++) set(x,y+1,new Shadow());
return tile; return tile;
} }
@ -82,7 +92,7 @@ public class Plan {
for (Entry<Integer, Tile> row : column.getValue().entrySet()) { for (Entry<Integer, Tile> row : column.getValue().entrySet()) {
int y = row.getKey(); int y = row.getKey();
Tile tile = row.getValue().position(x, y); Tile tile = row.getValue().position(x, y);
if (tile != null) page.append("\t\t"+tile.html()+"\n"); if (tile != null) page.append("\t\t"+tile.tag()+"\n");
} }
} }
return page.append(menu()).append(messages()); return page.append(menu()).append(messages());
@ -147,18 +157,21 @@ public class Plan {
if (!moved.isEmpty()) { if (!moved.isEmpty()) {
set(x,y,null); set(x,y,null);
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
for (Tile tile : moved) sb.append(tile.html()+"\n"); for (Tile tile : moved) sb.append(tile.tag()+"\n");
return sb.toString(); return sb.toString();
} }
return null; return null;
} }
private Vector<Tile> moveTile(int x, int y,int xstep,int ystep) { private Vector<Tile> moveTile(int x, int y,int xstep,int ystep) {
LOG.debug("moveEast({},{})",x,y); LOG.debug("moveTile({}+{},{}+{})",x,xstep,y,ystep);
if (x+xstep < -1 || y+ystep < -1) {
throw new IndexOutOfBoundsException("Can not move tile out of screen!");
}
Tile tile = this.get(x, y); Tile tile = this.get(x, y);
if (tile == null) return new Vector<Tile>(); if (tile == null) return new Vector<Tile>();
Vector<Tile> result = moveTile(x+xstep,y+ystep,xstep,ystep); Vector<Tile> result = moveTile(x+xstep,y+ystep,xstep,ystep);
set(x+xstep, y+ystep, tile); set(x+xstep,y+ystep, tile);
result.add(tile); result.add(tile);
return result; return result;
} }
@ -223,21 +236,27 @@ public class Plan {
Tag tileMenu = new Tag("div").clazz("addtile").title(t("Add tile")).content("◫"); Tag tileMenu = new Tag("div").clazz("addtile").title(t("Add tile")).content("◫");
StringBuffer tiles = new StringBuffer(); StringBuffer tiles = new StringBuffer();
tiles.append(new StraightH().html()); tiles.append(new StraightH().tag());
tiles.append(new StraightV().html()); tiles.append(new StraightV().tag());
tiles.append(new DiagES().html()); tiles.append(new DiagES().tag());
tiles.append(new DiagSW().html()); tiles.append(new DiagSW().tag());
tiles.append(new DiagNE().html()); tiles.append(new DiagNE().tag());
tiles.append(new DiagWN().html()); tiles.append(new DiagWN().tag());
tiles.append(new EndE().html()); tiles.append(new EndE().tag());
tiles.append(new EndW().html()); tiles.append(new EndW().tag());
tiles.append(new TurnoutSE().html()); tiles.append(new EndN().tag());
tiles.append(new TurnoutEN().html()); tiles.append(new EndS().tag());
tiles.append(new TurnoutES().html()); tiles.append(new TurnoutSW().tag());
tiles.append(new TurnoutWS().html()); tiles.append(new TurnoutSE().tag());
tiles.append(new TurnoutWN().html()); tiles.append(new TurnoutNW().tag());
tiles.append(new TurnoutSW().html()); tiles.append(new TurnoutNE().tag());
tiles.append(new Eraser().html()); tiles.append(new TurnoutES().tag());
tiles.append(new TurnoutEN().tag());
tiles.append(new TurnoutWS().tag());
tiles.append(new TurnoutWN().tag());
tiles.append(new CrossH().tag());
tiles.append(new CrossV().tag());
tiles.append(new Eraser().tag());
return new Tag("div").clazz("list").content(tiles.toString()).addTo(tileMenu); return new Tag("div").clazz("list").content(tiles.toString()).addTo(tileMenu);
} }
} }

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

@ -0,0 +1,18 @@
package de.srsoftware.web4rail.tiles;
import java.io.IOException;
import de.srsoftware.tools.Tag;
public class CrossH extends Tile{
@Override
public int len() {
return 2;
}
@Override
public Tag tag() throws IOException {
return super.tag().size(200,100).attr("viewbox", "0 0 200 100");
}
}

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

@ -0,0 +1,18 @@
package de.srsoftware.web4rail.tiles;
import java.io.IOException;
import de.srsoftware.tools.Tag;
public class CrossV extends Tile{
@Override
public int height() {
return 2;
}
@Override
public Tag tag() throws IOException {
return super.tag().size(100,200).attr("viewbox", "0 0 100 200");
}
}

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

@ -0,0 +1,4 @@
package de.srsoftware.web4rail.tiles;
public class EndN extends Tile{
}

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

@ -0,0 +1,4 @@
package de.srsoftware.web4rail.tiles;
public class EndS extends Tile{
}

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

@ -1,5 +1,3 @@
package de.srsoftware.web4rail.tiles; package de.srsoftware.web4rail.tiles;
import de.srsoftware.tools.Tag;
public class EndW extends Tile{} public class EndW extends Tile{}

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

@ -0,0 +1,5 @@
package de.srsoftware.web4rail.tiles;
public class Shadow extends Tile{
}

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

@ -18,6 +18,15 @@ public abstract class Tile {
public Tile() { public Tile() {
classes.add("tile"); classes.add("tile");
classes.add(getClass().getSimpleName());
}
public int height() {
return 1;
}
public int len() {
return 1;
} }
public Tile position(int x, int y) { public Tile position(int x, int y) {
@ -26,7 +35,11 @@ public abstract class Tile {
return this; return this;
} }
public String html() throws IOException { public static Tag propMenu() {
return new Window("tile-properties",t("Properties")).content(t("This tile has no properties"));
}
public Tag tag() throws IOException {
Tag svg = new Tag("svg") Tag svg = new Tag("svg")
.id((x!=-1 && y!=-1)?("tile-"+x+"-"+y):(getClass().getSimpleName())) .id((x!=-1 && y!=-1)?("tile-"+x+"-"+y):(getClass().getSimpleName()))
@ -55,15 +68,15 @@ public abstract class Tile {
.addTo(svg); .addTo(svg);
} }
return svg.toString(); return svg;
} }
private static String t(String txt, Object...fills) { private static String t(String txt, Object...fills) {
return Translation.get(Application.class, txt, fills); return Translation.get(Application.class, txt, fills);
} }
public static Tag propMenu() { @Override
return new Window("tile-properties",t("Properties")).content(t("This tile has no properties")); public String toString() {
return t("{}({},{})",getClass().getSimpleName(),x,y) ;
} }
} }

Loading…
Cancel
Save