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+/)); + }); +});