diff --git a/public/icon/push-pin-shadow.png b/public/icon/push-pin-shadow.png new file mode 100644 index 00000000..fc38abc9 Binary files /dev/null and b/public/icon/push-pin-shadow.png differ diff --git a/public/icon/push-pin.png b/public/icon/push-pin.png new file mode 100644 index 00000000..34ff0924 Binary files /dev/null and b/public/icon/push-pin.png differ diff --git a/src/components/maps/WorldMap.astro b/src/components/maps/WorldMap.astro index 825082ac..3921b112 100644 --- a/src/components/maps/WorldMap.astro +++ b/src/components/maps/WorldMap.astro @@ -193,7 +193,6 @@ for (let i = 0; i < markers.length; i++) { * Add player's position marker */ if ( players && Object.keys(players).length > 0 ) { - console.log(players) const playersPosition =[ convertYToScale(players.markerCoords.y), convertXToScale(players.markerCoords.x) @@ -288,16 +287,76 @@ map.setMaxBounds( ) /** - * SVG LAYERS + * CUSTOM MARKERS */ -// const svgElement = document.getElementById('svg-overlay') -// const latLngBounds = L.latLngBounds([baseTileLayer.getBounds().getSouth() + 0.9875, baseTileLayer.getBounds().getWest()], [baseTileLayer.getBounds().getNorth(), baseTileLayer.getBounds().getEast() - 1.675]); -// const svgOverlay = L.svgOverlay(svgElement, latLngBounds, { -// opacity: 0.25, -// interactive: true, -// zIndex: 10, -// }).addTo(map); +// List to be persisted in localStorage +let customMarkersList = [] + +function saveCustomMarkers() { + localStorage.setItem('custom-markers', JSON.stringify(customMarkersList)) +} + +// Stores last map coords on context +map.addEventListener('contextmenu', storeLastHeldPositions) +map.addEventListener('click', storeLastHeldPositions) + +function storeLastHeldPositions(e) { + localStorage.setItem('lastHeldXPosition', e.latlng.lng) + localStorage.setItem('lastHeldYPosition', e.latlng.lat) +} + +/** + * Function that creates custom markers and places them on the map + */ +function addCustomMarker() { + const lon = Number(localStorage.getItem('lastHeldXPosition')) + const lat = Number(localStorage.getItem('lastHeldYPosition')) + + const customMarkerIconOptions = { + iconUrl: `icon/push-pin.png`, + shadowUrl: `icon/push-pin-shadow.png`, + iconSize: [20, 20], + shadowSize: [30, 25], + iconAnchor: [0, 13], + shadowAnchor: [0, 15], + className: "fade-in" + } + const customMarkerIcon = L.icon(customMarkerIconOptions) + + // Sticks the custom marker on the map + const customMarker = L.marker([lat, lon], { icon: customMarkerIcon }).addTo(map) + customMarkersList.push({ + lat, + lon, + icon: customMarkerIconOptions + }) + + saveCustomMarkers() +} + +// Listeners for the custom add marker event +// See MarkerCreator.vue component for more details +document.addEventListener('add-custom-marker', addCustomMarker) + +/** + * Load all custom markers onto the map + */ +function loadCustomMarkersFromStorage() { + const customMarkersData = JSON.parse(localStorage.getItem('custom-markers')) + + if (!customMarkersData) return + + customMarkersList = customMarkersData + + for (let i = 0; i < customMarkersData.length; i++) { + const m = customMarkersData[i]; + console.log(m) + + L.marker([m.lat, m.lon], { icon: L.icon(m.icon) }).addTo(map) + } +} +loadCustomMarkersFromStorage() /** * UTILITIES diff --git a/src/components/maps/overlay/MarkerCreator.vue b/src/components/maps/overlay/MarkerCreator.vue index 8f2b997c..5104c618 100644 --- a/src/components/maps/overlay/MarkerCreator.vue +++ b/src/components/maps/overlay/MarkerCreator.vue @@ -1,5 +1,5 @@