From ed340292beccba93ad074521d273e94cceeffcb3 Mon Sep 17 00:00:00 2001 From: Tor Andersson Date: Sat, 8 Mar 2025 17:46:49 +0100 Subject: Improve resign handling in replay. --- public/common/replay.js | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) (limited to 'public') diff --git a/public/common/replay.js b/public/common/replay.js index b6c5e84..950b244 100644 --- a/public/common/replay.js +++ b/public/common/replay.js @@ -92,6 +92,20 @@ function snap_from_state(state) { return snap } +function finish_game_state(state, result, message) { + if (typeof rules.finish === "function") { + state = rules.finish(state, result, message) + } else { + state.state = "game_over" + state.active = "None" + state.result = result + state.victory = message + state.log.push("") + state.log.push(message) + } + return state +} + function eval_action(s, item, p) { let [ item_role, item_action, item_arguments ] = item switch (item_action) { @@ -101,11 +115,15 @@ function eval_action(s, item, p) { if (params.mode === "debug") s.log.push([p, item_role.substring(0,2), item_action, null]) - s.state = "game_over" - s.active = "None" - s.victory = item_role + " resigned." - s.log.push("") - s.log.push(s.victory) + let result = "None" + if (roles.length === 2) { + for (let r of roles) + if (r !== item_role) + result = r + } + + s = finish_game_state(s, result, role + " resigned.") + return s default: if (params.mode === "debug") @@ -151,11 +169,6 @@ function update_replay_view() { if (params.mode !== "debug") view.actions = null - if (viewpoint === "Observer") - view.game_over = 1 - if (replay_state.state === "game_over") - view.game_over = 1 - if (replay.length > 0) { if (document.body.classList.contains("shift")) { view.prompt = `[${replay_this}/${replay.length}] ${replay_state.active} / ${replay_state.state}` -- cgit v1.2.3