From 842b8915070cdb982a212a1be2a9805e095bf571 Mon Sep 17 00:00:00 2001 From: Tor Andersson Date: Thu, 16 May 2024 21:33:44 +0200 Subject: numeric ids --- play.js | 131 ++++++++++++++++++++++++++++++++++++++-------------------------- 1 file changed, 77 insertions(+), 54 deletions(-) (limited to 'play.js') diff --git a/play.js b/play.js index 5b75f51..98646cb 100644 --- a/play.js +++ b/play.js @@ -1,20 +1,32 @@ "use strict" -const THE_13_COLONIES = [ "NH", "NY", "MA", "CT", "RI", "PA", "NJ", "MD", "DE", "VA", "NC", "SC", "GA" ] -const ALL_COLONIES = THE_13_COLONIES.concat([ "CA" ]) -const AMERICAN_GENERALS = [ "Arnold", "Gates", "Greene", "Lafayette", "Lee", "Lincoln", "Washington" ] -const CONTINENTAL_CONGRESS_DISPERSED = "Continental Congress Dispersed" +const PC_NONE = 0 +const PC_BRITISH = 1 +const PC_AMERICAN = 2 + +const GENERALS = data.generals +const CARDS = data.cards +const SPACES = data.spaces +const COLONIES = data.colony_spaces +const BOXES = data.BOXES + +const CONTINENTAL_CONGRESS_DISPERSED = data.space_index["Continental Congress Dispersed"] +const BLOCKADE_ZONES = [ "Sea1", "Sea2", "Sea3", "Sea4", "Sea5", "Sea6", "Sea7" ] const BRITISH = "British" const AMERICAN = "American" -const BLOCKADE_ZONES = [ "Sea1", "Sea2", "Sea3", "Sea4", "Sea5", "Sea6", "Sea7" ] + +const space_count = 66 +const general_count = data.generals.length let ui = { cards: {}, - spaces: {}, - generals: {}, - control: {}, - blockade: {}, + spaces: [], + generals: [], + pc: [], cu: [], + control: [], + + blockade: {}, } function on_focus_card_tip(card_number) { @@ -43,6 +55,7 @@ function on_log(text) { text = text.replace(/#(\d+)/g, '$&') + // text = text.replace(/%(\d+)/g, sub_space_name) if (text.match(/^\.h1 /)) { p.className = "h1" @@ -70,12 +83,12 @@ function onHoverCard(X) { } function onFocusNode(evt) { - let space = SPACES[evt.target.id] + let space = SPACES[evt.target.my_id] document.getElementById("status").textContent = space.name } function onBlurNode(evt) { - let space = SPACES[evt.target.id] + let space = SPACES[evt.target.my_id] document.getElementById("status").textContent = "" } @@ -91,7 +104,7 @@ function build_marker(container, id, x, y, w, h, classList) { e.classList.add("marker") for (let c of classList) e.classList.add(c) - e.setAttribute("id", id) + e.my_id = id e.style.left = ((x - w / 2) | 0) + "px" e.style.top = ((y - h / 2) | 0) + "px" document.getElementById(container).appendChild(e) @@ -99,7 +112,11 @@ function build_marker(container, id, x, y, w, h, classList) { } function update_marker(e, space) { - let box = SPACES[space] || BOXES[space] + let box + if (typeof space === "number") + box = SPACES[space] + else + box = BOXES[space] e.style.left = ((box.x - e.foo.w / 2) | 0) + "px" e.style.top = ((box.y - e.foo.h / 2) | 0) + "px" } @@ -143,17 +160,17 @@ function build_map() { return e } - for (let name in SPACES) { - let space = SPACES[name] + for (let i = 0; i < SPACES.length; ++i) { + let space = SPACES[i] if (space.colony != null) { - let e = buildNode(space.type, space.x, space.y, SPACES[name].colony) - e.setAttribute("id", name) + let e = buildNode(space.type, space.x, space.y, space.colony) + e.my_id = i e.addEventListener("mouseenter", onFocusNode) e.addEventListener("mouseleave", onBlurNode) e.addEventListener("click", on_space) - ui.spaces[name] = e + ui.spaces[i] = e document.getElementById("spaces").appendChild(e) - build_marker("pc", name + "-pc", space.x, space.y, 67, 58.5, [ "pc" ]) + ui.pc[i] = build_marker("pc", name + "-pc", space.x, space.y, 67, 58.5, [ "pc" ]) } } @@ -182,8 +199,8 @@ function build_map() { ui.french_navy = build_marker( "markers", "FrenchNavy", - BOXES["French Reinforcements"].x - 130 / 2 - 10, - BOXES["French Reinforcements"].y - 32, + SPACES[data.space_index["French Reinforcements"]].x - 130 / 2 - 10, + SPACES[data.space_index["French Reinforcements"]].y - 32, 126 / 2, 252 / 2, [ "french-navy" ] @@ -192,15 +209,16 @@ function build_map() { ui.congress = build_marker( "markers", "Congress", - SPACES["Philadelphia"].x, - SPACES["Philadelphia"].y, + SPACES[data.space_index["Philadelphia"]].x, + SPACES[data.space_index["Philadelphia"]].y, 113 / 2, 113 / 2, [ "congress" ] ) - for (let c in COLONIES) { - ui.control[c] = build_marker("markers", "control_" + c, BOXES[c].x, BOXES[c].y, 38 + 8, 38 + 8, [ "control" ]) + for (let c = 0; c <= 13; ++c) { + let name = data.colony_name[c] + ui.control[c] = build_marker("markers", "control_" + name, BOXES[name].x, BOXES[name].y, 38 + 8, 38 + 8, [ "control" ]) } for (let c = 1; c <= 110; ++c) { @@ -208,9 +226,10 @@ function build_map() { ui.cards[c].addEventListener("click", on_card) } - for (let g in GENERALS) { + for (let g = 0; g < general_count; ++g) { let color = GENERALS[g].owner.toLowerCase() - ui.generals[g] = build_marker("generals", g, 0, 0, 126 / 2, 252 / 2, [ "general", color, g, "offmap" ]) + let name = GENERALS[g].name + ui.generals[g] = build_marker("generals", g, 0, 0, 126 / 2, 252 / 2, [ "general", color, name, "offmap" ]) ui.generals[g].addEventListener("click", on_general) } } @@ -237,40 +256,43 @@ function update_units() { else ui.french_alliance.classList.remove("european-war") - if (view.french_navy == "French Reinforcements") { - let x = BOXES["French Reinforcements"].x - 130 / 2 - 10 - let y = BOXES["French Reinforcements"].y - 32 + if (view.french_navy < 0) { + let x = SPACES[data.space_index["French Reinforcements"]].x - 130 / 2 - 10 + let y = SPACES[data.space_index["French Reinforcements"]].y - 32 let w = 126 / 2 let h = 252 / 2 ui.french_navy.style.left = ((x - w / 2) | 0) + "px" ui.french_navy.style.top = ((y - h / 2) | 0) + "px" } else { - update_marker(ui.french_navy, view.french_navy) + let s + if (view.french_navy > 1700) + s = "Game Turn "+ view.french_navy + else + s = "Sea "+ view.french_navy + update_marker(ui.french_navy, s) } - for (let space in SPACES) { + for (let space = 0; space < space_count; ++space) { let space_pc = view.pc[space] - let e = document.getElementById(space + "-pc") - if (e) { - if (space_pc === BRITISH) { - e.classList.remove("american") - e.classList.add("british") - } else if (space_pc === AMERICAN) { - e.classList.add("american") - e.classList.remove("british") - } else { - e.classList.remove("american") - e.classList.remove("british") - } + let e = ui.pc[space] + if (space_pc === PC_BRITISH) { + e.classList.remove("american") + e.classList.add("british") + } else if (space_pc === PC_AMERICAN) { + e.classList.add("american") + e.classList.remove("british") + } else { + e.classList.remove("american") + e.classList.remove("british") } } - for (let c in COLONIES) { + for (let c = 0; c <= 13; ++c) { let control = 0 for (let space of COLONIES[c]) { - if (view.pc[space] == BRITISH) + if (view.pc[space] == PC_BRITISH) --control - else if (view.pc[space] == AMERICAN) + else if (view.pc[space] == PC_AMERICAN) ++control } if (control < 0) @@ -284,8 +306,8 @@ function update_units() { let offset = {} for (let g in GENERALS) { let e = ui.generals[g] - let unit = view.generals[g] - let space = SPACES[unit.location] || BOXES[unit.location] + let loc = view.generals[g] + let space = SPACES[loc] || BOXES[loc] if (space) { let o = offset[space.name] | 0 update_marker_xy(e, space.x + o * generalX, space.y + o * generalY - 32) @@ -320,7 +342,7 @@ build_map() function player_info(player, nc, nq) { let info = "" if (player == AMERICAN) { - if (view.pennsylvania_and_new_jersey_line_mutinies || view.congress == CONTINENTAL_CONGRESS_DISPERSED) + if (view.pennsylvania_and_new_jersey_line_mutinies || view.congress === CONTINENTAL_CONGRESS_DISPERSED) info += "\u{1f6ab} " } if (nq > 0) @@ -390,10 +412,10 @@ function on_update() { ui.cards[c].classList.remove("show") } - for (let space in SPACES) + for (let space = 0; space < space_count; ++space) ui.spaces[space].classList.remove("enabled") - for (let general in GENERALS) + for (let general = 0; general < general_count; ++general) ui.generals[general].classList.remove("enabled") for (let zone of BLOCKADE_ZONES) @@ -404,6 +426,7 @@ function on_update() { if (player != view.active) return + if (view.actions) for (let action of Object.keys(view.actions)) { let args = view.actions[action] switch (action) { @@ -518,7 +541,7 @@ function get_action_from_arg(x) { function on_space(evt) { if (view.actions) { - let space = evt.target.id + let space = evt.target.my_id let action = get_action_from_arg(space) if (action) send_action(action, space) @@ -527,7 +550,7 @@ function on_space(evt) { function on_general(evt) { if (view.actions) { - let general = evt.target.id + let general = evt.target.my_id let action = get_action_from_arg(general) if (action) send_action(action, general) -- cgit v1.2.3