diff --git a/templates/quiz_buzzer_multiplayer.html b/templates/quiz_buzzer_multiplayer.html index 3951115..9bab077 100644 --- a/templates/quiz_buzzer_multiplayer.html +++ b/templates/quiz_buzzer_multiplayer.html @@ -243,6 +243,9 @@ let decayRate = parseInt(localStorage.getItem('buzzer_decay_rate')) || 50; let gameStarted = false; let currentBuzzer = null; + let buzzedPlayers = []; // Liste der Spieler die schon gebuzzert haben + let canBuzz = false; // Kann man buzzern? + let pendingPoints = 0; // Punkte die noch nicht gezählt wurden // Lade Team-Namen und Anzahl const teamCount = parseInt(localStorage.getItem('team_count')) || 4; @@ -256,6 +259,14 @@ { id: 4, name: teamNames[3] || 'Spieler 4', score: {{ player_scores[3] if player_scores else 0 }} } ]; + // Leertaste zum Buzzern + document.addEventListener('keydown', function(e) { + if (e.code === 'Space' && canBuzz && !currentBuzzer) { + e.preventDefault(); + triggerBuzz(); + } + }); + window.onSpotifyWebPlaybackSDKReady = () => { const token = '{{ access_token }}'; const player = new Spotify.Player({ @@ -330,6 +341,7 @@ gameStarted = true; document.getElementById('startButton').classList.add('disabled'); document.getElementById('startButton').style.cursor = 'wait'; + document.getElementById('buzzerHint').style.display = 'block'; const device_id = window.deviceId; const startPosition = getOption('startPosition', 'start'); @@ -344,21 +356,19 @@ .then(() => { console.log('Play command sent'); document.getElementById('startButton').style.display = 'none'; - // Aktiviere Buzzer - for (let i = 1; i <= 4; i++) { - document.getElementById(`buzzer${i}`).classList.remove('disabled'); - } + canBuzz = true; }) .catch(error => console.error('Error starting playback:', error)); } function startBuzzerTimer() { startTime = Date.now(); + canBuzz = true; updateTimer(); } function updateTimer() { - if (currentBuzzer) return; + if (!canBuzz && currentBuzzer) return; const elapsed = (Date.now() - startTime) / 1000; const timerDisplay = document.getElementById('buzzerTimer'); @@ -394,11 +404,11 @@ return points; } - function buzz(playerId) { + function triggerBuzz() { if (currentBuzzer !== null) return; - if (!gameStarted || !startTime) return; + if (!canBuzz) return; - currentBuzzer = playerId; + canBuzz = false; // Verhindere weitere Buzzes buzzTime = Date.now(); const elapsed = (buzzTime - startTime) / 1000; @@ -408,17 +418,33 @@ window.spotifyPlayer.pause(); } - // Markiere Spieler - document.getElementById(`player${playerId}`).classList.add('buzzed'); - document.getElementById('currentPlayer').textContent = `${players[playerId - 1].name} hat gebuzzert!`; - - // Deaktiviere alle Buzzer - for (let i = 1; i <= 4; i++) { - document.getElementById(`buzzer${i}`).classList.add('disabled'); + // Zeige Spielerauswahl + document.getElementById('playerSelection').style.display = 'block'; + document.getElementById('currentPlayer').textContent = 'Wer hat gebuzzert?'; + pendingPoints = calculatePoints(elapsed); + } + + function selectPlayer(playerId) { + if (buzzedPlayers.includes(playerId)) { + alert('Dieser Spieler hat bereits gebuzzert!'); + return; } + currentBuzzer = playerId; + buzzedPlayers.push(playerId); + + // Markiere Spieler + document.getElementById(`player${playerId}`).classList.add('buzzed'); + document.getElementById('currentPlayer').textContent = `${players[playerId - 1].name} antwortet...`; + + // Verstecke Spielerauswahl, zeige Antwortfeld + document.getElementById('playerSelection').style.display = 'none'; document.getElementById('answerSection').classList.add('active'); - window.earnedPoints = calculatePoints(elapsed); + window.earnedPoints = pendingPoints; + } + + function buzz(playerId) { + selectPlayer(playerId); } function setCorrectAnswer() { @@ -486,6 +512,10 @@ const guess = document.getElementById('answerInput').value; if (!guess) return; + // Disable input während Prüfung + document.getElementById('answerInput').disabled = true; + document.querySelector('button[onclick="checkAnswer()"]').disabled = true; + fetch('/check_answer_buzzer', { method: 'POST', headers: { 'Content-Type': 'application/json' }, @@ -495,7 +525,8 @@ game_mode: currentGameMode, playlist_id: '{{ playlist_id }}', earned_points: window.earnedPoints, - player_id: currentBuzzer + player_id: currentBuzzer, + apply_points: false // Punkte NICHT sofort anwenden }) }) .then(response => response.json()) @@ -503,45 +534,95 @@ const resultContainer = document.getElementById('resultContainer'); if (data.correct) { - players[currentBuzzer - 1].score += window.earnedPoints; - updateScoreboard(); + // Speichere Punkte, aber wende sie noch NICHT an + pendingPoints = window.earnedPoints; resultContainer.innerHTML = `
+${window.earnedPoints} Punkte für ${players[currentBuzzer - 1].name}!
+Titel: {{ track.name | clean }}
+Künstler: {{ track.artists[0].name | clean }}
+Album: {{ track.album.name | clean }}
+ Auf Spotify öffnen +${i18n.your_answer || 'Your answer'}: ${guess}
-${i18n.correct_answer || 'Correct answer'}: ${data.correct_answer}
+Deine Antwort: ${guess}
+-${minusPoints} Punkte für ${players[currentBuzzer - 1].name}
+${i18n.title || 'Title'}: {{ track.name | clean }}
-${i18n.artist || 'Artist'}: {{ track.artists[0].name | clean }}
-${i18n.album || 'Album'}: {{ track.album.name | clean }}
-${i18n.year || 'Year'}: {{ track.album.release_date[:4] }}
- ${i18n.open_on_spotify || 'Open on Spotify'} -Titel: {{ track.name | clean }}
+Künstler: {{ track.artists[0].name | clean }}
+Album: {{ track.album.name | clean }}
+ Auf Spotify öffnen +