Added current player marker
This commit is contained in:
BIN
public/icons/location-pin-shadow.png
Normal file
BIN
public/icons/location-pin-shadow.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.2 KiB |
BIN
public/icons/location-pin.png
Normal file
BIN
public/icons/location-pin.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.7 KiB |
@@ -2,15 +2,16 @@
|
|||||||
import type { MapMarker } from '@/types/Leaflet';
|
import type { MapMarker } from '@/types/Leaflet';
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
markers: MapMarker;
|
markers: MapMarker[];
|
||||||
|
players?: MapMarker;
|
||||||
}
|
}
|
||||||
|
|
||||||
const { markers } = Astro.props
|
const { markers, players } = Astro.props
|
||||||
---
|
---
|
||||||
|
|
||||||
<div id="map"></div>
|
<div id="map"></div>
|
||||||
|
|
||||||
<script lang="ts" define:vars={{ markers }}>
|
<script lang="ts" define:vars={{ markers, players }}>
|
||||||
const mapHeight = 15168;
|
const mapHeight = 15168;
|
||||||
const mapWidth = 14658;
|
const mapWidth = 14658;
|
||||||
|
|
||||||
@@ -29,6 +30,7 @@ const { markers } = Astro.props
|
|||||||
}).addTo(map);
|
}).addTo(map);
|
||||||
|
|
||||||
const layerGroups = {
|
const layerGroups = {
|
||||||
|
players: L.layerGroup(),
|
||||||
capitals: L.layerGroup(),
|
capitals: L.layerGroup(),
|
||||||
cities: L.layerGroup(),
|
cities: L.layerGroup(),
|
||||||
towns: L.layerGroup(),
|
towns: L.layerGroup(),
|
||||||
@@ -38,8 +40,6 @@ const { markers } = Astro.props
|
|||||||
/**
|
/**
|
||||||
* Build all markers and their related info
|
* Build all markers and their related info
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
for (let i = 0; i < markers.length; i++) {
|
for (let i = 0; i < markers.length; i++) {
|
||||||
const m = markers[i];
|
const m = markers[i];
|
||||||
|
|
||||||
@@ -53,9 +53,9 @@ const { markers } = Astro.props
|
|||||||
iconUrl: `icons/castle.png`,
|
iconUrl: `icons/castle.png`,
|
||||||
shadowUrl: `icons/castle-shadow.png`,
|
shadowUrl: `icons/castle-shadow.png`,
|
||||||
iconSize: [25, 25],
|
iconSize: [25, 25],
|
||||||
shadowSize: [40, 30],
|
shadowSize: [35, 30],
|
||||||
iconAnchor: [12.5, 8],
|
iconAnchor: [12.5, 8],
|
||||||
shadowAnchor: [12.5, 12]
|
shadowAnchor: [11, 12]
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -104,6 +104,27 @@ const { markers } = Astro.props
|
|||||||
marker.addTo(layerGroups[m.group])
|
marker.addTo(layerGroups[m.group])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add player's position marker
|
||||||
|
*/
|
||||||
|
if ( players ) {
|
||||||
|
const playersPosition = [players.markerCoords.y, players.markerCoords.x];
|
||||||
|
|
||||||
|
const playerIcon = L.icon({
|
||||||
|
iconUrl: `icons/location-pin.png`,
|
||||||
|
shadowUrl: `icons/location-pin-shadow.png`,
|
||||||
|
iconSize: [18, 24],
|
||||||
|
shadowSize: [20, 16],
|
||||||
|
iconAnchor: [11, 8],
|
||||||
|
shadowAnchor: [3, 0],
|
||||||
|
});
|
||||||
|
|
||||||
|
const playerMarker = L.marker(playersPosition, { icon: playerIcon }).addTo(map)
|
||||||
|
playerMarker.addTo(layerGroups['players'])
|
||||||
|
|
||||||
|
console.log(map)
|
||||||
|
}
|
||||||
|
|
||||||
map.fitBounds(layer.getBounds());
|
map.fitBounds(layer.getBounds());
|
||||||
|
|
||||||
// L.control.layers({ "base": layer }, layerGroups).addTo(map);
|
// L.control.layers({ "base": layer }, layerGroups).addTo(map);
|
||||||
|
|||||||
9
src/pages/api/data/players.markers.ts
Normal file
9
src/pages/api/data/players.markers.ts
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
import type { PlayerMarker } from "@/types/Leaflet";
|
||||||
|
|
||||||
|
export const playerPosition: PlayerMarker = {
|
||||||
|
markerCoords: {
|
||||||
|
y: -57.83673,
|
||||||
|
x: 162.05197
|
||||||
|
},
|
||||||
|
title: "L'Éclipse",
|
||||||
|
}
|
||||||
8
src/pages/api/players.json.ts
Normal file
8
src/pages/api/players.json.ts
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
import type { APIRoute } from "astro";
|
||||||
|
import { playerPosition } from "./data/players.markers";
|
||||||
|
|
||||||
|
export const GET: APIRoute = ({ params, request }) => {
|
||||||
|
return new Response(
|
||||||
|
JSON.stringify(playerPosition)
|
||||||
|
)
|
||||||
|
}
|
||||||
@@ -2,10 +2,12 @@
|
|||||||
import Layout from '../layouts/Layout.astro';
|
import Layout from '../layouts/Layout.astro';
|
||||||
import AllianceKaldelienne from '../components/maps/AllianceKaldelienne.astro'
|
import AllianceKaldelienne from '../components/maps/AllianceKaldelienne.astro'
|
||||||
|
|
||||||
const res = await fetch('http://localhost:4321/api/markers.json');
|
const fetchLandMarkers = await fetch('http://localhost:4321/api/markers.json');
|
||||||
const data = await res.json();
|
const fetchPlayersPosition = await fetch('http://localhost:4321/api/players.json');
|
||||||
|
const landData = await fetchLandMarkers.json();
|
||||||
|
const playerCoords = await fetchPlayersPosition.json();
|
||||||
---
|
---
|
||||||
|
|
||||||
<Layout title="Leim Wiki - Cartographie">
|
<Layout title="Leim Wiki - Cartographie">
|
||||||
<AllianceKaldelienne markers={data} />
|
<AllianceKaldelienne markers={landData} players={playerCoords} />
|
||||||
</Layout>
|
</Layout>
|
||||||
|
|||||||
@@ -10,3 +10,13 @@ export type MapMarker = {
|
|||||||
link?: string,
|
link?: string,
|
||||||
group?: MapMarkerGroup,
|
group?: MapMarkerGroup,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export type PlayerMarker = {
|
||||||
|
title: string,
|
||||||
|
markerCoords: {
|
||||||
|
x: number,
|
||||||
|
y: number,
|
||||||
|
}
|
||||||
|
description?: string,
|
||||||
|
link?: string,
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user