import network from "../data/network.json"; import * as simulation from "../data/simulation.js"; import * as map from "./map/index.js"; // Run courses simulation const coursesSimulation = simulation.start(); let selectedCourse = null; window.__courses = coursesSimulation.courses; window.__network = network; // Create display panel const panel = document.querySelector("#panel"); const displayTime = date => [ date.getHours(), date.getMinutes(), date.getSeconds() ].map(number => number.toString().padStart(2, "0")).join(":"); const timeToHTML = time => { const delta = Math.ceil((time - Date.now()) / 1000); if (delta <= 0) { return `Imminent`; } else if (delta < 60) { return `${delta} s`; } else { return `${Math.floor(delta / 60)} min ${delta % 60} s`; } }; setInterval(() => { let html = `
Heure actuelle
${displayTime(new Date())}
`; if (selectedCourse !== null && selectedCourse in coursesSimulation.courses) { const course = coursesSimulation.courses[selectedCourse]; const stopToHTML = stopId => stopId in network.stops ? network.stops[stopId].properties.name : 'Arrêt inconnu'; const passingsToHTML = passings => passings.map(([stopId, time]) => ` ${stopToHTML(stopId)} ${displayTime(new Date(time))} `).join("\n"); const state = ( course.traveledDistance === 0 && course.speed === 0 ? "stopped" : "moving" ); let prevPassings = course.prevPassings; if (state === "moving") { prevPassings = prevPassings.concat([[course.departureStop, course.departureTime]]); } html += `
ID
${selectedCourse}
Ligne
${course.line}
Destination
${stopToHTML(course.finalStop)}
État
${state === "moving" ? `Entre ${stopToHTML(course.departureStop)} et ${stopToHTML(course.arrivalStop)}` : `À l’arrêt ${stopToHTML(course.departureStop)}`}
${state === "moving" ? `
Arrivée dans
${timeToHTML(course.arrivalTime - 10000)}
Distance parcourue
${Math.ceil(course.traveledDistance)} m
Vitesse
${Math.ceil(course.speed * 3600)} km/h
` : `
Départ dans
${timeToHTML(course.departureTime)}
`}

Arrêts précédents

${passingsToHTML(prevPassings)}

Arrêts suivants

${passingsToHTML(course.nextPassings)}
`; } panel.innerHTML = html; }, 1000); // Create the network and courses map map.create(/* map = */ "map", coursesSimulation, courses => { const index = courses.indexOf(selectedCourse); if (courses.length === 0) { selectedCourse = null; } else if (index === -1) { selectedCourse = courses[0]; } else { selectedCourse = courses[(index + 1) % courses.length]; } });