Support dynmap tilescale
This commit is contained in:
parent
af8f197a3e
commit
dfcaa6bf42
6
src/dynmap.d.ts
vendored
6
src/dynmap.d.ts
vendored
@ -29,6 +29,12 @@ declare global {
|
||||
}
|
||||
}
|
||||
|
||||
declare module 'dynmap' {
|
||||
interface WorldMapConfiguration {
|
||||
tilescale?: number;
|
||||
}
|
||||
}
|
||||
|
||||
type DynmapUrlConfig = {
|
||||
configuration: string;
|
||||
update: string;
|
||||
|
@ -56,7 +56,7 @@ export abstract class LiveAtlasTileLayer extends TileLayer {
|
||||
options.maxZoom = this._mapSettings.nativeZoomLevels + this._mapSettings.extraZoomLevels;
|
||||
options.maxNativeZoom = this._mapSettings.nativeZoomLevels;
|
||||
options.zoomReverse = true;
|
||||
options.tileSize = 128;
|
||||
options.tileSize = this._mapSettings.tileSize;
|
||||
options.minZoom = 0;
|
||||
|
||||
Util.setOptions(this, options);
|
||||
|
@ -26,7 +26,6 @@ export class Pl3xmapTileLayer extends LiveAtlasTileLayer {
|
||||
|
||||
super(`${baseUrl}${worldName}/{z}/{x}_{y}.png`, options);
|
||||
|
||||
options.tileSize = 512;
|
||||
options.zoomReverse = false;
|
||||
|
||||
Util.setOptions(this, options);
|
||||
|
@ -30,6 +30,7 @@ export interface LiveAtlasMapDefinitionOptions {
|
||||
backgroundDay?: string;
|
||||
backgroundNight?: string;
|
||||
imageFormat: ImageFormat;
|
||||
tileSize: number;
|
||||
prefix?: string;
|
||||
mapToWorld?: [number, number, number, number, number, number, number, number, number];
|
||||
worldToMap?: [number, number, number, number, number, number, number, number, number];
|
||||
@ -49,6 +50,7 @@ export default class LiveAtlasMapDefinition {
|
||||
readonly backgroundDay?: string;
|
||||
readonly backgroundNight?: string;
|
||||
readonly imageFormat: ImageFormat;
|
||||
readonly tileSize: number;
|
||||
readonly prefix: string;
|
||||
private readonly projection?: Readonly<LiveAtlasProjection>;
|
||||
readonly nativeZoomLevels: number;
|
||||
@ -69,6 +71,7 @@ export default class LiveAtlasMapDefinition {
|
||||
this.backgroundNight = options.backgroundNight || '#000000';
|
||||
|
||||
this.imageFormat = options.imageFormat;
|
||||
this.tileSize = options.tileSize;
|
||||
this.prefix = options.prefix || '';
|
||||
|
||||
this.nativeZoomLevels = options.nativeZoomLevels || 1;
|
||||
@ -81,6 +84,7 @@ export default class LiveAtlasMapDefinition {
|
||||
mapToWorld: options.mapToWorld || [0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
worldToMap: options.worldToMap || [0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
nativeZoomLevels: this.nativeZoomLevels,
|
||||
tileSize: this.tileSize
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -23,18 +23,21 @@ import {Coordinate} from "@/index";
|
||||
export interface LiveAtlasProjectionOptions {
|
||||
mapToWorld: [number, number, number, number, number, number, number, number, number],
|
||||
worldToMap: [number, number, number, number, number, number, number, number, number],
|
||||
nativeZoomLevels: number
|
||||
nativeZoomLevels: number,
|
||||
tileSize: number,
|
||||
}
|
||||
|
||||
export class LiveAtlasProjection {
|
||||
private readonly mapToWorld: [number, number, number, number, number, number, number, number, number];
|
||||
private readonly worldToMap: [number, number, number, number, number, number, number, number, number];
|
||||
private readonly nativeZoomLevels: number;
|
||||
private readonly tileSize: number;
|
||||
|
||||
constructor(options: LiveAtlasProjectionOptions) {
|
||||
this.mapToWorld = options.mapToWorld || [0, 0, 0, 0, 0, 0, 0, 0];
|
||||
this.worldToMap = options.worldToMap || [0, 0, 0, 0, 0, 0, 0, 0];
|
||||
this.nativeZoomLevels = options.nativeZoomLevels || 1;
|
||||
this.tileSize = options.tileSize;
|
||||
}
|
||||
|
||||
locationToLatLng(location: Coordinate): LatLng {
|
||||
@ -43,16 +46,16 @@ export class LiveAtlasProjection {
|
||||
lng = wtp[0] * location.x + wtp[1] * location.y + wtp[2] * location.z;
|
||||
|
||||
return new LatLng(
|
||||
-((128 - lat) / (1 << this.nativeZoomLevels)),
|
||||
-((this.tileSize - lat) / (1 << this.nativeZoomLevels)),
|
||||
lng / (1 << this.nativeZoomLevels));
|
||||
}
|
||||
|
||||
latLngToLocation(latLng: LatLng, y: number): Coordinate {
|
||||
const ptw = this.mapToWorld,
|
||||
lon = this.tileSize + latLng.lat * (1 << this.nativeZoomLevels),
|
||||
lat = latLng.lng * (1 << this.nativeZoomLevels),
|
||||
lon = 128 + latLng.lat * (1 << this.nativeZoomLevels),
|
||||
x = ptw[0] * lat + ptw[1] * lon + ptw[2] * y,
|
||||
z = ptw[6] * lat + ptw[7] * lon + ptw[8] * y;
|
||||
x = ptw[0] * lon + ptw[1] * lat + ptw[2] * y,
|
||||
z = ptw[6] * lon + ptw[7] * lat + ptw[8] * y;
|
||||
|
||||
return {x: x, y: y, z: z};
|
||||
}
|
||||
|
@ -188,6 +188,7 @@ export default class Pl3xmapMapProvider extends MapProvider {
|
||||
backgroundNight: 'transparent',
|
||||
icon: world.icon ? `${this.config}images/icon/${world.icon}.png` : undefined,
|
||||
imageFormat: 'png',
|
||||
tileSize: 512,
|
||||
name: 'flat',
|
||||
displayName: 'Flat',
|
||||
|
||||
|
@ -136,6 +136,7 @@ export function buildWorlds(response: Configuration): Array<LiveAtlasWorldDefini
|
||||
backgroundNight: map.backgroundnight || '#000000',
|
||||
icon: (map.icon || undefined) as string | undefined,
|
||||
imageFormat: map['image-format'] || 'png',
|
||||
tileSize: 128 << (map.tilescale || 0),
|
||||
name: map.name || '(Unnamed map)',
|
||||
nightAndDay: map.nightandday || false,
|
||||
prefix: map.prefix || '',
|
||||
|
Loading…
Reference in New Issue
Block a user