diff options
author | Tor Andersson <tor@ccxvii.net> | 2022-08-29 15:19:20 +0200 |
---|---|---|
committer | Tor Andersson <tor@ccxvii.net> | 2023-02-18 11:54:52 +0100 |
commit | e9627869e2cba9cfd4c2ba36536e3898f72d09c3 (patch) | |
tree | 1fac2ac05a26929db20c93ac97f27d0b5adc17ea | |
parent | 03270fc88a894680796c5992ac4aa66ce848237a (diff) | |
download | wilderness-war-e9627869e2cba9cfd4c2ba36536e3898f72d09c3.tar.gz |
Use set for supply cache.
-rw-r--r-- | rules.js | 39 |
1 files changed, 8 insertions, 31 deletions
@@ -4,8 +4,6 @@ // TODO: select leader for defense instead of automatically picking the best // TODO: remove old 7 command leader(s) immediately as they're drawn, before placing reinforcements -// TODO: use set functions from rommel instead of array.includes array.push - const { spaces, pieces, cards } = require("./data") const BRITAIN = 'Britain' @@ -314,17 +312,6 @@ function set_delete(set, item) { set.splice(i, 1) } -function set_clear(set) { - set.length = 0 -} - -function set_toggle(set, item) { - if (set_has(set, item)) - set_delete(set, item) - else - set_add(set, item) -} - function remove_from_array(array, item) { let i = array.indexOf(item) if (i >= 0) @@ -1270,10 +1257,6 @@ function has_friendly_fort(s) { return set_has(player.forts, s) } -function has_enemy_fort_uc(s) { - return set_has(enemy_player.forts_uc, s) -} - function has_friendly_fort_uc(s) { return set_has(player.forts_uc, s) } @@ -1406,14 +1389,6 @@ function count_units_in_space(s) { return n } -function count_enemy_units_in_space(s) { - let n = 0 - for (let p = first_enemy_unit; p <= last_enemy_unit; ++p) - if (is_piece_in_space(p, s)) - ++n - return n -} - function has_unbesieged_friendly_leader(s) { for (let p = first_friendly_leader; p <= last_friendly_leader; ++p) if (is_piece_unbesieged_in_space(p, s)) @@ -2070,14 +2045,16 @@ function update_vp(name, s) { function search_supply_spaces_imp(queue) { // console.log("======") - let reached = queue.slice() + let reached = [] + for (let s of queue) + set_add(reached, s) while (queue.length > 0) { let current = queue.shift() // If we must have come here by water way: let cultivated = is_cultivated(current) || has_friendly_fortifications(current) || has_friendly_amphib(current) // console.log("SUPPLY", space_name(current), cultivated) for_each_exit_with_type(current, (next, type) => { - if (reached.includes(next)) + if (set_has(reached, next)) return // continue if (has_unbesieged_enemy_units(next) || has_unbesieged_enemy_fortifications(next)) return // continue @@ -2085,14 +2062,14 @@ function search_supply_spaces_imp(queue) { // came from wilderness by water, must continue by water if (type !== 'land') { // console.log(" ", space_name(next), "(adjacent-water)") - reached.push(next) + set_add(reached, next) queue.push(next) } } else { // came from cultivated by any path, may continue to cultivated or by water if (is_cultivated(next) || has_friendly_fortifications(next) || has_friendly_amphib(next) || type !== 'land') { // console.log(" ", space_name(next), "(from land)") - reached.push(next) + set_add(reached, next) queue.push(next) } } @@ -2120,11 +2097,11 @@ function is_in_supply(from) { return true if (!supply_cache) search_supply_spaces() - if (supply_cache.includes(from)) + if (set_has(supply_cache, from)) return true let x = false for_each_exit(from, next => { - if (supply_cache.includes(next)) + if (set_has(supply_cache, next)) x = true }) return x |