diff options
author | Tor Andersson <tor@ccxvii.net> | 2022-08-06 12:44:49 +0200 |
---|---|---|
committer | Tor Andersson <tor@ccxvii.net> | 2022-11-17 13:11:26 +0100 |
commit | 7e44500681b2d01591cad1e863b2afd6345b25c1 (patch) | |
tree | dfd0673faf0fc25392d05b6bb7733a462a6d90ae | |
parent | 75f1fe03db7c4355de7ffac7e0a48fd31b28e881 (diff) | |
download | rommel-in-the-desert-7e44500681b2d01591cad1e863b2afd6345b25c1.tar.gz |
Auto-target!
-rw-r--r-- | play.js | 10 | ||||
-rw-r--r-- | rules.js | 41 |
2 files changed, 33 insertions, 18 deletions
@@ -231,17 +231,11 @@ function is_side_allied_supply_line(side) { } function is_hex_selected(hex) { + if (hex === view.pursuit || hex === view.battle) + return true return set_has(view.selected_hexes, hex) } -function is_hex_assault(hex) { - return set_has(view.assaults, hex) -} - -function is_hex_current(hex) { - return hex === view.pursuit || hex === view.battle -} - function focus_stack(stack) { if (ui.focus !== stack) { console.log("FOCUS STACK", stack) @@ -2,9 +2,6 @@ // TODO: RAIDERS -// TODO: group move from queue holding box to base -// TODO: 1942 malta group (reinforce, reduce supply card draw) - // TODO: MINEFIELDS // TODO: create minefields // TODO: tear down 2 minefields to create new minefield @@ -3919,6 +3916,33 @@ function gen_battle_target() { } } +function apply_auto_target() { + let hp = count_hp_in_battle() + for (let i = 0; i < 4; ++i) + hp[i] -= game.hits[i] + + let who = game.selected + let fc = unit_class[who] + + // armor must target armor if possible + if (fc === ARMOR && hp[ARMOR] > 0) + return apply_battle_fire(ARMOR) + + // infantry must target infantry if possible + if (fc === INFANTRY && hp[INFANTRY] > 0) + return apply_battle_fire(INFANTRY) + + // only one class remains + if (hp[ARMOR] > 0 && hp[INFANTRY] === 0 && hp[ANTITANK] === 0 && hp[ARTILLERY] === 0) + return apply_battle_fire(ARMOR) + if (hp[ARMOR] === 0 && hp[INFANTRY] > 0 && hp[ANTITANK] === 0 && hp[ARTILLERY] === 0) + return apply_battle_fire(INFANTRY) + if (hp[ARMOR] === 0 && hp[INFANTRY] === 0 && hp[ANTITANK] > 0 && hp[ARTILLERY] === 0) + return apply_battle_fire(ANTITANK) + if (hp[ARMOR] === 0 && hp[INFANTRY] === 0 && hp[ANTITANK] === 0 && hp[ARTILLERY] > 0) + return apply_battle_fire(ARTILLERY) +} + function gen_battle_hits() { let normal_steps = count_normal_steps_in_battle() let elite_steps = count_elite_steps_in_battle() @@ -3968,6 +3992,8 @@ states.battle_fire = { }, unit(who) { apply_select(who) + if (game.selected >= 0) + apply_auto_target(who) }, armor() { apply_battle_fire(ARMOR) @@ -5783,15 +5809,10 @@ exports.view = function(state, current) { if (game.battle || game.pursuit) { view.hits = game.hits view.flash = game.flash + if (game.fired.length > 0) + view.fired = game.fired } - if (game.fired.length > 0 && (game.battle || game.pursuit)) - view.fired = game.fired - if (game.active_battles.length > 0) - view.battles = game.active_battles - if (game.assault_battles.length > 0) - view.assaults = game.assault_battles - return common_view(current) } |