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. 18
      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. 27
      src/main/java/de/srsoftware/web4rail/tiles/Tile.java

13
resources/css/style.css

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

18
resources/js/plan.js

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

4
resources/svg/CrossH.svg

@ -0,0 +1,4 @@ @@ -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 @@ @@ -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 @@ @@ -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 @@ @@ -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 @@ @@ -1,3 +1,3 @@
<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>

Before

Width:  |  Height:  |  Size: 107 B

After

Width:  |  Height:  |  Size: 107 B

4
resources/svg/TurnoutNE.svg

@ -0,0 +1,4 @@ @@ -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 @@ @@ -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; @@ -16,18 +16,25 @@ import org.slf4j.LoggerFactory;
import de.keawe.tools.translations.Translation;
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.DiagNE;
import de.srsoftware.web4rail.tiles.DiagSW;
import de.srsoftware.web4rail.tiles.DiagWN;
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.Eraser;
import de.srsoftware.web4rail.tiles.Shadow;
import de.srsoftware.web4rail.tiles.StraightH;
import de.srsoftware.web4rail.tiles.StraightV;
import de.srsoftware.web4rail.tiles.Tile;
import de.srsoftware.web4rail.tiles.TurnoutEN;
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.TurnoutSW;
import de.srsoftware.web4rail.tiles.TurnoutWN;
@ -67,6 +74,9 @@ public class Plan { @@ -67,6 +74,9 @@ public class Plan {
clazz = tc.getName().replace(".Tile", "."+clazz);
Tile tile = (Tile) tc.getClassLoader().loadClass(clazz).getDeclaredConstructor().newInstance();
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;
}
@ -82,7 +92,7 @@ public class Plan { @@ -82,7 +92,7 @@ public class Plan {
for (Entry<Integer, Tile> row : column.getValue().entrySet()) {
int y = row.getKey();
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());
@ -147,18 +157,21 @@ public class Plan { @@ -147,18 +157,21 @@ public class Plan {
if (!moved.isEmpty()) {
set(x,y,null);
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 null;
}
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);
if (tile == null) return new Vector<Tile>();
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);
return result;
}
@ -223,21 +236,27 @@ public class Plan { @@ -223,21 +236,27 @@ public class Plan {
Tag tileMenu = new Tag("div").clazz("addtile").title(t("Add tile")).content("◫");
StringBuffer tiles = new StringBuffer();
tiles.append(new StraightH().html());
tiles.append(new StraightV().html());
tiles.append(new DiagES().html());
tiles.append(new DiagSW().html());
tiles.append(new DiagNE().html());
tiles.append(new DiagWN().html());
tiles.append(new EndE().html());
tiles.append(new EndW().html());
tiles.append(new TurnoutSE().html());
tiles.append(new TurnoutEN().html());
tiles.append(new TurnoutES().html());
tiles.append(new TurnoutWS().html());
tiles.append(new TurnoutWN().html());
tiles.append(new TurnoutSW().html());
tiles.append(new Eraser().html());
tiles.append(new StraightH().tag());
tiles.append(new StraightV().tag());
tiles.append(new DiagES().tag());
tiles.append(new DiagSW().tag());
tiles.append(new DiagNE().tag());
tiles.append(new DiagWN().tag());
tiles.append(new EndE().tag());
tiles.append(new EndW().tag());
tiles.append(new EndN().tag());
tiles.append(new EndS().tag());
tiles.append(new TurnoutSW().tag());
tiles.append(new TurnoutSE().tag());
tiles.append(new TurnoutNW().tag());
tiles.append(new TurnoutNE().tag());
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);
}
}

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

@ -0,0 +1,18 @@ @@ -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 @@ @@ -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 @@ @@ -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 @@ @@ -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 @@ @@ -1,5 +1,3 @@
package de.srsoftware.web4rail.tiles;
import de.srsoftware.tools.Tag;
public class EndW extends Tile{}

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

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

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

@ -18,6 +18,15 @@ public abstract class Tile { @@ -18,6 +18,15 @@ public abstract class Tile {
public 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) {
@ -25,8 +34,12 @@ public abstract class Tile { @@ -25,8 +34,12 @@ public abstract class Tile {
this.y = y;
return this;
}
public static Tag propMenu() {
return new Window("tile-properties",t("Properties")).content(t("This tile has no properties"));
}
public String html() throws IOException {
public Tag tag() throws IOException {
Tag svg = new Tag("svg")
.id((x!=-1 && y!=-1)?("tile-"+x+"-"+y):(getClass().getSimpleName()))
@ -55,15 +68,15 @@ public abstract class Tile { @@ -55,15 +68,15 @@ public abstract class Tile {
.addTo(svg);
}
return svg.toString();
return svg;
}
private static String t(String txt, Object...fills) {
return Translation.get(Application.class, txt, fills);
}
public static Tag propMenu() {
return new Window("tile-properties",t("Properties")).content(t("This tile has no properties"));
}
}
@Override
public String toString() {
return t("{}({},{})",getClass().getSimpleName(),x,y) ;
}
}

Loading…
Cancel
Save