diff options
author | Tor Andersson <tor@ccxvii.net> | 2022-07-29 13:03:47 +0200 |
---|---|---|
committer | Tor Andersson <tor@ccxvii.net> | 2022-11-17 13:11:26 +0100 |
commit | 4e92007e7a7e7e2c5a432ccb38f235abe67236b5 (patch) | |
tree | 16ce3224a719fc26c909f1f83e86c2c7d0ea415c /play.js | |
parent | 352d41a05f51c4f1a1849519bb3c28e13a7be29c (diff) | |
download | rommel-in-the-desert-4e92007e7a7e7e2c5a432ccb38f235abe67236b5.tar.gz |
Data arrays.
Diffstat (limited to 'play.js')
-rw-r--r-- | play.js | 102 |
1 files changed, 77 insertions, 25 deletions
@@ -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)) |