89 lines
2.7 KiB
JavaScript
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?.());
|
|
}
|