134 lines
4.4 KiB
JavaScript
134 lines
4.4 KiB
JavaScript
// gameActions.js - Core game action functions
|
|
import * as config from '../config.js';
|
|
import * as state from './state.js';
|
|
import * as ui from '../ui/ui.js';
|
|
import * as timer from './timer.js';
|
|
import audioManager from '../ui/audio.js';
|
|
import * as screenLockManager from '../services/screenLockManager.js'; // Import screen lock manager
|
|
|
|
// --- Core Game Actions ---
|
|
|
|
// Declare handleGameOver at the top level to avoid referencing before definition
|
|
export function handleGameOver() {
|
|
state.setGameState(config.GAME_STATES.OVER);
|
|
audioManager.play('gameOver');
|
|
timer.stopTimer(); // Ensure timer is stopped
|
|
|
|
// Release screen wake lock when game is over
|
|
screenLockManager.releaseWakeLock().then(success => {
|
|
if (success) {
|
|
console.log('Screen wake lock released on game over');
|
|
}
|
|
});
|
|
|
|
ui.updateGameButton();
|
|
ui.renderPlayers(); // Update to show final state
|
|
}
|
|
|
|
export function startGame() {
|
|
if (state.getPlayers().length < 2) {
|
|
alert('You need at least 2 players to start.');
|
|
return;
|
|
}
|
|
if (state.getGameState() === config.GAME_STATES.SETUP || state.getGameState() === config.GAME_STATES.PAUSED) {
|
|
state.setGameState(config.GAME_STATES.RUNNING);
|
|
audioManager.play('gameStart');
|
|
timer.startTimer();
|
|
|
|
// Acquire screen wake lock when game starts
|
|
screenLockManager.acquireWakeLock().then(success => {
|
|
if (success) {
|
|
console.log('Screen wake lock acquired for game');
|
|
} else {
|
|
console.warn('Failed to acquire screen wake lock');
|
|
}
|
|
});
|
|
|
|
ui.updateGameButton();
|
|
ui.renderPlayers(); // Ensure active timer styling is applied
|
|
}
|
|
}
|
|
|
|
export function pauseGame() {
|
|
if (state.getGameState() === config.GAME_STATES.RUNNING) {
|
|
state.setGameState(config.GAME_STATES.PAUSED);
|
|
audioManager.play('gamePause');
|
|
timer.stopTimer();
|
|
|
|
// Release screen wake lock when game is paused
|
|
screenLockManager.releaseWakeLock().then(success => {
|
|
if (success) {
|
|
console.log('Screen wake lock released on pause');
|
|
}
|
|
});
|
|
|
|
ui.updateGameButton();
|
|
ui.renderPlayers(); // Ensure active timer styling is removed
|
|
}
|
|
}
|
|
|
|
export function resumeGame() {
|
|
if (state.getGameState() === config.GAME_STATES.PAUSED) {
|
|
// Check if there's actually a player with time left
|
|
if (state.findNextPlayerWithTime() === -1) {
|
|
console.log("Cannot resume, no players have time left.");
|
|
// Optionally set state to OVER here
|
|
handleGameOver();
|
|
return;
|
|
}
|
|
state.setGameState(config.GAME_STATES.RUNNING);
|
|
audioManager.play('gameResume');
|
|
timer.startTimer();
|
|
ui.updateGameButton();
|
|
ui.renderPlayers(); // Ensure active timer styling is applied
|
|
}
|
|
}
|
|
|
|
export function togglePauseResume() {
|
|
const currentGameState = state.getGameState();
|
|
if (currentGameState === config.GAME_STATES.RUNNING) {
|
|
pauseGame();
|
|
} else if (currentGameState === config.GAME_STATES.PAUSED) {
|
|
resumeGame();
|
|
} else if (currentGameState === config.GAME_STATES.SETUP) {
|
|
startGame();
|
|
} else if (currentGameState === config.GAME_STATES.OVER) {
|
|
resetGame(); // Or just go back to setup? Let's reset.
|
|
startGame();
|
|
}
|
|
}
|
|
|
|
export function resetGame() {
|
|
timer.stopTimer(); // Stop timer if running/paused
|
|
state.resetPlayersTime();
|
|
state.setGameState(config.GAME_STATES.SETUP);
|
|
state.setCurrentPlayerIndex(0); // Go back to first player
|
|
|
|
// Release screen wake lock when game is reset
|
|
screenLockManager.releaseWakeLock().then(success => {
|
|
if (success) {
|
|
console.log('Screen wake lock released on reset');
|
|
}
|
|
});
|
|
|
|
audioManager.play('buttonClick'); // Or a specific reset sound?
|
|
ui.updateGameButton();
|
|
ui.renderPlayers();
|
|
}
|
|
|
|
export function fullResetApp() {
|
|
timer.stopTimer();
|
|
state.resetToDefaults();
|
|
|
|
// Release screen wake lock on full reset
|
|
screenLockManager.releaseWakeLock().then(success => {
|
|
if (success) {
|
|
console.log('Screen wake lock released on full reset');
|
|
}
|
|
});
|
|
|
|
audioManager.play('gameOver'); // Use game over sound for full reset
|
|
ui.hideResetModal();
|
|
ui.updateGameButton();
|
|
ui.renderPlayers();
|
|
} |