MinedMap/viewer/MinedMap.js

94 lines
2 KiB
JavaScript
Raw Normal View History

2015-02-02 09:08:36 +01:00
var MinedMapLayer = L.GridLayer.extend({
2015-02-02 18:39:44 +01:00
initialize: function (info, regions) {
this._info = info;
this._regions = regions;
2015-02-02 09:08:36 +01:00
2015-02-02 09:34:38 +01:00
this.options.attribution = 'Generated by <a href="http://git.universe-factory.net/MinedMap/">MinedMap</a>';
2015-02-02 09:08:36 +01:00
if (!L.Browser.android) {
this.on('tileunload', this._onTileRemove);
}
},
createTile: function (coords, done) {
var tile = document.createElement('img');
tile.onload = L.bind(this._tileOnLoad, this, done, tile);
tile.onerror = L.bind(this._tileOnError, this, done, tile);
tile.alt = '';
if (coords.x >= this._info.minX && coords.x <= this._info.maxX &&
coords.y >= this._info.minZ && coords.y <= this._info.maxZ &&
this._regions[coords.y-this._info.minZ][coords.x-this._info.minX])
2015-02-03 13:13:12 +01:00
tile.src = 'data/map/0/r.'+coords.x+'.'+coords.y+'.png';
2015-02-02 09:08:36 +01:00
return tile;
},
_tileOnLoad: function (done, tile) {
done(null, tile);
},
_tileOnError: function (done, tile, e) {
done(e, tile);
},
_getTileSize: function () {
2015-02-02 10:53:23 +01:00
var map = this._map, zoom = map.getZoom();
if (zoom > 0)
return Math.round(map.getZoomScale(map.getZoom(), 0) * 512);
else
return 512;
2015-02-02 09:08:36 +01:00
},
_onTileRemove: function (e) {
e.tile.onload = null;
e.tile.src = L.Util.emptyImageUrl;
},
_abortLoading: function () {
var i, tile;
for (i in this._tiles) {
tile = this._tiles[i].el;
tile.onload = L.Util.falseFn;
tile.onerror = L.Util.falseFn;
if (!tile.complete) {
tile.src = L.Util.emptyImageUrl;
L.DomUtil.remove(tile);
}
}
}
});
window.createMap = function () {
var xhr = new XMLHttpRequest();
xhr.onload = function () {
2015-02-02 18:39:44 +01:00
var res = JSON.parse(this.responseText),
info = res.info,
regions = res.regions,
spawn = res.spawn;
2015-02-02 09:08:36 +01:00
var map = L.map('map', {
2015-02-02 18:39:44 +01:00
center: [-spawn.z, spawn.x],
zoom: 0,
minZoom: 0,
2015-02-02 14:18:04 +01:00
maxZoom: 3,
2015-02-02 09:08:36 +01:00
crs: L.CRS.Simple,
maxBounds: [
2015-02-02 18:39:44 +01:00
[-512*(info.maxZ+1), 512*info.minX],
[-512*info.minZ, 512*(info.maxX+1)],
2015-02-02 09:08:36 +01:00
],
});
2015-02-02 18:39:44 +01:00
(new MinedMapLayer(info, regions)).addTo(map);
2015-02-02 09:08:36 +01:00
};
xhr.open('GET', 'data/info.json', true);
xhr.send();
}