diff --git a/src/manageTemplates.ts b/src/manageTemplates.ts index d2087be..e4297ef 100644 --- a/src/manageTemplates.ts +++ b/src/manageTemplates.ts @@ -2,7 +2,7 @@ import { TBlueMarbleJSON, TBlueMarbleTemplate, TCharityTemplate } from "../types import { Schemas } from "../types/types"; import { dataManager, uiManager } from "./main"; import { drawAllTemplates } from "./templates"; -import { coordinatesToLatLng, createElementWithAttributes, download } from "./utils"; +import { createElementWithAttributes, download } from "./utils"; // Typescript / Javascript for the "manageTemplates" window @@ -50,9 +50,13 @@ function exportToggle(idx: number){ */ function flyToTemplate(idx: number){ const coordsArr = (dataManager.get() as TBlueMarbleJSON).templates[idx].coords; - const lngLat = coordinatesToLatLng(coordsArr); - if(!lngLat){ return }; - charity.game.map.flyTo({center: lngLat, zoom: 9}) // Fly to the template's position + const zoom = charity.game.map.getZoom(); + // Convert to Px and Py used in mercator's functions + const mercatorPixelsX = coordsArr[0]*1000+coordsArr[2]; // Tx * 1000 + Px + const mercatorPixelsY = coordsArr[1]*1000+coordsArr[3]; // Ty * 1000 + Px + const lngLatBounds = charity.game.mercator.pixelsToLatLon(mercatorPixelsX, mercatorPixelsY, zoom); + if(!lngLatBounds){ return }; + charity.game.map.flyTo({center: lngLatBounds, zoom: 9}) // Fly to the template's position } /**Creates a one-click shareable link for the given template and copies it to the clipboard diff --git a/src/utils.ts b/src/utils.ts index 7a2d08c..7ac710a 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -58,29 +58,4 @@ export function generateUUID(): string{ } return uuid; -} - -/**Converts a 4 element array of coordinates into map longitude and latitude - * @param {number[]} coordinates A 4 element array of coordinates (Tile X, Tile Y, Pixel X, Pixel Y) - * @returns A lngLat object or undefined if an error occured e.g. malformed coordinates data - * @since 0.3.0-overhaul - */ -export function coordinatesToLatLng(coordinates: number[]): {lng: number, lat: number} | undefined{ - // Function provided by courtesy of CloudBurst - if(coordinates.length !== 4) { return }; - let actualX = (coordinates[0] * 1000) + coordinates[2]; - let actualY = (coordinates[1] * 1000) + coordinates[3]; - - const mapSize = 2048000; - - let x = actualX / mapSize; - let y = actualY / mapSize; - - function inverseO_(n: number) { return 360 * x - 180 } - function inverseN_(n: number) { return (Math.atan(Math.exp(Math.PI - 2 * Math.PI * n)) - Math.PI / 4) * 360 / Math.PI; } - - return { - lng: inverseO_(x), - lat: inverseN_(y) - } } \ No newline at end of file