You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
81 lines
1.6 KiB
JavaScript
81 lines
1.6 KiB
JavaScript
const SETTINGS = {
|
|
cellSize: 2048,
|
|
cellOffsetY: 20,
|
|
cellOffsetX: 8,
|
|
};
|
|
|
|
|
|
const GameCRS = Object.assign({}, L.CRS, {
|
|
scale(zoom) {
|
|
return Math.pow(2, zoom);
|
|
},
|
|
|
|
zoom(scale) {
|
|
return Math.log(scale) / Math.LN2;
|
|
},
|
|
|
|
distance(latlng1, latlng2) {
|
|
let dx = latlng2.lng - latlng1.lng,
|
|
dy = latlng2.lat - latlng1.lat;
|
|
|
|
return Math.sqrt(dx * dx + dy * dy);
|
|
},
|
|
projection: L.Projection.LonLat,
|
|
|
|
wrapLng: [-128, 128],
|
|
wrapLat: [-128, 128],
|
|
transformation: L.transformation(1, 128, 1, 128),
|
|
infinite: false
|
|
});
|
|
|
|
const map = document.querySelector('.map');
|
|
const lMap = L.map(map, {
|
|
zoom: 0,
|
|
center: [0, 0],
|
|
crs: GameCRS
|
|
});
|
|
|
|
L.tileLayer('/tileset/mwmap/zoom{z}/vvardenfell-{x}-{y}-{z}.jpg', {
|
|
attribution: 'uesp.net',
|
|
minZoom: 0,
|
|
maxZoom: 7,
|
|
zoomOffset: 10,
|
|
}).addTo(lMap);
|
|
|
|
document.addEventListener('DOMContentLoaded', () => lMap.invalidateSize());
|
|
document.addEventListener('resize', () => lMap.invalidateSize());
|
|
|
|
setMarkers();
|
|
|
|
async function setMarkers() {
|
|
let markers = await fetch('http://yoko/tes3mp/assets/json/LiveMap.json');
|
|
|
|
for (let [name, details] of Object.entries(await markers.json())) {
|
|
L.marker(translateLocationGameToMap(details.x, details.y)).addTo(lMap)
|
|
}
|
|
}
|
|
|
|
function translateLocationGameToMap(x, y) {
|
|
const trans = [
|
|
(-y / SETTINGS.cellSize) + SETTINGS.cellOffsetY,
|
|
(x / SETTINGS.cellSize) + SETTINGS.cellOffsetX,
|
|
];
|
|
|
|
console.log(trans);
|
|
return trans;
|
|
}
|
|
|
|
class NwahMap {
|
|
constructor(settings) {
|
|
this.markers = {};
|
|
this.settings = settings;
|
|
}
|
|
|
|
init(map) {
|
|
|
|
}
|
|
|
|
translateGameLocToLatLng(x, y) {
|
|
return L.LatLng
|
|
}
|
|
} |