blob: fd0e28786d6983090e213ced833906a16dcfc111 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
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
|