diff options
| author | Jérémy Zurcher <jeremy@asynk.ch> | 2026-03-15 10:57:18 +0100 |
|---|---|---|
| committer | Jérémy Zurcher <jeremy@asynk.ch> | 2026-03-15 10:57:18 +0100 |
| commit | e4e09f936d38a89082f40354fdf451ad875baffa (patch) | |
| tree | 0b80d727e6e75fb46cc0b7f193dca24465baddb5 /lib/colonial_twilight/actions/fln/agitate.rb | |
| parent | 7d7db184eacd1407c87d01355ae587acccccf7ac (diff) | |
| download | colonial-twilight-e4e09f936d38a89082f40354fdf451ad875baffa.zip colonial-twilight-e4e09f936d38a89082f40354fdf451ad875baffa.tar.gz | |
Rally & Agitate action classes
Diffstat (limited to 'lib/colonial_twilight/actions/fln/agitate.rb')
| -rw-r--r-- | lib/colonial_twilight/actions/fln/agitate.rb | 51 |
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 |
