summaryrefslogtreecommitdiff
path: root/play.js
diff options
context:
space:
mode:
Diffstat (limited to 'play.js')
-rw-r--r--play.js131
1 files changed, 77 insertions, 54 deletions
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,
'<span class="tip" onmouseenter="on_focus_card_tip($1)" onmouseleave="on_blur_card_tip()">$&</span>')
+ // 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)