import network from "../tam/network.json"; import * as simulation from "../tam/simulation.js"; import * as map from "./map/index.js"; // Run courses simulation const coursesSimulation = simulation.start(); let courseId = 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 (courseId !== null && courseId in coursesSimulation.courses) { const course = coursesSimulation.courses[courseId]; 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
${courseId}
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 => { if (courses.length === 0) { // If no course were clicked, show nothing courseId = null; } else { // If several courses were clicked, show the one departing the soonest, // or the first moving one courses.sort((id1, id2) => { const course1 = coursesSimulation.courses[id1]; const course2 = coursesSimulation.courses[id2]; if (course1.state === "moving") { return -1; } else if (course2.state === "moving") { return 1; } else { return course1.departureTime - course2.departureTime; } }); courseId = courses[0]; } });