diff options
author | Joël Simoneau <simoneaujoel@gmail.com> | 2024-12-13 17:02:48 -0500 |
---|---|---|
committer | Joël Simoneau <simoneaujoel@gmail.com> | 2024-12-13 17:02:48 -0500 |
commit | 01c4aafb89ab8a1afa6db579d76ca2fe218fdd17 (patch) | |
tree | c9b89c7e145074fbb151b77ffcaba1e4905422f9 | |
parent | 5e07c0a2547822cb7c51e30d162f86381a330e50 (diff) | |
download | vijayanagara-01c4aafb89ab8a1afa6db579d76ca2fe218fdd17.tar.gz |
Deprecate generators
-rw-r--r-- | rules.js | 111 | ||||
-rw-r--r-- | tools/gendata.js | 2 |
2 files changed, 59 insertions, 54 deletions
@@ -740,7 +740,7 @@ states.cavalry = { if (game.cav.next) game.state = game.cav.next else - end_card() + goto_eligible() } } @@ -891,12 +891,8 @@ states.govern_space = { } if (has_piece(game.cmd.where, DS, ELITE) && game.cmd.count[1] < 2) { - for (let p of iter_faction_pieces(BK, ELITE)) - if (piece_space(p) === game.cmd.where && !is_rebel(p)) - gen_action_piece(p) - for (let p of iter_faction_pieces(VE, ELITE)) - if (piece_space(p) === game.cmd.where && !is_rebel(p)) - gen_action_piece(p) + gen_action_obedient_in_space(game.cmd.where, BK) + gen_action_obedient_in_space(game.cmd.where, VE) } }, piece(p) { @@ -949,14 +945,13 @@ states.march_space = { view.where = game.cmd.where view.actions.next = 1 - for (let p of iter_faction_movable(DS)) { + for_each_movable(DS, p => { if ( set_has(SPACES[game.cmd.where].adjacent, piece_space(p)) && !set_has(game.cmd.pieces, p) ) gen_action_piece(p) - } - + }) }, piece(p) { log_summary_move_from(p) @@ -1330,9 +1325,9 @@ function can_amass() { } function can_mi_attack() { - let first = first_piece[MI][TROOPS] - let last = last_piece[MI][TROOPS] - for (let p = first; p <= last; ++p) + let p0 = first_piece[MI][TROOPS] + let p1 = last_piece[MI][TROOPS] + for (let p = p0; p <= p1; ++p) if (piece_space(p) >= 0) return true return false @@ -1404,9 +1399,15 @@ function to_obedient(p) { } function to_obedient_space(s) { - for (let p of iter_rebel_elite()) + to_obedient_space_faction(s, BK) + to_obedient_space_faction(s, VE) +} + +function to_obedient_space_faction(s, faction) { + for_each_piece(faction, ELITE, p => { if (piece_space(p) === s) to_obedient(p) + }) } function to_rebel(p) { @@ -1416,9 +1417,10 @@ function to_rebel(p) { } function to_rebel_space(s, faction) { - for (let p of iter_faction_pieces(faction, ELITE)) + for_each_piece(faction, ELITE, p => { if (piece_space(p) === s) to_rebel(p) + }) } function update_rebel(p, s) { @@ -1427,23 +1429,30 @@ function update_rebel(p, s) { to_rebel(p) } +function gen_action_obedient_in_space(s, faction) { + for_each_piece(faction, ELITE, p => { + if (piece_space(p) === s && !is_rebel(p)) + gen_action_piece(p) + }) +} + /* MISC SPACE + PIECE QUERIES */ function count_pieces(s, faction, type) { let n = 0 - for (let p of iter_faction_pieces(faction, type)) + for_each_piece(faction, type, p => { if (piece_space(p) === s) ++n + }) return n } function count_pieces_on_map(faction, type) { - let first = first_piece[faction][type] - let last = last_piece[faction][type] let n = 0 - for (let p = first; p <= last; ++p) + for_each_piece(faction, type, p => { if (piece_space(p) >= 0) ++n + }) return n } @@ -1479,7 +1488,9 @@ function has_majority(s) { } function find_piece(s, faction, type) { - for (let p of iter_faction_pieces(faction, type)) + let p0 = first_piece[faction][type] + let p1 = last_piece[faction][type] + for (let p = p0; p <= p1; ++p) if (piece_space(p) === s) return p return -1 @@ -1490,34 +1501,30 @@ function has_piece(s, faction, type) { } function has_unmoved_piece(s, faction) { - for (let p of iter_faction_movable(faction)) + let unmoved = false + for_each_movable(faction, p => { if (piece_space(p) === s) if (!game.cmd.pieces || game.cmd.pieces.length === 0) - return true + unmoved = true else if (!set_has(game.cmd.pieces, p)) - return true - return false + unmoved = true + }) + return unmoved } function gen_place_piece(faction, type) { - let can_place = false - for (let p of iter_faction_pieces(faction, type)) { + for_each_piece(faction, type, p => { if (piece_space(p) === AVAILABLE) { gen_action_piece(p) - can_place = true - // if (type === DISC) - // break } - } - return can_place + }) } function move_all_faction_piece_from(faction, type, from, to) { - let first = first_piece[faction][type] - let last = last_piece[faction][type] - for (let p = first; p <= last; ++p) + for_each_piece(faction, type, p => { if (piece_space(p) === from) set_piece_space(p, to) + }) } function is_selected_cmd_space(s) { @@ -1681,9 +1688,10 @@ states.return_troops = { if (game.inf_shift.n > 0) { view.prompt = "Deccan Influence dwindles: Return troops to the influence track." - for (let p of iter_faction_pieces(game.current, ELITE)) + for_each_piece(game.current, ELITE, p => { if (piece_space(p) >= 0 && piece_space(p) <= S_PUNJAB) gen_action_piece(p) + }) } else { view.prompt = "Deccan Influence dwindles: Done." @@ -2208,30 +2216,27 @@ function object_group_by(items, callback) { return groups } -/* GENERATORS */ +// === ITERATORS AND ACTION GENERATORS === -function* iter_faction_pieces(faction, type) { - let first = first_piece[faction][type] - let last = last_piece[faction][type] - for (let p = first; p <= last; ++p) - yield p; +function for_each_piece(faction, type, f) { + let p0 = first_piece[faction][type] + let p1 = last_piece[faction][type] + for (let p = p0; p <= p1; ++p) + f(p) } -function* iter_faction_movable(faction) { - if (faction === DS) { - yield* iter_faction_pieces(DS, ELITE) - yield* iter_faction_pieces(DS, TROOPS) - } else { - yield* iter_faction_pieces(faction, ELITE) - } -} +function for_each_movable(faction, f) { + if (faction === BK) + for_each_piece(BK, ELITE, f) + else if (faction === VE) + for_each_piece(BK, ELITE, f) + else if (faction === DS) { + for_each_piece(DS, TROOPS, f) + for_each_piece(DS, ELITE, f) -function* iter_rebel_elite() { - yield* iter_faction_pieces(BK, ELITE) - yield* iter_faction_pieces(VE, ELITE) + } } - // === CONST === // Factions diff --git a/tools/gendata.js b/tools/gendata.js index 0828f7e..21418e1 100644 --- a/tools/gendata.js +++ b/tools/gendata.js @@ -15,7 +15,7 @@ const TROOPS = 2 // Creating cards const IMAP = { D: DS, B: BK, V: VE } -let order = null +let order = [] data.card_title = [ null ] data.card_order = [ null ] data.card_flavor = [] |