summaryrefslogtreecommitdiffstats
path: root/lib/colonial_twilight/fln_bot/fln_subvert.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/colonial_twilight/fln_bot/fln_subvert.rb')
-rw-r--r--lib/colonial_twilight/fln_bot/fln_subvert.rb50
1 files changed, 50 insertions, 0 deletions
diff --git a/lib/colonial_twilight/fln_bot/fln_subvert.rb b/lib/colonial_twilight/fln_bot/fln_subvert.rb
new file mode 100644
index 0000000..773b1a7
--- /dev/null
+++ b/lib/colonial_twilight/fln_bot/fln_subvert.rb
@@ -0,0 +1,50 @@
+# frozen_string_literal: true
+
+module ColonialTwilight
+ module FLNBotSubvert
+ def subvert
+ return false if (spaces = subvert_spaces(@board)).empty?
+
+ n = 2
+ while n.positive?
+ printd(' subvert 1')
+ break if (space = subvert_1_priority(spaces.select { |s| may_subvert_1_in?(s, n) }).sample).nil?
+
+ n -= space.algerian_cubes
+ apply_action _subvert_remove(space, space.algerian_police, space.algerian_troops)
+ spaces.delete(space)
+ end
+ return true if n.zero? || spaces.empty?
+
+ if n == 2 && placeable_guerrillas?
+ printd(' subvert 2')
+ unless (space = spaces.select { |s| may_subvert_2_in?(s) }.sample).nil?
+ apply_action _subvert_replace(space, pick_guerrillas_from)
+ return true
+ end
+ end
+ return false if n == 2 && !@turn.operation_done?
+
+ spaces.shuffle!
+ while n.positive? && !(space = spaces.pop).nil?
+ printd(' subvert 3')
+ n -= (p = (p = space.algerian_police) > n ? n : p)
+ n -= (t = (t = space.algerian_troops) > n ? n : t)
+ apply_action _subvert_remove(space, p, t)
+ end
+ n != 2
+ end
+
+ def _subvert_remove(space, police, troops)
+ @turn.special_activity_in(:subvert, space, 0)
+ .transfer_to(:available, :algerian_police, police)
+ .transfer_to(:available, :algerian_troops, troops)
+ end
+
+ def _subvert_replace(space, place_from)
+ @turn.special_activity_in(:subvert, space, 0)
+ .transfer_to(:available, :algerian_police, 1)
+ .transfer_from(place_from, :fln_underground, 1)
+ end
+ end
+end