90 lines
3.6 KiB
JavaScript
90 lines
3.6 KiB
JavaScript
document.addEventListener('DOMContentLoaded', () => {
|
|
const rollButton = document.getElementById('roll-button');
|
|
const assassinateButton = document.getElementById('assassinate-button');
|
|
const newGameButton = document.getElementById('new-game-button');
|
|
const themeSwitchButton = document.getElementById('theme-switch');
|
|
const flamesScore = document.getElementById('flames');
|
|
const desolationScore = document.getElementById('desolation');
|
|
const relocationScore = document.getElementById('relocation');
|
|
const logList = document.getElementById('log-list');
|
|
|
|
const prefersDark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;
|
|
const savedTheme = localStorage.getItem('theme');
|
|
|
|
if (savedTheme) {
|
|
document.body.setAttribute('data-theme', savedTheme);
|
|
} else if (prefersDark) {
|
|
document.body.setAttribute('data-theme', 'dark');
|
|
}
|
|
|
|
themeSwitchButton.addEventListener('click', () => {
|
|
const currentTheme = document.body.getAttribute('data-theme');
|
|
const newTheme = currentTheme === 'dark' ? 'light' : 'dark';
|
|
document.body.setAttribute('data-theme', newTheme);
|
|
localStorage.setItem('theme', newTheme);
|
|
});
|
|
|
|
rollButton.addEventListener('click', () => {
|
|
fetch('game.php?action=roll_dice')
|
|
.then(response => response.json())
|
|
.then(data => {
|
|
updateScores(data.scores);
|
|
logEvent(data.event);
|
|
checkGameState(data.gameState);
|
|
});
|
|
});
|
|
|
|
assassinateButton.addEventListener('click', () => {
|
|
fetch('game.php?action=assassinate')
|
|
.then(response => response.json())
|
|
.then(data => {
|
|
logEvent(data.event);
|
|
checkGameState(data.gameState);
|
|
});
|
|
});
|
|
|
|
newGameButton.addEventListener('click', () => {
|
|
fetch('game.php?action=reset_game')
|
|
.then(response => response.json())
|
|
.then(data => {
|
|
updateScores(data.scores);
|
|
logList.innerHTML = '';
|
|
rollButton.disabled = false;
|
|
assassinateButton.disabled = false;
|
|
newGameButton.style.display = 'none';
|
|
});
|
|
});
|
|
|
|
function updateScores(scores) {
|
|
flamesScore.textContent = scores.flames;
|
|
desolationScore.textContent = scores.desolation;
|
|
relocationScore.textContent = scores.relocation;
|
|
}
|
|
|
|
function logEvent(event) {
|
|
const li = document.createElement('li');
|
|
li.textContent = event;
|
|
logList.prepend(li);
|
|
}
|
|
|
|
function checkGameState(gameState) {
|
|
if (gameState !== 'ongoing') {
|
|
rollButton.disabled = true;
|
|
assassinateButton.disabled = true;
|
|
newGameButton.style.display = 'block';
|
|
let message = '';
|
|
if (gameState === 'win') {
|
|
message = 'You have escaped the city! You win!';
|
|
} else if (gameState === 'loss_flames') {
|
|
message = 'You were burned alive. You lose.';
|
|
} else if (gameState === 'loss_desolation') {
|
|
message = 'You were killed in the rampage. You lose.';
|
|
} else if (gameState === 'win_assassination') {
|
|
message = 'You have assassinated the emperor! You die a martyr, but you win!';
|
|
} else if (gameState === 'loss_assassination') {
|
|
message = 'Your attempt to assassinate the emperor has failed. You are executed. You lose.';
|
|
}
|
|
setTimeout(() => alert(message), 100);
|
|
}
|
|
}
|
|
}); |