diff --git a/src/togos/minecraft/maprend/RegionRenderer.java b/src/togos/minecraft/maprend/RegionRenderer.java
index fdf3689..ced049c 100644
--- a/src/togos/minecraft/maprend/RegionRenderer.java
+++ b/src/togos/minecraft/maprend/RegionRenderer.java
@@ -442,6 +442,27 @@ public void renderAll( RegionMap rm, File outputDir, boolean force ) throws IOEx
}
timer.total += System.currentTimeMillis() - startTime;
}
+
+ private void copyResource(String fileName, File outputDir) throws IOException {
+ File staticFile = new File(outputDir, fileName);
+ if( !staticFile.exists() ) {
+ InputStream staticFileInputStream = getClass().getResourceAsStream(fileName);
+ byte[] buffer = new byte[1024*1024];
+ try {
+ FileOutputStream staticFileOutputStream = new FileOutputStream(staticFile);
+ try {
+ int r;
+ while( (r = staticFileInputStream.read(buffer)) > 0 ) {
+ staticFileOutputStream.write(buffer, 0, r);
+ }
+ } finally {
+ staticFileOutputStream.close();
+ }
+ } finally {
+ staticFileInputStream.close();
+ }
+ }
+ }
/**
* Create a "tiles.html" file containing a table with
@@ -454,24 +475,8 @@ public void createTileHtml( int minX, int minZ, int maxX, int maxZ, File outputD
int regionSize = 512 / scale;
try {
- File cssFile = new File(outputDir, "tiles.css");
- if( !cssFile.exists() ) {
- InputStream cssInputStream = getClass().getResourceAsStream("tiles.css");
- byte[] buffer = new byte[1024*1024];
- try {
- FileOutputStream cssOutputStream = new FileOutputStream(cssFile);
- try {
- int r;
- while( (r = cssInputStream.read(buffer)) > 0 ) {
- cssOutputStream.write(buffer, 0, r);
- }
- } finally {
- cssOutputStream.close();
- }
- } finally {
- cssInputStream.close();
- }
- }
+ copyResource("tiles.css", outputDir);
+ copyResource("tiles.js", outputDir);
Writer w = new OutputStreamWriter(new FileOutputStream(new File(
outputDir,
@@ -481,7 +486,12 @@ public void createTileHtml( int minX, int minZ, int maxX, int maxZ, File outputD
w.write("
\n");
w.write(""+mapTitle+" - 1:"+scale+"\n");
w.write("\n");
+ w.write("\n");
+ w.write("\n");
w.write("\n");
+ w.write("");
+ w.write("
Selected Tiles
\n");
w.write("");
for( int z=minZ; z<=maxZ; ++z ) {
@@ -504,7 +514,7 @@ public void createTileHtml( int minX, int minZ, int maxX, int maxZ, File outputD
"\tstyle=\""+style+"\"\n"+
"\ttitle=\""+title+"\"\n"+
"\tname=\""+name+"\"\n"+
- "\thref=\""+fullSizeImageFilename+"\"\n"+
+ "\thref=\"javascript:toggleTile('"+name+"');\"\n"+
"> ");
}
}
diff --git a/src/togos/minecraft/maprend/tiles.css b/src/togos/minecraft/maprend/tiles.css
index 78e5385..7601897 100644
--- a/src/togos/minecraft/maprend/tiles.css
+++ b/src/togos/minecraft/maprend/tiles.css
@@ -17,6 +17,14 @@ a.tile {
a.tile:hover {
border: 1px solid rgba(255,255,255,0.5);
}
+a.selected:before {
+ content: ' ';
+ display: block;
+ width: 100%;
+ height: 100%;
+ opacity: 0.7;
+ background-color: black;
+}
.notes, .scales-nav {
color: cornflowerblue;
@@ -36,3 +44,23 @@ p.notes, .scales-nav p, .scales-nav li {
.scales-nav p, .scales-nav ul, .scales-nav ul li {
display: inline-block;
}
+
+#selectedTiles {
+ background-color: rgba(255, 255, 255, 0.7);
+ display: flex;
+ flex-direction: column;
+ height: 100%;
+ padding: 0 1em;
+ position: fixed;
+ right: 0;
+ top: 0;
+ width: 10em;
+ z-index: 1;
+}
+#selectedTiles h1 {
+ font-size: 1.2em;
+}
+#selectedTiles textarea {
+ flex-grow: 1;
+ width: 100%;
+}
diff --git a/src/togos/minecraft/maprend/tiles.js b/src/togos/minecraft/maprend/tiles.js
new file mode 100644
index 0000000..4faea42
--- /dev/null
+++ b/src/togos/minecraft/maprend/tiles.js
@@ -0,0 +1,46 @@
+var selectedTiles = {};
+
+function toggleTile(tileName) {
+ $(`a[name='${tileName}']`).toggleClass('selected');
+ if (tileName in selectedTiles) {
+ delete selectedTiles[tileName];
+ } else {
+ selectedTiles[tileName] = true;
+ }
+ updateTextList();
+}
+
+function updateTextList() {
+ var text = '';
+ for (var tileName in selectedTiles) {
+ text += tileName + '\n';
+ }
+
+ var tilesListEl = $('#selectedTiles');
+ $('#selectedTiles textarea').val(text);
+ if (text) {
+ tilesListEl.show();
+ } else {
+ tilesListEl.hide();
+ }
+}
+
+function replaceSelected(newSelectedTiles) {
+ $('.selected').toggleClass('selected');
+ selectedTiles = {};
+ for (var i = 0; i < newSelectedTiles.length; i++) {
+ var tileName = newSelectedTiles[i];
+ var matchedTiles = $(`a[name='${tileName}']`);
+ if (matchedTiles.length) {
+ matchedTiles.toggleClass('selected');
+ selectedTiles[tileName] = true;
+ }
+
+ }
+}
+
+$(function() {
+ $('#selectedTiles textarea').on('input', function() {
+ replaceSelected($(this).val().trim().split(/\s+/));
+ });
+});