Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 29 additions & 19 deletions src/togos/minecraft/maprend/RegionRenderer.java
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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,
Expand All @@ -481,7 +486,12 @@ public void createTileHtml( int minX, int minZ, int maxX, int maxZ, File outputD
w.write("<html><head>\n");
w.write("<title>"+mapTitle+" - 1:"+scale+"</title>\n");
w.write("<link rel=\"stylesheet\" type=\"text/css\" href=\"tiles.css\"/>\n");
w.write("<script type=\"text/javascript\"" +
" src=\"https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js\"></script>\n");
w.write("<script type=\"text/javascript\" src=\"tiles.js\"></script>\n");
w.write("</head><body>\n");
w.write("<div id=\"selectedTiles\" style=\"display:none;\">");
w.write("<h1>Selected Tiles</h1><textarea></textarea></div>\n");
w.write("<div style=\"height: "+(maxZ-minZ+1)*regionSize+"px\">");

for( int z=minZ; z<=maxZ; ++z ) {
Expand All @@ -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"+
">&nbsp;</a>");
}
}
Expand Down
28 changes: 28 additions & 0 deletions src/togos/minecraft/maprend/tiles.css
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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%;
}
46 changes: 46 additions & 0 deletions src/togos/minecraft/maprend/tiles.js
Original file line number Diff line number Diff line change
@@ -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+/));
});
});