summaryrefslogtreecommitdiffstats
path: root/lib/colonial_twilight/actions/fln/agitate.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/colonial_twilight/actions/fln/agitate.rb')
-rw-r--r--lib/colonial_twilight/actions/fln/agitate.rb51
1 files changed, 51 insertions, 0 deletions
diff --git a/lib/colonial_twilight/actions/fln/agitate.rb b/lib/colonial_twilight/actions/fln/agitate.rb
new file mode 100644
index 0000000..fd0e287
--- /dev/null
+++ b/lib/colonial_twilight/actions/fln/agitate.rb
@@ -0,0 +1,51 @@
+# frozen_string_literal: true
+
+require_relative 'fln_action'
+require_relative 'rally'
+
+module ColonialTwilight
+ module Actions
+ module FLN
+ # Agitate 3.3.1
+ class Agitate < FlnAction
+ # 1 resources per Terror marker, then 1 resource for the level shift
+ def initialize(space, mode)
+ super(space, mode, cost: (mode[:remove_terror] || 0) + (mode[:shift_oppose] || 0))
+ end
+
+ def validate!
+ super
+ raise 'select at least 1 mode' unless mode.keys.size.positive?
+
+ return if space.terror.zero? || (mode.key?(:remove_terror) && mode[:remove_terror] == space.terror)
+
+ raise 'remove Terror marker first' if mode.key?(:shift_oppose)
+ end
+
+ # remove Terror first, then shift 1 level toward Oppose
+ def apply!(board)
+ raise NotImplementedError
+ end
+
+ class << self
+ def op?
+ true
+ end
+
+ # with Base and or Control && terror or shift to oppose possible
+ def applicable?(space)
+ Rally.applicable?(space) &&
+ (space.fln_bases.positive? || space.fln_control?) && (space.terror.positive? || !space.oppose?)
+ end
+
+ def available_modes(space)
+ modes = {}
+ modes[:remove_terror] = space.terror if space.terror.positive?
+ modes[:shift_oppose] = 1 unless space.oppose?
+ modes
+ end
+ end
+ end
+ end
+ end
+end