166 lines
No EOL
5.2 KiB
JavaScript
166 lines
No EOL
5.2 KiB
JavaScript
import { testList } from "./poi/testGroups.js";
|
|
import { coordOverlay } from "./coordOverlay.js";
|
|
import { getOverlayMaps } from "./fetching.js";
|
|
import customIcons from './iconsMap.js';
|
|
|
|
const center = 127.5;
|
|
let overlayPoi = {};
|
|
|
|
var map = L.map("map", {
|
|
crs: L.CRS.Simple,
|
|
minZoom: 1,
|
|
maxZoom: 8,
|
|
}).setView([-127.5, 127.5], 4); // Centre de la carte
|
|
|
|
var boundsMax = [
|
|
[-255, 0],
|
|
[0, 255],
|
|
];
|
|
|
|
L.tileLayer("/tiles/{z}/{x}/{y}.jpg", {
|
|
tileSize: 255, // Assurez-vous que cette valeur correspond à la taille de vos tuiles
|
|
noWrap: true,
|
|
bounds: boundsMax,
|
|
attribution: "© Asheron's call 2 maps",
|
|
}).addTo(map);
|
|
|
|
var rectangle = L.rectangle(boundsMax, { color: "#ff7800", weight: 1 });
|
|
|
|
map.on("click", function (ev) {
|
|
coordOverlay.update(GetLandBlockId(ev), coordToCardinal(ev.latlng.lat, ev.latlng.lng));
|
|
rectangle.remove();
|
|
rectLandBlock(ev, map);
|
|
});
|
|
|
|
var testtmp = L.layerGroup();
|
|
|
|
var overlayMaps = {};
|
|
|
|
async function setupOverlayMaps() {
|
|
overlayPoi = await getOverlayMaps(); // Attend que overlayPoi soit chargé
|
|
|
|
// Itérer sur les clés de overlayPoi
|
|
Object.keys(overlayPoi).forEach(key => {
|
|
const layerGroup = overlayPoi[key];
|
|
overlayMaps[key] = layerGroup; // Assigner chaque layerGroup à la clé correspondante dans overlayMaps
|
|
layerControl.addOverlay(layerGroup, key); // Ajoute chaque couche à la carte avec son nom
|
|
});
|
|
}
|
|
|
|
setupOverlayMaps(); // Appel de la fonction pour initialiser les overlayMaps
|
|
|
|
|
|
var markers = L.markerClusterGroup({
|
|
chunkedLoading: true,
|
|
disableClusteringAtZoom: 8,
|
|
});
|
|
testList.eachLayer(function (layer) {
|
|
markers.addLayer(layer);
|
|
});
|
|
|
|
var layerControl = L.control.layers(null, overlayMaps).addTo(map);
|
|
coordOverlay.addTo(map);
|
|
|
|
function GetLandBlockId(ev) {
|
|
var latlng = ev.latlng;
|
|
var pointATmp = map.project(latlng, 4);
|
|
const blockSize = 16; // Taille d'un bloc
|
|
var y = Math.floor((4080 - pointATmp.y) / blockSize);
|
|
var x = Math.floor(pointATmp.x / blockSize);
|
|
|
|
return L.point(x, y);
|
|
}
|
|
|
|
function rectLandBlock(ev, map) {
|
|
// Latitude et longitude initiales du coin supérieur gauche du rectangle
|
|
var latlng = ev.latlng;
|
|
|
|
var pointATmp = map.project(latlng, 4);
|
|
|
|
const blockSize = 16; // Taille d'un bloc
|
|
var testReverse = Math.floor((4080 - pointATmp.y) / blockSize);
|
|
var pointA = L.point(Math.round(pointATmp.x), Math.round(pointATmp.y));
|
|
const blockX = Math.floor(pointA.x / blockSize) * 16;
|
|
const blockY = Math.floor(pointA.y / blockSize) * 16;
|
|
|
|
var landX = blockX / 16;
|
|
|
|
var pointAn = L.point(blockX, blockY);
|
|
var pointB = L.point(blockX + blockSize, blockY + blockSize);
|
|
console.log(pointAn, pointB);
|
|
var latlngA = map.unproject(pointAn, 4);
|
|
var latlngB = map.unproject(pointB, 4);
|
|
|
|
// Création du rectangle
|
|
var bounds = L.latLngBounds(latlngA, latlngB);
|
|
rectangle = L.rectangle(bounds, { color: "#ff7800", weight: 1, interactive: false })
|
|
.addTo(map)
|
|
.bindPopup(
|
|
"LandBlock : 0x" +
|
|
landX.toString(16).toUpperCase().padStart(2, "0") +
|
|
"" +
|
|
testReverse.toString(16).toUpperCase().padStart(2, "0") +
|
|
"FFFF"
|
|
);
|
|
}
|
|
|
|
setInterval(fetchCharacterLocations, 5000);
|
|
|
|
// Fonction pour récupérer les positions des personnages
|
|
function fetchCharacterLocations() {
|
|
fetch("/characterloc") // Effectuer une requête GET vers /characterloc
|
|
.then((response) => response.json()) // Convertir la réponse en JSON
|
|
.then((data) => {
|
|
// Parcourir les données et afficher chaque position de personnage
|
|
data.forEach((character) => {
|
|
updateCharacterMarker(
|
|
character.literalValue,
|
|
character.locy,
|
|
character.locx
|
|
);
|
|
});
|
|
})
|
|
.catch((error) => {
|
|
console.error("Error fetching character locations:", error);
|
|
});
|
|
}
|
|
|
|
// Dictionnaire pour stocker les marqueurs des personnages
|
|
var characterMarkers = {};
|
|
// Fonction pour créer ou mettre à jour un marqueur de personnage
|
|
function updateCharacterMarker(characterId, lat, lng) {
|
|
// Vérifier si le marqueur existe déjà
|
|
if (characterMarkers[characterId]) {
|
|
// Mettre à jour la position du marqueur existant
|
|
characterMarkers[characterId].setLatLng([lat, lng]);
|
|
} else {
|
|
// Créer un nouveau marqueur
|
|
var marker = L.marker([lat, lng], { icon: customIcons.greenPlayer }).bindPopup(characterId).addTo(map);
|
|
// Stocker le marqueur dans le dictionnaire
|
|
characterMarkers[characterId] = marker;
|
|
}
|
|
}
|
|
|
|
function coordToCardinal(lat, lng) {
|
|
// Vérifier que les valeurs de lat et lng sont dans la plage spécifiée
|
|
if (lat > 0 || lat < -255 || lng < 0 || lng > 255) {
|
|
return "Coordonnées invalides";
|
|
}
|
|
let cardinalLng = 0;
|
|
if (lng < center) cardinalLng = 100 - (lng * 100 / center);
|
|
else if (lng > center) cardinalLng = (lng - center) * 100 / center;
|
|
else if (lng === center) cardinalLng = 0;
|
|
|
|
let cardinalLat = 0;
|
|
lat = lat * -1;
|
|
if (lat < center) cardinalLat = 100 - (lat * 100 / center);
|
|
else if (lat > center) cardinalLat = (lat - center) * 100 / center;
|
|
else if (lat === 0) cardinalLat = 0;
|
|
|
|
// Déterminer les directions
|
|
let directionLat = lat < center ? "N" : "S";
|
|
let directionLng = lng < center ? "W" : "E";
|
|
|
|
// Retourner la chaîne de caractères résultante
|
|
return cardinalLat.toFixed(1) + " " + directionLat + " - " + cardinalLng.toFixed(1) + " " + directionLng;
|
|
} |