summaryrefslogtreecommitdiff
path: root/play.js
diff options
context:
space:
mode:
authorTor Andersson <tor@ccxvii.net>2022-07-29 13:03:47 +0200
committerTor Andersson <tor@ccxvii.net>2022-11-17 13:11:26 +0100
commit4e92007e7a7e7e2c5a432ccb38f235abe67236b5 (patch)
tree16ce3224a719fc26c909f1f83e86c2c7d0ea415c /play.js
parent352d41a05f51c4f1a1849519bb3c28e13a7be29c (diff)
downloadrommel-in-the-desert-4e92007e7a7e7e2c5a432ccb38f235abe67236b5.tar.gz
Data arrays.
Diffstat (limited to 'play.js')
-rw-r--r--play.js102
1 files changed, 77 insertions, 25 deletions
diff --git a/play.js b/play.js
index 3faba75..1361789 100644
--- a/play.js
+++ b/play.js
@@ -14,11 +14,30 @@ const class_name = [ "armor", "infantry", "anti-tank", "artillery" ]
const MALTA = 4
const hex_special = [ 48, 49, 102, 127, MALTA ]
+const unit_count = 94
+
const ARMOR = 0
const INFANTRY = 1
const ANTITANK = 2
const ARTILLERY = 3
+function is_axis_unit(u) { return (u >= 0 && u <= 33) }
+function is_italian_unit(u) { return (u >= 0 && u <= 13) }
+function is_german_unit(u) { return (u >= 14 && u <= 33) }
+function is_allied_unit(u) { return (u >= 34 && u <= 93) }
+
+function is_elite_unit(u) { return unit_elite[u] }
+
+function is_armor_unit(u) { return unit_class[u] === ARMOR }
+function is_infantry_unit(u) { unit_class[u] === INFANTRY }
+function is_antitank_unit(u) { unit_class[u] === ANTITANK }
+function is_artillery_unit(u) { unit_class[u] === ARTILLERY }
+
+function is_recon_unit(u) { return unit_speed[u] === 4 }
+function is_mechanized_unit(u) { return unit_speed[u] === 3 }
+function is_motorized_unit(u) { return unit_speed[u] === 2 }
+function is_leg_unit(u) { return unit_speed[u] === 1 }
+
function set_has(set, item) {
if (!set)
return false
@@ -126,6 +145,10 @@ function unit_supply(u) {
return hex_from_supply_source[src]
}
+function is_unit_unsupplied(u) {
+ return ((view.units[u] & UNIT_SUPPLY_MASK) >> UNIT_SUPPLY_SHIFT) === 0
+}
+
function set_unit_supply(u, hex) {
let src = supply_source_from_hex(hex)
view.units[u] = (view.units[u] & ~UNIT_SUPPLY_MASK) | (src << UNIT_SUPPLY_SHIFT)
@@ -140,11 +163,11 @@ function set_unit_lost_steps(u, n) {
}
function unit_steps(u) {
- return units[u].steps - unit_lost_steps(u)
+ return unit_start_steps[u] - unit_lost_steps(u)
}
function set_unit_steps(u, n) {
- set_unit_lost_steps(u, units[u].steps - n)
+ set_unit_lost_steps(u, unit_start_steps[u] - n)
}
function is_unit_moved(u) {
@@ -165,18 +188,6 @@ function is_unit_selected(unit) {
return view.selected === unit
}
-function is_artillery_unit(u) {
- return units[u].class === ARTILLERY
-}
-
-function is_allied_unit(u) {
- return units[u].nationality === 'allied'
-}
-
-function is_axis_unit(u) {
- return units[u].nationality !== 'allied'
-}
-
function is_hex_action(hex) {
return !!(view.actions && view.actions.hex && view.actions.hex.includes(hex))
}
@@ -288,16 +299,56 @@ function on_focus_hex(evt) {
document.getElementById("status").textContent = text
}
+const unit_description = []
+for (let u = 0; u <= 93; ++u) {
+ let t = ""
+ if (is_italian_unit(u)) t += " Italian"
+ if (is_german_unit(u)) t += " German"
+ if (is_allied_unit(u)) t += " Allied"
+ if (is_elite_unit(u) && !is_german_unit(u)) t += " Elite"
+ if (is_armor_unit(u)) {
+ if (is_recon_unit(u)) t += " Recon"
+ t += " Armor"
+ }
+ if (is_infantry_unit(u)) {
+ if (is_mechanized_unit(u)) t += " Mechanized"
+ if (is_motorized_unit(u)) t += " Motorized"
+ t += " Infantry"
+ }
+ if (is_antitank_unit(u)) {
+ if (is_mechanized_unit(u)) t += " Mobile"
+ if (is_motorized_unit(u)) t += " Motorized"
+ t += " Anti-tank"
+ }
+ if (is_artillery_unit(u)) {
+ if (is_mechanized_unit(u)) t += " Self Propelled"
+ t += " Artillery"
+ }
+ unit_description[u] = t
+}
+
function on_focus_unit(evt) {
let u = evt.target.unit
- let data = units[u]
- document.getElementById("status").textContent = `(${u}) ${data.nationality} ${data.elite ? "elite " : ""}${data.type} - ${data.steps} - ${data.name}`
+ let t = "(" + u + ")"
+ t += " " + unit_description[u]
+ t += " \"" + unit_name[u] + "\""
+ if (is_unit_disrupted(u))
+ t += " - disrupted"
+ if (is_unit_unsupplied(u))
+ t += " - unsupplied"
+ if (is_unit_moved(u))
+ t += " - moved"
+ if (is_unit_fired(u))
+ t += " - fired"
+ document.getElementById("status").textContent = t
}
function on_focus_battle_unit(evt) {
let u = evt.target.unit
- let data = units[u]
- document.getElementById("status").textContent = `(${u}) ${data.nationality} ${data.elite ? "elite " : ""}${data.type} - ${data.steps} - ${data.name}`
+ let t = unit_description[u]
+ if (is_unit_fired(u))
+ t += " - fired"
+ document.getElementById("status").textContent = t
}
function toggle_units() {
@@ -474,23 +525,24 @@ function build_hexes() {
}
function build_units() {
- function build_unit(u, data) {
+ function build_unit(u) {
+ let nationality = is_german_unit(u) ? "german" : is_italian_unit(u) ? "italian" : "allied"
let elt = ui.units[u] = document.createElement("div")
- elt.className = `unit ${data.nationality} u${u} r0 m`
+ elt.className = `unit ${nationality} u${u} r0 m`
elt.addEventListener("mousedown", on_click_unit)
elt.addEventListener("mouseenter", on_focus_unit)
elt.addEventListener("mouseleave", on_blur)
elt.unit = u
elt = ui.battle_units[u] = document.createElement("div")
- elt.className = `unit ${data.nationality} u${u} r0`
+ elt.className = `unit ${nationality} u${u} r0`
elt.addEventListener("mousedown", on_click_battle_unit)
elt.addEventListener("mouseenter", on_focus_battle_unit)
elt.addEventListener("mouseleave", on_blur)
elt.unit = u
}
- for (let u = 0; u < units.length; ++u) {
- build_unit(u, units[u])
+ for (let u = 0; u < unit_count; ++u) {
+ build_unit(u)
}
}
@@ -528,7 +580,7 @@ function update_map() {
for (let i = 0; i < stack.length; ++i)
stack[i].length = 0
- for (let u = 0; u < units.length; ++u) {
+ for (let u = 0; u < unit_count; ++u) {
let e = ui.units[u]
let hex = unit_hex(u)
if (view.month <= 10 && hex > hexdeploy + 10)
@@ -630,7 +682,7 @@ function update_cards() {
}
function update_battle_line(hex, line, test) {
- for (let u = 0; u < units.length; ++u) {
+ for (let u = 0; u < unit_count; ++u) {
let e = ui.battle_units[u]
if (unit_hex(u) === hex && test(u)) {
if (!line.contains(e))