diff options
author | Tor Andersson <tor@ccxvii.net> | 2024-10-29 17:48:51 +0100 |
---|---|---|
committer | Tor Andersson <tor@ccxvii.net> | 2024-10-29 17:49:15 +0100 |
commit | 61dcf972cecd41e6bfe459725414f5b2c15c4bdc (patch) | |
tree | b5a0a02ab0dfefd4eb067a29c742f1cb0d8677c7 /play.js | |
download | land-and-freedom-61dcf972cecd41e6bfe459725414f5b2c15c4bdc.tar.gz |
Initial commit.
Diffstat (limited to 'play.js')
-rw-r--r-- | play.js | 88 |
1 files changed, 88 insertions, 0 deletions
@@ -0,0 +1,88 @@ +"use strict" + +/* global view, player, send_action, action_button */ + +const SPACE_COUNT = 64 +const PIECE_COUNT = 32 +const CARD_COUNT = 52 + +let ui = { + map: document.getElementById("map"), + hand: document.getElementById("hand"), + spaces: [], + pieces: [], + cards: [], +} + +let action_register = [] + +function register_action(e, action, id) { + e.my_action = action + e.my_id = id + e.onmousedown = on_click_action + action_register.push(e) +} + +function on_click_action(evt) { + if (evt.button === 0) + if (send_action(evt.target.my_action, evt.target.my_id)) + evt.stopPropagation() +} + +function is_action(action, arg) { + if (arg === undefined) + return !!(view.actions && view.actions[action] === 1) + return !!(view.actions && view.actions[action] && view.actions[action].includes(arg)) +} + +let on_init_once = false + +function on_init() { + if (on_init_once) + return + on_init_once = true + + // create space elements + for (let s = 0; s < SPACE_COUNT; ++s) { + let e = ui.spaces[s].document.createElement("div") + e.className = "space" + register_action(e, "space", s) + ui.map.appendChild(e) + } + + // create piece elements + for (let p = 0; p < PIECE_COUNT; ++p) { + let e = ui.pieces[p] = document.createElement("div") + e.className = "piece" + register_action(e, "piece", s) + } + + // create card elements + for (let c = 0; c < CARD_COUNT; ++c) { + let e = ui.cards[c] = document.createElement("div") + e.className = "card" + register_action(e, "card", s) + } +} + +function on_update() { + on_init() + + for (let s = 0; s < SPACE_COUNT; ++s) + ui.spaces[s].replaceChildren() + + for (let p = 0; p < PIECE_COUNT; ++p) { + let s = view.location[p] + ui.spaces[s].appendChild(ui.pieces[p]) + } + + ui.hand.replaceChildren() + for (let c of view.hand) + ui.hand.appendChild(ui.cards[c]) + + for (let e of action_register) + e.classList.toggle("action", is_action(e.my_action, e.my_id)) + + action_button("next", "Next") + action_button("undo", "Undo") +} |