Fix timer toggle: manual control, starts from set value, syncs with modTimerRunning
This commit is contained in:
@@ -86,8 +86,13 @@ function handle(msg){
|
|||||||
room=msg.room;
|
room=msg.room;
|
||||||
if(role==='mod'){renderMod();renderRoundButtons();}
|
if(role==='mod'){renderMod();renderRoundButtons();}
|
||||||
else{renderPlayerBuzzer();startPlayerTimer();}
|
else{renderPlayerBuzzer();startPlayerTimer();}
|
||||||
|
// If timer is enabled and this is a fresh open, load the timer
|
||||||
|
if(room.settings.timerSeconds>0 && modTimerRemaining===0 && !modTimerRunning){
|
||||||
|
modTimerRemaining=room.settings.timerSeconds;
|
||||||
|
renderModTimerDisplay();
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case 'round_closed':
|
case 'round_closed':
|
||||||
room=msg.room;
|
room=msg.room;
|
||||||
if(role==='mod'){renderMod();renderRoundButtons();toast('ROUND CLOSED','warn');}
|
if(role==='mod'){renderMod();renderRoundButtons();toast('ROUND CLOSED','warn');}
|
||||||
else{renderPlayerBuzzer();stopPlayerTimer();}
|
else{renderPlayerBuzzer();stopPlayerTimer();}
|
||||||
@@ -96,16 +101,7 @@ function handle(msg){
|
|||||||
room=msg.room;
|
room=msg.room;
|
||||||
if(role==='mod'){renderMod();renderRoundButtons();}else renderPlayerBuzzer();
|
if(role==='mod'){renderMod();renderRoundButtons();}else renderPlayerBuzzer();
|
||||||
break;
|
break;
|
||||||
case 'round_closed':
|
case 'buzz_event':
|
||||||
room=msg.room;
|
|
||||||
if(role==='mod')renderMod();
|
|
||||||
else{renderPlayerBuzzer();stopPlayerTimer();toast('ROUND CLOSED','warn');}
|
|
||||||
break;
|
|
||||||
case 'buzzer_reset':
|
|
||||||
room=msg.room;
|
|
||||||
if(role==='mod')renderMod();else renderPlayerBuzzer();
|
|
||||||
break;
|
|
||||||
case 'buzz_event':
|
|
||||||
room=msg.room;
|
room=msg.room;
|
||||||
if(role==='mod'){renderMod();renderRoundButtons();}else{renderPlayerBuzzer();addFeed(msg);}
|
if(role==='mod'){renderMod();renderRoundButtons();}else{renderPlayerBuzzer();addFeed(msg);}
|
||||||
break;
|
break;
|
||||||
@@ -299,6 +295,37 @@ function modTimerReset(){
|
|||||||
renderModTimerDisplay();
|
renderModTimerDisplay();
|
||||||
broadcastTimerToPlayers(modTimerRemaining,false);
|
broadcastTimerToPlayers(modTimerRemaining,false);
|
||||||
}
|
}
|
||||||
|
function modTimerToggle(){
|
||||||
|
if(modTimerRunning){
|
||||||
|
clearInterval(modTimerInterval);modTimerRunning=false;
|
||||||
|
document.getElementById('btn-timer-ss').textContent='START';
|
||||||
|
broadcastTimerToPlayers(modTimerRemaining,false);
|
||||||
|
} else {
|
||||||
|
if(modTimerRemaining<=0)modTimerLoad();
|
||||||
|
modTimerRunning=true;
|
||||||
|
document.getElementById('btn-timer-ss').textContent='PAUSE';
|
||||||
|
broadcastTimerToPlayers(modTimerRemaining,true);
|
||||||
|
modTimerInterval=setInterval(()=>{
|
||||||
|
modTimerRemaining--;
|
||||||
|
renderModTimerDisplay();
|
||||||
|
broadcastTimerToPlayers(modTimerRemaining,true);
|
||||||
|
if(modTimerRemaining<=0){
|
||||||
|
clearInterval(modTimerInterval);modTimerRunning=false;
|
||||||
|
document.getElementById('btn-timer-ss').textContent='START';
|
||||||
|
ws_send({type:'close_round'});
|
||||||
|
toast('TIME UP — round closed','warn');
|
||||||
|
if(typeof gsap!=='undefined'){
|
||||||
|
gsap.to('#mod-timer-disp',{scale:1.08,duration:0.1,yoyo:true,repeat:3,ease:'power2.inOut'});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},1000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function toggleTimer(){
|
||||||
|
modTimerToggle();
|
||||||
|
}
|
||||||
|
|
||||||
function modTimerToggle(){
|
function modTimerToggle(){
|
||||||
if(modTimerRunning){
|
if(modTimerRunning){
|
||||||
clearInterval(modTimerInterval);modTimerRunning=false;
|
clearInterval(modTimerInterval);modTimerRunning=false;
|
||||||
@@ -338,23 +365,22 @@ function renderModTimerDisplay(){
|
|||||||
const s=modTimerRemaining;
|
const s=modTimerRemaining;
|
||||||
el.textContent=fmtTime(s);
|
el.textContent=fmtTime(s);
|
||||||
el.className='timer-digits'+(s<=5?' danger':s<=10?' warn':'');
|
el.className='timer-digits'+(s<=5?' danger':s<=10?' warn':'');
|
||||||
const tog=document.getElementById('timer-tog');
|
|
||||||
if(tog)tog.checked=modTimerRunning;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function modTimerLoad(){
|
function modTimerLoad(){
|
||||||
modTimerRemaining=Math.max(5,parseInt(document.getElementById('mod-timer-set').value)||30);
|
const sec=parseInt(document.getElementById('mod-timer-set').value)||30;
|
||||||
|
modTimerRemaining=sec;
|
||||||
modTimerRunning=false;
|
modTimerRunning=false;
|
||||||
clearInterval(modTimerInterval);
|
clearInterval(modTimerInterval);
|
||||||
document.getElementById('btn-timer-ss').textContent='START';
|
document.getElementById('btn-timer-ss').textContent='START';
|
||||||
document.getElementById('timer-tog').checked=false;
|
// Keep toggle state as is - don't auto-uncheck
|
||||||
renderModTimerDisplay();
|
renderModTimerDisplay();
|
||||||
}
|
}
|
||||||
|
|
||||||
function modTimerReset(){
|
function modTimerReset(){
|
||||||
clearInterval(modTimerInterval);
|
clearInterval(modTimerInterval);
|
||||||
modTimerRunning=false;
|
modTimerRunning=false;
|
||||||
document.getElementById('timer-tog').checked=false;
|
// Keep toggle state as is - don't auto-uncheck
|
||||||
modTimerRemaining=Math.max(5,parseInt(document.getElementById('mod-timer-set').value)||30);
|
modTimerRemaining=Math.max(5,parseInt(document.getElementById('mod-timer-set').value)||30);
|
||||||
renderModTimerDisplay();
|
renderModTimerDisplay();
|
||||||
broadcastTimerToPlayers(modTimerRemaining,false);
|
broadcastTimerToPlayers(modTimerRemaining,false);
|
||||||
@@ -374,53 +400,13 @@ function broadcastTimerToPlayers(sec,running){
|
|||||||
function toggleRound(){
|
function toggleRound(){
|
||||||
if(room.buzzerState.roundOpen){
|
if(room.buzzerState.roundOpen){
|
||||||
ws_send({type:'close_round'});
|
ws_send({type:'close_round'});
|
||||||
// Pause timer if toggle is ON
|
|
||||||
if(document.getElementById('timer-tog').checked){
|
|
||||||
modTimerToggle();
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
ws_send({type:'open_round'});
|
ws_send({type:'open_round'});
|
||||||
// Start timer if toggle is ON
|
|
||||||
if(document.getElementById('timer-tog').checked){
|
|
||||||
modTimerLoad();
|
|
||||||
modTimerRunning=true;
|
|
||||||
document.getElementById('btn-timer-ss').textContent='PAUSE';
|
|
||||||
modTimerInterval=setInterval(()=>{
|
|
||||||
modTimerRemaining--;
|
|
||||||
renderModTimerDisplay();
|
|
||||||
broadcastTimerToPlayers(modTimerRemaining,true);
|
|
||||||
if(modTimerRemaining<=0){
|
|
||||||
clearInterval(modTimerInterval);modTimerRunning=false;
|
|
||||||
document.getElementById('btn-timer-ss').textContent='START';
|
|
||||||
document.getElementById('timer-tog').checked=false;
|
|
||||||
ws_send({type:'close_round'});
|
|
||||||
toast('TIME UP — round closed','warn');
|
|
||||||
}
|
|
||||||
},1000);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function resumeRound(){
|
function resumeRound(){
|
||||||
ws_send({type:'resume_round'});
|
ws_send({type:'resume_round'});
|
||||||
// Resume timer if toggle is ON
|
|
||||||
if(document.getElementById('timer-tog').checked){
|
|
||||||
modTimerLoad();
|
|
||||||
modTimerRunning=true;
|
|
||||||
document.getElementById('btn-timer-ss').textContent='PAUSE';
|
|
||||||
modTimerInterval=setInterval(()=>{
|
|
||||||
modTimerRemaining--;
|
|
||||||
renderModTimerDisplay();
|
|
||||||
broadcastTimerToPlayers(modTimerRemaining,true);
|
|
||||||
if(modTimerRemaining<=0){
|
|
||||||
clearInterval(modTimerInterval);modTimerRunning=false;
|
|
||||||
document.getElementById('btn-timer-ss').textContent='START';
|
|
||||||
document.getElementById('timer-tog').checked=false;
|
|
||||||
ws_send({type:'close_round'});
|
|
||||||
toast('TIME UP — round closed','warn');
|
|
||||||
}
|
|
||||||
},1000);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function renderRoundButtons(){
|
function renderRoundButtons(){
|
||||||
@@ -436,10 +422,6 @@ function renderRoundButtons(){
|
|||||||
btn.className='btn btn-g btn-full';
|
btn.className='btn btn-g btn-full';
|
||||||
resumeBtn.style.display='block';
|
resumeBtn.style.display='block';
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sync timer toggle state with modTimerRunning
|
|
||||||
const tog=document.getElementById('timer-tog');
|
|
||||||
if(tog){tog.checked=modTimerRunning;}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ══════════════════════════════════════════════════════
|
// ══════════════════════════════════════════════════════
|
||||||
@@ -464,6 +446,8 @@ function renderMod(){
|
|||||||
renderModPlayerList();
|
renderModPlayerList();
|
||||||
renderModTeams();
|
renderModTeams();
|
||||||
renderRoundButtons();
|
renderRoundButtons();
|
||||||
|
// Sync timer toggle with running state
|
||||||
|
document.getElementById('timer-tog').checked=modTimerRunning;
|
||||||
}
|
}
|
||||||
|
|
||||||
function renderModBuzz(evt){
|
function renderModBuzz(evt){
|
||||||
@@ -568,6 +552,7 @@ function renderModSettings(){
|
|||||||
renderLiveTeamNames();
|
renderLiveTeamNames();
|
||||||
renderRoundButtons();
|
renderRoundButtons();
|
||||||
renderModTimerDisplay();
|
renderModTimerDisplay();
|
||||||
|
document.getElementById('timer-tog').checked=modTimerRunning;
|
||||||
}
|
}
|
||||||
|
|
||||||
function segActivate(groupId,val){
|
function segActivate(groupId,val){
|
||||||
|
|||||||
Reference in New Issue
Block a user