summaryrefslogtreecommitdiffstats
path: root/lib/colonial_twilight/deck.rb
blob: 8c58bf289df3e510cac49f7b3c34f39bdd2e5102 (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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#! /usr/bin/env ruby
# frozen_string_literal: true

# rubocop:disable Style/Documentation

require 'colonial_twilight/card_attributes'
module ColonialTwilight
  class Card
    include ColonialTwilight::CardAttributes

    attr_reader :num, :title

    def set(num)
      raise "card #{num} is out of range [1; #{MAX_CARD_NUM}]" if !num.positive? || num > MAX_CARD_NUM

      @num = num
      card = ColonialTwilight::CardAttributes.cards[num] || [nil, nil]
      @title = card[0]
      @attributes = card[1]
      self
    end

    def propaganda?
      @num >= 67
    end

    def dual?
      (@attributes & SINGLE).zero?
    end

    def single?
      (@attributes & SINGLE) == SINGLE
    end

    def fln_marked?
      (@attributes & FLN_MARKED) == FLN_MARKED
    end

    def special?
      (@attributes & FLN_SPECIAL) == FLN_SPECIAL
    end

    def capability?
      fln_capability? || gov_capability? || dual_capability?
    end

    def fln_capability?
      (@attributes & FLN_CAPABILITY) == FLN_CAPABILITY
    end

    def gov_capability?
      (@attributes & GOV_CAPABILITY) == GOV_CAPABILITY
    end

    def dual_capability?
      (@attributes & DUAL_CAPABILITY) == DUAL_CAPABILITY
    end

    def fln_momentum?
      (@attributes & FLN_MOMENTUM) == FLN_MOMENTUM
    end

    def gov_momentum?
      (@attributes & GOV_MOMENTUM) == GOV_MOMENTUM
    end

    def dual_momentum?
      (@attributes & DUAL_MOMENTUM) == DUAL_MOMENTUM
    end

    def fln_effective?
      # FIXME: todo
      false
    end

    def fln_effectiveness
      # FIXME: todo
      0
    end

    def fln_playable?
      # reduce GOV support or resources or commitment
      # shift France Track toward F
      # place FLN base or increase FLN resources
      false
    end

    def inspect
      s = @num < 10 ? ' ' : ''
      t = title + ' ' * (38 - title.size)
      s += "#{@num} - #{single? ? 'Single' : 'Dual  '} : #{t} : #{_capability} : #{_momentum}"
      s
    end

    def _capability
      s = ''
      s += ' FLN-capability' if fln_capability?
      s += ' GOV-capability' if gov_capability?
      s += 'DUAL-capability' if dual_capability?
      s = ' ' * 15 if s.empty?
      s
    end

    def _momentum
      s = ''
      s += ' FLN-momentum  ' if fln_momentum?
      s += ' GOV-momentum  ' if gov_momentum?
      s += 'DUAL-momentum  ' if dual_momentum?
      s
    end
  end

  # class CardAction
  #   def initialize(txt, cond)
  #     @txt = txt
  #     @condition = cond
  #   end
  # end

  class Deck
    attr_reader :card

    def initialize
      @card = Card.new
    end

    def pull(num)
      @card.set(num)
    end
  end
  # 1.upto(71) { |n| puts Deck.new.pull(n).inspect }
end