SOULGATE/client/js/bindings.js
2026-05-04 03:42:47 +02:00

89 lines
2.7 KiB
JavaScript

// bindings.js : tous les listeners DOM du menu et du lobby
import { send } from './network.js';
export function bindEvents(callbacks) {
const $ = id => document.getElementById(id);
// pseudo
$('username-btn').addEventListener('click', () => {
const v = $('username-input').value.trim();
if (v) {
callbacks.setUsername(v);
send('set_username', { username: v });
}
});
$('username-input').addEventListener('keydown', e => {
if (e.key === 'Enter') $('username-btn').click();
});
// creer une partie
$('create-game-btn').addEventListener('click', () => send('create_lobby'));
// rejoindre une partie
$('join-game-btn').addEventListener('click', () => {
$('home-buttons').classList.add('hidden');
$('join-row').classList.remove('hidden');
$('code-input').focus();
});
$('join-confirm-btn').addEventListener('click', () => {
const code = $('code-input').value.trim().toUpperCase();
if (code) send('join_lobby', { code });
});
$('code-input').addEventListener('keydown', e => {
if (e.key === 'Enter') $('join-confirm-btn').click();
});
$('join-cancel-btn').addEventListener('click', () => {
$('join-row').classList.add('hidden');
$('home-buttons').classList.remove('hidden');
});
// retour au menu
$('lobby-back-btn').addEventListener('click', () => {
send('leave_lobby');
callbacks.switchToHome();
});
// selection de classe
document.querySelectorAll('.class-btn').forEach(btn => {
btn.addEventListener('click', () => {
document.querySelectorAll('.class-btn').forEach(b => b.classList.remove('active'));
btn.classList.add('active');
send('select_class', { class: btn.dataset.class });
$('ready-btn').disabled = false;
});
});
// pret
$('ready-btn').addEventListener('click', () => {
send('ready');
$('ready-btn').disabled = true;
});
// demarrer (host)
$('start-btn').addEventListener('click', () => send('start_game'));
// plein ecran
$('fullscreen-btn')?.addEventListener('click', () => {
if (!document.fullscreenElement) {
document.documentElement.requestFullscreen();
} else {
document.exitFullscreen();
}
});
// settings (todo)
$('settings-btn').addEventListener('click', () => {
callbacks.notify('Settings coming soon');
});
// leaderboard
$('leaderboard-btn').addEventListener('click', () => callbacks.showLeaderboard?.());
$('lb-back-btn').addEventListener('click', () => callbacks.hideLeaderboard?.());
}