181 lines
6.6 KiB
JavaScript
181 lines
6.6 KiB
JavaScript
let isPowerOn = false;
|
|
const locos = {};
|
|
let selectedLoco = null;
|
|
|
|
// Classe Loco
|
|
class Loco {
|
|
constructor(address) {
|
|
this.address = address;
|
|
this.speed = 0;
|
|
this.direction = 0;
|
|
this.functions = Array(10).fill(false);
|
|
}
|
|
|
|
setSpeed(speed) {
|
|
this.speed = speed;
|
|
}
|
|
|
|
setDirection(direction) {
|
|
this.direction = direction;
|
|
}
|
|
|
|
setFunction(index, state) {
|
|
this.functions[index] = state;
|
|
}
|
|
}
|
|
|
|
// Créer des instances de Loco pour chaque bouton image
|
|
document.querySelectorAll('.address-button').forEach(button => {
|
|
const address = button.getAttribute('data-address');
|
|
locos[address] = new Loco(address);
|
|
});
|
|
|
|
// Fonction pour mettre à jour l'affichage avec les valeurs de la locomotive sélectionnée
|
|
function updateUI() {
|
|
if (selectedLoco) {
|
|
document.getElementById('speedSlider').value = selectedLoco.speed;
|
|
updateSpeedValue(selectedLoco.speed);
|
|
document.querySelectorAll('.function-button').forEach((button, index) => {
|
|
if (selectedLoco.functions[index]) {
|
|
button.classList.add('active');
|
|
} else {
|
|
button.classList.remove('active');
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
// Fonction pour ajouter un message au log
|
|
// function addLogMessage(message) {
|
|
// const logWindow = document.getElementById('logWindow');
|
|
// const newMessage = document.createElement('div');
|
|
// newMessage.textContent = message;
|
|
// logWindow.appendChild(newMessage);
|
|
// logWindow.scrollTop = logWindow.scrollHeight;
|
|
// }
|
|
|
|
function addLogMessage(message) {
|
|
const logWindow = document.getElementById('logWindow');
|
|
logWindow.textContent = message; // Remplace le contenu du log par le nouveau message
|
|
}
|
|
|
|
// Gestionnaire d'événement pour le bouton d'alimentation
|
|
document.getElementById('powerButton').addEventListener('click', () => {
|
|
fetch('/setPower', { method: 'POST' })
|
|
.then(response => response.text())
|
|
.then(state => {
|
|
isPowerOn = state === 'true';
|
|
const powerButton = document.getElementById('powerButton');
|
|
if (isPowerOn == true) {
|
|
powerButton.classList.remove('power-off');
|
|
powerButton.classList.add('power-on');
|
|
addLogMessage('Power ON');
|
|
} else if (isPowerOn == false) {
|
|
powerButton.classList.remove('power-on');
|
|
powerButton.classList.add('power-off');
|
|
addLogMessage('Power OFF');
|
|
} else {
|
|
addLogMessage('Error for power function');
|
|
}
|
|
});
|
|
});
|
|
|
|
document.getElementById('systemHaltButton').addEventListener('click', () => {
|
|
if (selectedLoco) {
|
|
fetch(`/setSystemHalt?address=0x0000`, { method: 'POST' })
|
|
.then(() => {
|
|
document.getElementById('speedSlider').value = 0;
|
|
updateSpeedValue(0);
|
|
selectedLoco.setSpeed(0);
|
|
addLogMessage(`System Halt`);
|
|
});
|
|
}
|
|
});
|
|
|
|
document.getElementById('stopButton').addEventListener('click', () => {
|
|
if (selectedLoco) {
|
|
fetch(`/setStop?address=${selectedLoco.address}`, { method: 'POST' })
|
|
.then(() => {
|
|
document.getElementById('speedSlider').value = 0;
|
|
updateSpeedValue(0);
|
|
selectedLoco.setSpeed(0);
|
|
addLogMessage(`Stop for address ${selectedLoco.address}`);
|
|
});
|
|
}
|
|
});
|
|
|
|
document.getElementById('directionButton').addEventListener('click', () => {
|
|
if (selectedLoco) {
|
|
selectedLoco.direction = 1 - selectedLoco.direction; // Change de direction
|
|
fetch(`/setDirection?address=${selectedLoco.address}`, { method: 'POST' })
|
|
.then(() => {
|
|
document.getElementById('speedSlider').value = 0;
|
|
updateSpeedValue(0);
|
|
addLogMessage(`Direction change for address ${selectedLoco.address}`);
|
|
});
|
|
}
|
|
});
|
|
|
|
document.getElementById('speedSlider').addEventListener('input', (event) => {
|
|
if (!isPowerOn) {
|
|
addLogMessage('Power is off');
|
|
event.target.value = 0; // Réinitialiser le curseur à 0
|
|
updateSpeedValue(0);
|
|
return;
|
|
}
|
|
if (!selectedLoco) {
|
|
addLogMessage('Select a locomotive');
|
|
event.target.value = 0; // Réinitialiser le curseur à 0
|
|
updateSpeedValue(0);
|
|
return;
|
|
}
|
|
const speed = event.target.value;
|
|
fetch(`/setSpeed?address=${selectedLoco.address}&speed=${speed}`, { method: 'POST' });
|
|
selectedLoco.setSpeed(speed);
|
|
updateSpeedValue(speed);
|
|
addLogMessage(`Speed set to ${speed} for address ${selectedLoco.address}`);
|
|
});
|
|
|
|
document.querySelectorAll('.address-button').forEach(button => {
|
|
button.addEventListener('click', () => {
|
|
// Supprimer la classe 'selected' de tous les boutons
|
|
document.querySelectorAll('.address-button').forEach(btn => btn.classList.remove('selected'));
|
|
// Ajouter la classe 'selected' au bouton cliqué
|
|
button.classList.add('selected');
|
|
// Mettre à jour la locomotive sélectionnée
|
|
const address = button.getAttribute('data-address');
|
|
selectedLoco = locos[address];
|
|
// Envoyer l'adresse au serveur
|
|
fetch(`/setAddress?address=${address}`, { method: 'POST' });
|
|
// Mettre à jour l'interface utilisateur avec les valeurs de la locomotive sélectionnée
|
|
updateUI();
|
|
addLogMessage(`Locomotive selected with address ${address}`);
|
|
});
|
|
});
|
|
|
|
document.querySelectorAll('.function-button').forEach(button => {
|
|
button.addEventListener('click', () => {
|
|
if (selectedLoco) {
|
|
const functionId = button.getAttribute('data-function');
|
|
const newState = !selectedLoco.functions[functionId];
|
|
fetch(`/setFunction?address=${selectedLoco.address}&function=${functionId}&power=${newState ? 1 : 0}`, { method: 'POST' })
|
|
.then(() => {
|
|
selectedLoco.setFunction(functionId, newState);
|
|
if (newState) {
|
|
button.classList.add('active');
|
|
addLogMessage(`Function F ${functionId} activated for address ${selectedLoco.address}`);
|
|
} else {
|
|
button.classList.remove('active');
|
|
addLogMessage(`Function F ${functionId} deactivated for address ${selectedLoco.address}`);
|
|
}
|
|
});
|
|
}
|
|
});
|
|
});
|
|
|
|
function updateSpeedValue(speed) {
|
|
const speedValue = document.getElementById('speedValue');
|
|
const percentage = (speed / 1000) * 100;
|
|
speedValue.textContent = Math.round(percentage);
|
|
}
|