diff options
author | Tor Andersson <tor@ccxvii.net> | 2025-03-08 17:46:49 +0100 |
---|---|---|
committer | Tor Andersson <tor@ccxvii.net> | 2025-03-10 10:33:39 +0100 |
commit | ed340292beccba93ad074521d273e94cceeffcb3 (patch) | |
tree | 2a4fe5ba78c3a372edc52d25f2329b3469e96554 /public | |
parent | 845cb682fa01c9d0ac86b51d15e5e50e69ba7b1c (diff) | |
download | server-ed340292beccba93ad074521d273e94cceeffcb3.tar.gz |
Improve resign handling in replay.
Diffstat (limited to 'public')
-rw-r--r-- | public/common/replay.js | 33 |
1 files changed, 23 insertions, 10 deletions
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}` |