diff --git a/src/main/java/org/dynmap/ClientConfigurationComponent.java b/src/main/java/org/dynmap/ClientConfigurationComponent.java index 6c795e79..aa54146f 100644 --- a/src/main/java/org/dynmap/ClientConfigurationComponent.java +++ b/src/main/java/org/dynmap/ClientConfigurationComponent.java @@ -33,6 +33,7 @@ public class ClientConfigurationComponent extends Component { s(wo, "center/y", wn.getFloat("center/y", 64.0f)); s(wo, "center/z", wn.getFloat("center/z", 0.0f)); s(wo, "bigworld", world.bigworld); + s(wo, "extrazoomout", world.extrazoomoutlevels); a(t, "worlds", wo); for(MapType mt : world.maps) { diff --git a/web/js/flatmap.js b/web/js/flatmap.js index ef68cb59..33b7ae79 100644 --- a/web/js/flatmap.js +++ b/web/js/flatmap.js @@ -28,13 +28,25 @@ FlatMapType.prototype = $.extend(new DynMapType(), { var dnprefix = ''; if(this.dynmap.map.mapTypes[this.dynmap.map.mapTypeId].nightandday && this.dynmap.serverday) dnprefix = '_day'; - - if(this.dynmap.world.bigworld) - tileName = this.prefix + dnprefix + '_128/' + (coord.x >> 5) + '_' + (coord.y >> 5) + - '/' + coord.x + '_' + coord.y + '.png'; - else - tileName = this.prefix + dnprefix + '_128_' + coord.x + '_' + coord.y + '.png'; - imgSize = Math.pow(2, 7+zoom); + var extrazoom = this.dynmap.world.extrazoomout; + if(zoom < extrazoom) { + var scale = 1 << (extrazoom-zoom); + var zprefix = "zzzzzzzzzzzz".substring(0, extrazoom-zoom); + if(this.dynmap.world.bigworld) + tileName = this.prefix + dnprefix + '_128/' + ((scale*coord.x) >> 5) + '_' + ((scale*coord.y) >> 5) + + '/' + zprefix + "_" + (scale*coord.x) + '_' + (scale*coord.y) + '.png'; + else + tileName = zprefix + this.prefix + dnprefix + '_128_' + (scale*coord.x) + '_' + (scale*coord.y) + '.png'; + imgSize = 128; + } + else { + if(this.dynmap.world.bigworld) + tileName = this.prefix + dnprefix + '_128/' + (coord.x >> 5) + '_' + (coord.y >> 5) + + '/' + coord.x + '_' + coord.y + '.png'; + else + tileName = this.prefix + dnprefix + '_128_' + coord.x + '_' + coord.y + '.png'; + imgSize = Math.pow(2, 7+zoom-extrazoom); + } var tile = $('
') .addClass('tile') .css({ @@ -58,7 +70,14 @@ FlatMapType.prototype = $.extend(new DynMapType(), { }, updateTileSize: function(zoom) { var size; - size = Math.pow(2, 7+zoom); + var extrazoom = this.dynmap.world.extrazoomout; + this.maxZoom = 3 + extrazoom; + if (zoom <= extrazoom) { + size = 128; + } + else { + size = Math.pow(2, 7+zoom-extrazoom); + } this.tileSize = new google.maps.Size(size, size); } }); diff --git a/web/js/kzedmaps.js b/web/js/kzedmaps.js index 6cda0d67..aa8c468d 100644 --- a/web/js/kzedmaps.js +++ b/web/js/kzedmaps.js @@ -45,25 +45,27 @@ KzedMapType.prototype = $.extend(new DynMapType(), { var dnprefix = ''; if(this.dynmap.map.mapTypes[this.dynmap.map.mapTypeId].nightandday && this.dynmap.serverday) - dnprefix = '_day'; - - if (zoom == 0) { + dnprefix = '_day'; + var extrazoom = this.dynmap.world.extrazoomout; + if (zoom <= extrazoom) { + var zpre = 'zzzzzzzzzzzzzzzz'.substring(0, extrazoom-zoom+1); // Most zoomed out tiles. tileSize = 128; - imgSize = tileSize; + imgSize = tileSize; + var tilescale = 2 << (extrazoom-zoom); if (this.dynmap.world.bigworld) { - tileName = 'z' + this.prefix + dnprefix + '/' + ((-coord.x * tileSize*2)>>12) + - '_' + ((coord.y * tileSize*2) >> 12) + '/' + - (-coord.x * tileSize*2) + '_' + (coord.y * tileSize*2) + '.png'; + tileName = zpre + this.prefix + dnprefix + '/' + ((-coord.x * tileSize*tilescale)>>12) + + '_' + ((coord.y * tileSize*tilescale) >> 12) + '/' + + (-coord.x * tileSize*tilescale) + '_' + (coord.y * tileSize*tilescale) + '.png'; } else { - tileName = 'z' + this.prefix + dnprefix + '_' + (-coord.x * tileSize*2) + '_' + (coord.y * tileSize*2) + '.png'; + tileName = zpre + this.prefix + dnprefix + '_' + (-coord.x * tileSize*tilescale) + '_' + (coord.y * tileSize*tilescale) + '.png'; } } else { // Other zoom levels. tileSize = 128; - imgSize = Math.pow(2, 6+zoom); + imgSize = Math.pow(2, 6+zoom-extrazoom); if(this.dynmap.world.bigworld) { tileName = this.prefix + dnprefix + '/' + ((-coord.x*tileSize) >> 12) + '_' + ((coord.y*tileSize)>>12) + '/' + @@ -109,10 +111,12 @@ KzedMapType.prototype = $.extend(new DynMapType(), { }, updateTileSize: function(zoom) { var size; - if (zoom == 0) { + var extrazoom = this.dynmap.world.extrazoomout; + this.maxZoom = 3 + extrazoom; + if (zoom <= extrazoom) { size = 128; } else { - size = Math.pow(2, 6+zoom); + size = Math.pow(2, 6+zoom-extrazoom); } this.tileSize = new google.maps.Size(size, size); }