love_letter_application 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +11 -0
- data/.rspec +3 -0
- data/.travis.yml +7 -0
- data/Gemfile +5 -0
- data/Gemfile.lock +91 -0
- data/LICENSE.txt +21 -0
- data/README.md +39 -0
- data/Rakefile +6 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/lib/love_letter_application.rb +7 -0
- data/lib/love_letter_application/action_creator.rb +16 -0
- data/lib/love_letter_application/actions/clown.rb +45 -0
- data/lib/love_letter_application/actions/general.rb +29 -0
- data/lib/love_letter_application/actions/knight.rb +31 -0
- data/lib/love_letter_application/actions/marquess.rb +28 -0
- data/lib/love_letter_application/actions/play_card.rb +33 -0
- data/lib/love_letter_application/actions/priestess.rb +36 -0
- data/lib/love_letter_application/actions/princess.rb +32 -0
- data/lib/love_letter_application/actions/soldier.rb +47 -0
- data/lib/love_letter_application/actions/wizard.rb +31 -0
- data/lib/love_letter_application/execute_action.rb +21 -0
- data/lib/love_letter_application/love_letter_imports.rb +641 -0
- data/lib/love_letter_application/models/card.rb +23 -0
- data/lib/love_letter_application/models/effects/discard_and_draw.rb +51 -0
- data/lib/love_letter_application/models/effects/eliminate_player.rb +43 -0
- data/lib/love_letter_application/models/effects/make_player_not_targetable.rb +44 -0
- data/lib/love_letter_application/models/effects/next_player_draw_card.rb +45 -0
- data/lib/love_letter_application/models/effects/play_card.rb +48 -0
- data/lib/love_letter_application/models/effects/round_complete.rb +29 -0
- data/lib/love_letter_application/models/effects/switch_hands.rb +50 -0
- data/lib/love_letter_application/models/game_board.rb +28 -0
- data/lib/love_letter_application/models/player.rb +36 -0
- data/lib/love_letter_application/results/eliminate_player.rb +43 -0
- data/lib/love_letter_application/results/nodes/card_played_node.rb +15 -0
- data/lib/love_letter_application/results/nodes/card_viewed_node.rb +21 -0
- data/lib/love_letter_application/results/nodes/discard_card_node.rb +20 -0
- data/lib/love_letter_application/results/nodes/drawn_card_node.rb +20 -0
- data/lib/love_letter_application/results/nodes/eliminated_player_node.rb +19 -0
- data/lib/love_letter_application/results/nodes/hands_switched_node.rb +22 -0
- data/lib/love_letter_application/results/nodes/knight_drawn_node.rb +15 -0
- data/lib/love_letter_application/results/nodes/knight_victory_node.rb +20 -0
- data/lib/love_letter_application/results/nodes/log_node.rb +20 -0
- data/lib/love_letter_application/results/nodes/next_player_node.rb +19 -0
- data/lib/love_letter_application/results/nodes/play_card_with_no_args_option_node.rb +19 -0
- data/lib/love_letter_application/results/nodes/play_card_with_player_id_and_card_id_option_node.rb +21 -0
- data/lib/love_letter_application/results/nodes/play_card_with_player_id_option_node.rb +20 -0
- data/lib/love_letter_application/results/nodes/player_not_targetable_node.rb +14 -0
- data/lib/love_letter_application/results/nodes/player_victory_node.rb +20 -0
- data/lib/love_letter_application/results/nodes/players_and_scores_node.rb +44 -0
- data/lib/love_letter_application/results/nodes/princess_discarded_node.rb +19 -0
- data/lib/love_letter_application/results/nodes/result_game_board_node.rb +19 -0
- data/lib/love_letter_application/results/process_correct_guess.rb +22 -0
- data/lib/love_letter_application/results/process_draw_after_discard.rb +26 -0
- data/lib/love_letter_application/results/process_incorrect_guess.rb +20 -0
- data/lib/love_letter_application/results/process_knight_showdown.rb +50 -0
- data/lib/love_letter_application/results/process_next_player_turn.rb +57 -0
- data/lib/love_letter_application/results/process_next_turn_options.rb +53 -0
- data/lib/love_letter_application/results/process_princess_discarded.rb +23 -0
- data/lib/love_letter_application/results/process_resolve_wizard.rb +36 -0
- data/lib/love_letter_application/results/process_round_complete_by_depleted_deck.rb +50 -0
- data/lib/love_letter_application/results/process_round_complete_by_elimination.rb +26 -0
- data/lib/love_letter_application/results/process_switch_hands.rb +51 -0
- data/lib/love_letter_application/results/yield_to_block.rb +12 -0
- data/lib/love_letter_application/types/card.rb +20 -0
- data/lib/love_letter_application/types/game_board.rb +59 -0
- data/lib/love_letter_application/types/player.rb +25 -0
- data/lib/love_letter_application/validator/base.rb +19 -0
- data/lib/love_letter_application/validator/builder.rb +50 -0
- data/lib/love_letter_application/validator/get_legal_card_ids.rb +23 -0
- data/lib/love_letter_application/validator/get_legal_card_ids/marquess.rb +18 -0
- data/lib/love_letter_application/validator/play_card.rb +21 -0
- data/lib/love_letter_application/validator/play_card/builder.rb +23 -0
- data/lib/love_letter_application/validator/play_card/no_options.rb +19 -0
- data/lib/love_letter_application/validator/play_card/select_target_player.rb +30 -0
- data/lib/love_letter_application/validator/play_card/select_target_player/builder.rb +44 -0
- data/lib/love_letter_application/validator/play_card/soldier.rb +39 -0
- data/lib/love_letter_application/validator/play_card/soldier/builder.rb +49 -0
- data/lib/love_letter_application/validator/validate_card_id.rb +23 -0
- data/lib/love_letter_application/version.rb +3 -0
- data/love_letter_application.gemspec +43 -0
- metadata +278 -0
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'dry-initializer'
|
4
|
+
|
5
|
+
module LoveLetterApplication
|
6
|
+
module Actions
|
7
|
+
class Princess
|
8
|
+
include Dry::Initializer.define -> do
|
9
|
+
option :play_card, type: ::Types::Callable
|
10
|
+
option :get_card_played_node, type: ::Types::Callable
|
11
|
+
option :get_princess_discarded_node, type: ::Types::Callable
|
12
|
+
option :eliminate_player, type: ::Types::Callable
|
13
|
+
end
|
14
|
+
|
15
|
+
def call(game_board:, change_orders:)
|
16
|
+
game_board = play_card.(game_board: game_board, card_id: Princess::id)
|
17
|
+
eliminate_player.(
|
18
|
+
target_player_id: game_board.current_player_id.to_i,
|
19
|
+
game_board: game_board,
|
20
|
+
change_orders: change_orders
|
21
|
+
.push(get_card_played_node(
|
22
|
+
player_id: game_board.current_player_id.to_i,
|
23
|
+
card_id: Princess::id)
|
24
|
+
.push(get_princess_discarded_node.(
|
25
|
+
player_id: game_board.current_player_id.to_i))))
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.id;8;end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'dry-initializer'
|
4
|
+
|
5
|
+
module LoveLetterApplication
|
6
|
+
module Actions
|
7
|
+
class Soldier
|
8
|
+
include Dry::Initializer.define -> do
|
9
|
+
option :play_card, type: ::Types::Callable
|
10
|
+
option :get_card_played_node, type: ::Types::Callable
|
11
|
+
option :process_correct_guess, type: ::Types::Callable
|
12
|
+
option :process_incorrect_guess, type: ::Types::Callable
|
13
|
+
end
|
14
|
+
|
15
|
+
def call(target_player_id:, target_card_id:, game_board:, change_orders:)
|
16
|
+
game_board = play_card.call(
|
17
|
+
game_board: game_board,
|
18
|
+
card_id: Soldier::id)
|
19
|
+
change_orders = change_orders.push(get_card_played_node.(
|
20
|
+
player_id: game_board.current_player_id.to_i,
|
21
|
+
card_id: Soldier::id))
|
22
|
+
if guess_is_correct?(target_player_id, target_card_id, game_board)
|
23
|
+
process_correct_guess.(
|
24
|
+
target_player_id: target_player_id,
|
25
|
+
game_board: game_board,
|
26
|
+
change_orders: change_orders)
|
27
|
+
else
|
28
|
+
process_incorrect_guess.(
|
29
|
+
game_board: game_board,
|
30
|
+
change_orders: change_orders)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.id;1;end
|
35
|
+
|
36
|
+
private
|
37
|
+
def guess_is_correct?(target_player_id, target_card_id, game_board)
|
38
|
+
game_board
|
39
|
+
.players
|
40
|
+
.find{|player| player.id.to_i.eql?(target_player_id)}
|
41
|
+
.hand
|
42
|
+
.any?{|card| card.id.to_i.eql?(target_card_id)}
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'dry-initializer'
|
4
|
+
|
5
|
+
module LoveLetterApplication
|
6
|
+
module Actions
|
7
|
+
class Wizard
|
8
|
+
include Dry::Initializer.define -> do
|
9
|
+
option :play_card, type: ::Types::Callable
|
10
|
+
option :get_card_played_node, type: ::Types::Callable
|
11
|
+
option :process_resolve_wizard, type: ::Types::Callable
|
12
|
+
end
|
13
|
+
|
14
|
+
def call(target_player_id:, game_board:, change_orders:)
|
15
|
+
game_board = play_card.(
|
16
|
+
game_board: game_board,
|
17
|
+
card_id: Wizard::id)
|
18
|
+
change_orders = change_orders.push(get_card_played_node.(
|
19
|
+
player_id: game_board.current_player_id.to_i,
|
20
|
+
card_id: Wizard::id))
|
21
|
+
process_resolve_wizard.(
|
22
|
+
target_player_id: target_player_id.to_i,
|
23
|
+
game_board: game_board,
|
24
|
+
change_orders: change_orders)
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.id;5;end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'love_letter_application/love_letter_imports'
|
4
|
+
|
5
|
+
module LoveLetterApplication
|
6
|
+
class ExecuteAction
|
7
|
+
include LoveLetterApplication::LoveLetterImports[
|
8
|
+
new_change_orders: 'love_letter_application.change_orders_initializer',
|
9
|
+
game_board_type: 'love_letter_application.types.game_board',
|
10
|
+
build_validator: 'love_letter_application.build_validator']
|
11
|
+
|
12
|
+
def call(action_hash:, game_board:, user:, last_action_id:)
|
13
|
+
game_board_type.call(game_board)
|
14
|
+
validate = build_validator.(game_board: game_board, last_action_id: last_action_id)
|
15
|
+
execute_action = validate.(action_hash: action_hash, user: user)
|
16
|
+
change_orders = new_change_orders.()
|
17
|
+
execute_action.(game_board: game_board, change_orders: change_orders)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
@@ -0,0 +1,641 @@
|
|
1
|
+
#frozen string_literal: true
|
2
|
+
|
3
|
+
require 'change_orders'
|
4
|
+
require 'dry-auto_inject'
|
5
|
+
require 'dry-container'
|
6
|
+
require 'love_letter_application/actions/soldier'
|
7
|
+
require 'love_letter_application/actions/clown'
|
8
|
+
require 'love_letter_application/actions/knight'
|
9
|
+
require 'love_letter_application/actions/priestess'
|
10
|
+
require 'love_letter_application/actions/wizard'
|
11
|
+
require 'love_letter_application/actions/general'
|
12
|
+
require 'love_letter_application/actions/marquess'
|
13
|
+
require 'love_letter_application/actions/princess'
|
14
|
+
require 'love_letter_application/models/card'
|
15
|
+
require 'love_letter_application/models/effects/discard_and_draw'
|
16
|
+
require 'love_letter_application/models/effects/eliminate_player'
|
17
|
+
require 'love_letter_application/models/effects/make_player_not_targetable'
|
18
|
+
require 'love_letter_application/models/effects/next_player_draw_card'
|
19
|
+
require 'love_letter_application/models/effects/play_card'
|
20
|
+
require 'love_letter_application/models/effects/round_complete'
|
21
|
+
require 'love_letter_application/models/effects/switch_hands'
|
22
|
+
require 'love_letter_application/results/eliminate_player'
|
23
|
+
require 'love_letter_application/results/process_correct_guess'
|
24
|
+
require 'love_letter_application/results/process_draw_after_discard'
|
25
|
+
require 'love_letter_application/results/process_incorrect_guess'
|
26
|
+
require 'love_letter_application/results/process_knight_showdown'
|
27
|
+
require 'love_letter_application/results/process_next_player_turn'
|
28
|
+
require 'love_letter_application/results/process_next_turn_options'
|
29
|
+
require 'love_letter_application/results/process_princess_discarded'
|
30
|
+
require 'love_letter_application/results/process_resolve_wizard'
|
31
|
+
require 'love_letter_application/results/process_round_complete_by_depleted_deck'
|
32
|
+
require 'love_letter_application/results/process_round_complete_by_elimination'
|
33
|
+
require 'love_letter_application/results/process_switch_hands'
|
34
|
+
require 'love_letter_application/results/yield_to_block'
|
35
|
+
require 'love_letter_application/results/nodes/card_played_node'
|
36
|
+
require 'love_letter_application/results/nodes/card_viewed_node'
|
37
|
+
require 'love_letter_application/results/nodes/discard_card_node'
|
38
|
+
require 'love_letter_application/results/nodes/drawn_card_node'
|
39
|
+
require 'love_letter_application/results/nodes/eliminated_player_node'
|
40
|
+
require 'love_letter_application/results/nodes/hands_switched_node'
|
41
|
+
require 'love_letter_application/results/nodes/knight_drawn_node'
|
42
|
+
require 'love_letter_application/results/nodes/knight_victory_node'
|
43
|
+
require 'love_letter_application/results/nodes/log_node'
|
44
|
+
require 'love_letter_application/results/nodes/next_player_node'
|
45
|
+
require 'love_letter_application/results/nodes/play_card_with_no_args_option_node'
|
46
|
+
require 'love_letter_application/results/nodes/play_card_with_player_id_and_card_id_option_node'
|
47
|
+
require 'love_letter_application/results/nodes/play_card_with_player_id_option_node'
|
48
|
+
require 'love_letter_application/results/nodes/player_not_targetable_node'
|
49
|
+
require 'love_letter_application/results/nodes/princess_discarded_node'
|
50
|
+
require 'love_letter_application/results/nodes/result_game_board_node'
|
51
|
+
require 'love_letter_application/types/game_board'
|
52
|
+
require 'love_letter_application/validator/builder'
|
53
|
+
require 'love_letter_application/validator/get_legal_card_ids'
|
54
|
+
require 'love_letter_application/validator/get_legal_card_ids/marquess'
|
55
|
+
require 'love_letter_application/validator/play_card/builder'
|
56
|
+
require 'love_letter_application/validator/play_card/no_options'
|
57
|
+
require 'love_letter_application/validator/play_card/soldier/builder'
|
58
|
+
require 'love_letter_application/validator/play_card/select_target_player/builder'
|
59
|
+
require 'love_letter_application/validator/validate_card_id'
|
60
|
+
|
61
|
+
module LoveLetterApplication
|
62
|
+
class DependencyContainer
|
63
|
+
extend Dry::Container::Mixin
|
64
|
+
namespace :love_letter_application do
|
65
|
+
namespace :types do
|
66
|
+
register :game_board do
|
67
|
+
LoveLetterApplication::Types::GameBoard
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
namespace :validator_builders do
|
72
|
+
namespace :raw do
|
73
|
+
no_options = LoveLetterApplication::Validator::PlayCard::NoOptions::new
|
74
|
+
|
75
|
+
register :all do
|
76
|
+
[ ->(**args, &block){},
|
77
|
+
resolve(:soldier),
|
78
|
+
resolve(:clown),
|
79
|
+
resolve(:knight),
|
80
|
+
resolve(:priestess),
|
81
|
+
resolve(:wizard),
|
82
|
+
resolve(:general),
|
83
|
+
resolve(:marquess),
|
84
|
+
resolve(:princess)
|
85
|
+
]
|
86
|
+
end
|
87
|
+
|
88
|
+
register :validate_card_combo_for do
|
89
|
+
all_options_available = ->(card_list:){card_list.map{|card| card.id.to_i}}
|
90
|
+
[ all_options_available,
|
91
|
+
all_options_available, #card_id = 1
|
92
|
+
all_options_available, #card_id = 2
|
93
|
+
all_options_available, #card_id = 3
|
94
|
+
all_options_available, #card_id = 4
|
95
|
+
all_options_available, #card_id = 5
|
96
|
+
all_options_available, #card_id = 6
|
97
|
+
LoveLetterApplication::Validator::GetLegalCardIds::Marquess::new.method(:call),#id=7
|
98
|
+
all_options_available #card_id = 8
|
99
|
+
]
|
100
|
+
end
|
101
|
+
|
102
|
+
register :get_legal_card_ids do
|
103
|
+
LoveLetterApplication::Validator::GetLegalCardIds::new(
|
104
|
+
validate_card_combo_for: resolve(:validate_card_combo_for)).method(:call)
|
105
|
+
end
|
106
|
+
|
107
|
+
register :soldier do
|
108
|
+
LoveLetterApplication::Validator::PlayCard::Soldier::Builder::new(
|
109
|
+
no_options_validator: no_options).method(:call)
|
110
|
+
end
|
111
|
+
|
112
|
+
register :clown do
|
113
|
+
LoveLetterApplication::Validator::PlayCard::SelectTargetPlayer::Builder::new(
|
114
|
+
target_self?: false,
|
115
|
+
no_options_validator: no_options).method(:call)
|
116
|
+
end
|
117
|
+
|
118
|
+
register :knight do
|
119
|
+
resolve(:clown)
|
120
|
+
end
|
121
|
+
|
122
|
+
register :priestess do
|
123
|
+
->(model){no_options}
|
124
|
+
end
|
125
|
+
|
126
|
+
register :wizard do
|
127
|
+
LoveLetterApplication::Validator::PlayCard::SelectTargetPlayer::Builder::new(
|
128
|
+
target_self?: true,
|
129
|
+
no_options_validator: no_options).method(:call)
|
130
|
+
end
|
131
|
+
|
132
|
+
register :general do
|
133
|
+
resolve(:clown)
|
134
|
+
end
|
135
|
+
|
136
|
+
register :marquess do
|
137
|
+
resolve(:priestess)
|
138
|
+
end
|
139
|
+
|
140
|
+
register :princess do
|
141
|
+
resolve(:priestess)
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
register :all do
|
146
|
+
[ ->(**args){},
|
147
|
+
resolve(:soldier),
|
148
|
+
resolve(:clown),
|
149
|
+
resolve(:knight),
|
150
|
+
resolve(:priestess),
|
151
|
+
resolve(:wizard),
|
152
|
+
resolve(:general),
|
153
|
+
resolve(:marquess),
|
154
|
+
resolve(:princess)]
|
155
|
+
end
|
156
|
+
|
157
|
+
register :soldier do
|
158
|
+
soldier_action = LoveLetterApplication::DependencyContainer
|
159
|
+
.resolve('love_letter_application.actions.soldier')
|
160
|
+
LoveLetterApplication::Validator::PlayCard::Builder::new(
|
161
|
+
build_raw_validator: resolve('raw.soldier'),
|
162
|
+
wrap_result: ->(successful_result){GameValidator::Validator::Result::new(
|
163
|
+
result: successful_result,
|
164
|
+
execute: soldier_action)}).method(:call)
|
165
|
+
end
|
166
|
+
|
167
|
+
register :clown do
|
168
|
+
clown_action = LoveLetterApplication::DependencyContainer
|
169
|
+
.resolve('love_letter_application.actions.clown')
|
170
|
+
LoveLetterApplication::Validator::PlayCard::Builder::new(
|
171
|
+
build_raw_validator: resolve('raw.clown'),
|
172
|
+
wrap_result: ->(successful_result){GameValidator::Validator::Result::new(
|
173
|
+
result: successful_result,
|
174
|
+
execute: clown_action)}).method(:call)
|
175
|
+
end
|
176
|
+
|
177
|
+
register :knight do
|
178
|
+
knight_action = LoveLetterApplication::DependencyContainer
|
179
|
+
.resolve('love_letter_application.actions.knight')
|
180
|
+
LoveLetterApplication::Validator::PlayCard::Builder::new(
|
181
|
+
build_raw_validator: resolve('raw.knight'),
|
182
|
+
wrap_result: ->(successful_result){GameValidator::Validator::Result::new(
|
183
|
+
result: successful_result,
|
184
|
+
execute: knight_action)}).method(:call)
|
185
|
+
end
|
186
|
+
|
187
|
+
register :priestess do
|
188
|
+
priestess_action = LoveLetterApplication::DependencyContainer
|
189
|
+
.resolve('love_letter_application.actions.priestess')
|
190
|
+
LoveLetterApplication::Validator::PlayCard::Builder::new(
|
191
|
+
build_raw_validator: resolve('raw.priestess'),
|
192
|
+
wrap_result: ->(successful_result){GameValidator::Validator::Result::new(
|
193
|
+
result: successful_result,
|
194
|
+
execute: priestess_action)}).method(:call)
|
195
|
+
end
|
196
|
+
|
197
|
+
register :wizard do
|
198
|
+
wizard_action = LoveLetterApplication::DependencyContainer
|
199
|
+
.resolve('love_letter_application.actions.wizard')
|
200
|
+
LoveLetterApplication::Validator::PlayCard::Builder::new(
|
201
|
+
build_raw_validator: resolve('raw.wizard'),
|
202
|
+
wrap_result: ->(successful_result){GameValidator::Validator::Result::new(
|
203
|
+
result: successful_result,
|
204
|
+
execute: wizard_action)}).method(:call)
|
205
|
+
end
|
206
|
+
|
207
|
+
register :general do
|
208
|
+
general_action = LoveLetterApplication::DependencyContainer
|
209
|
+
.resolve('love_letter_application.actions.general')
|
210
|
+
LoveLetterApplication::Validator::PlayCard::Builder::new(
|
211
|
+
build_raw_validator: resolve('raw.general'),
|
212
|
+
wrap_result: ->(successful_result){GameValidator::Validator::Result::new(
|
213
|
+
result: successful_result,
|
214
|
+
execute: general_action)}).method(:call)
|
215
|
+
end
|
216
|
+
|
217
|
+
register :marquess do
|
218
|
+
marquess_action = LoveLetterApplication::DependencyContainer
|
219
|
+
.resolve('love_letter_application.actions.marquess')
|
220
|
+
LoveLetterApplication::Validator::PlayCard::Builder::new(
|
221
|
+
build_raw_validator: resolve('raw.marquess'),
|
222
|
+
wrap_result: ->(successful_result){GameValidator::Validator::Result::new(
|
223
|
+
result: successful_result,
|
224
|
+
execute: marquess_action)}).method(:call)
|
225
|
+
end
|
226
|
+
|
227
|
+
register :princess do
|
228
|
+
princess_action = LoveLetterApplication::DependencyContainer
|
229
|
+
.resolve('love_letter_application.actions.princess')
|
230
|
+
LoveLetterApplication::Validator::PlayCard::Builder::new(
|
231
|
+
build_raw_validator: resolve('raw.princess'),
|
232
|
+
wrap_result: ->(successful_result){GameValidator::Validator::Result::new(
|
233
|
+
result: successful_result,
|
234
|
+
execute: princess_action)}).method(:call)
|
235
|
+
end
|
236
|
+
end
|
237
|
+
|
238
|
+
register :change_orders_initializer do
|
239
|
+
new_change_orders = ChangeOrders::Container::new
|
240
|
+
->{new_change_orders}
|
241
|
+
end
|
242
|
+
|
243
|
+
namespace :model_effects do
|
244
|
+
register :discard_and_draw do
|
245
|
+
LoveLetterApplication::Models::Effects::DiscardAndDraw::new(
|
246
|
+
null_card: LoveLetterApplication::Models::Card::new(
|
247
|
+
id: -1,
|
248
|
+
rank: -1,
|
249
|
+
targetable?: false)).method(:call)
|
250
|
+
end
|
251
|
+
|
252
|
+
register :eliminate_player_from_game_board do
|
253
|
+
LoveLetterApplication::Models::Effects::EliminatePlayer::new.method(:call)
|
254
|
+
end
|
255
|
+
|
256
|
+
register :make_player_not_targetable do
|
257
|
+
LoveLetterApplication::Models::Effects::MakePlayerNotTargetable::new.method(:call)
|
258
|
+
end
|
259
|
+
|
260
|
+
register :next_player_draw_card do
|
261
|
+
LoveLetterApplication::Models::Effects::NextPlayerDrawCard::new.method(:call)
|
262
|
+
end
|
263
|
+
|
264
|
+
register :play_card do
|
265
|
+
LoveLetterApplication::Models::Effects::PlayCard::new.method(:call)
|
266
|
+
end
|
267
|
+
|
268
|
+
register :round_complete do
|
269
|
+
LoveLetterApplication::Models::Effects::RoundComplete::new.method(:call)
|
270
|
+
end
|
271
|
+
|
272
|
+
register :switch_hands do
|
273
|
+
LoveLetterApplication::Models::Effects::SwitchHands::new.method(:call)
|
274
|
+
end
|
275
|
+
end
|
276
|
+
|
277
|
+
namespace :results do
|
278
|
+
register :eliminate_player do
|
279
|
+
eliminate_player_from_game_board = LoveLetterApplication::DependencyContainer
|
280
|
+
.resolve('love_letter_application.model_effects.eliminate_player_from_game_board')
|
281
|
+
LoveLetterApplication::Results::EliminatePlayer::new(
|
282
|
+
process_round_complete_by_elimination: resolve(:process_round_complete_by_elimination),
|
283
|
+
get_next_player_turn: resolve(:get_next_player_node),
|
284
|
+
eliminate_player_from_game_board: eliminate_player_from_game_board,
|
285
|
+
process_next_player_turn: resolve(:process_next_player_turn),
|
286
|
+
get_eliminated_player_node: resolve(:get_eliminated_player_node)).method(:call)
|
287
|
+
end
|
288
|
+
|
289
|
+
register :get_card_played_node do
|
290
|
+
->(player_id:, card_id:) do
|
291
|
+
LoveLetterApplication::Results::Nodes::CardPlayedNode::new(
|
292
|
+
player_id: player_id,
|
293
|
+
card_id: card_id)
|
294
|
+
end
|
295
|
+
end
|
296
|
+
|
297
|
+
register :get_card_viewed_node do
|
298
|
+
->(player_id:, target_player_id:, card_id:) do
|
299
|
+
LoveLetterApplication::Results::Nodes::CardViewedNode::new(
|
300
|
+
player_id: player_id,
|
301
|
+
target_player_id: target_player_id,
|
302
|
+
card_id: card_id)
|
303
|
+
end
|
304
|
+
end
|
305
|
+
|
306
|
+
register :get_discard_card_node do
|
307
|
+
->(player_id:, card_id:) do
|
308
|
+
LoveLetterApplication::Results::Nodes::DiscardCardNode::new(
|
309
|
+
player_id: player_id,
|
310
|
+
card_id: card_id)
|
311
|
+
end
|
312
|
+
end
|
313
|
+
|
314
|
+
register :get_drawn_card_node do
|
315
|
+
->(player_id:, card_id:) do
|
316
|
+
LoveLetterApplication::Results::Nodes::DrawnCardNode::new(
|
317
|
+
player_id: player_id,
|
318
|
+
card_id: card_id)
|
319
|
+
end
|
320
|
+
end
|
321
|
+
|
322
|
+
register :get_eliminated_player_node do
|
323
|
+
->(player_id:) do
|
324
|
+
LoveLetterApplication::Results::Nodes::EliminatedPlayerNode::new(player_id: player_id)
|
325
|
+
end
|
326
|
+
end
|
327
|
+
|
328
|
+
register :get_hands_switched_node do
|
329
|
+
->(player_id:, target_player_id:, card_id_given:, card_id_taken:) do
|
330
|
+
LoveLetterApplication::Results::Nodes::HandsSwitchedNode::new(
|
331
|
+
player_id: player_id,
|
332
|
+
target_player_id: target_player_id,
|
333
|
+
card_id_given: card_id_given,
|
334
|
+
card_id_taken: card_id_taken)
|
335
|
+
end
|
336
|
+
end
|
337
|
+
|
338
|
+
register :get_knight_victory_node do
|
339
|
+
->(winning_player_id:, losing_player_id:) do
|
340
|
+
LoveLetterApplication::Results::Nodes::KnightVictoryNode::new(
|
341
|
+
winning_player_id: winning_player_id,
|
342
|
+
losing_player_id: losing_player_id)
|
343
|
+
end
|
344
|
+
end
|
345
|
+
|
346
|
+
register :get_next_player_node do
|
347
|
+
->(player_id:) do
|
348
|
+
LoveLetterApplication::Results::Nodes::NextPlayerNode::new(player_id: player_id)
|
349
|
+
end
|
350
|
+
end
|
351
|
+
|
352
|
+
register :get_play_card_with_no_options_node do
|
353
|
+
->(card_id:) do
|
354
|
+
LoveLetterApplication::Results::Nodes::PlayCardWithNoOptionsNode::new(card_id: card_id)
|
355
|
+
end
|
356
|
+
end
|
357
|
+
|
358
|
+
register :get_play_card_with_player_id_and_card_id_option_node do
|
359
|
+
->(card_id:, player_id_list:, card_id_list:) do
|
360
|
+
LoveLetterApplication::Results::Nodes::PlayCardWithPlayerIdAndCardIdOptionNode::new(
|
361
|
+
card_id: card_id,
|
362
|
+
player_id_list: player_id_list,
|
363
|
+
card_id_list: card_id_list)
|
364
|
+
end
|
365
|
+
end
|
366
|
+
|
367
|
+
register :get_play_card_with_player_id_option_node do
|
368
|
+
->(card_id:, player_id_list:) do
|
369
|
+
LoveLetterApplication::Results::Nodes::PlayCardWithPlayerIdOptionNode::new(
|
370
|
+
card_id: card_id,
|
371
|
+
player_id_list: player_id_list)
|
372
|
+
end
|
373
|
+
end
|
374
|
+
|
375
|
+
register :get_players_and_scores_node do
|
376
|
+
->(players_and_scores:) do
|
377
|
+
LoveLetterApplication::Results::Nodes::PlayersAndScores::new(
|
378
|
+
players_and_scores: players_and_scores)
|
379
|
+
end
|
380
|
+
end
|
381
|
+
|
382
|
+
register :get_player_not_targetable_node do
|
383
|
+
->(player_id:) do
|
384
|
+
LoveLetterApplication::Results::Nodes::PlayerNotTargetableNode::new(
|
385
|
+
player_id: player_id)
|
386
|
+
end
|
387
|
+
end
|
388
|
+
|
389
|
+
register :get_player_victory_node do
|
390
|
+
->(player_id:) do
|
391
|
+
LoveLetterApplication::Results::Nodes::LogNode::new(
|
392
|
+
message: "Player with id #{player_id} is the winner")
|
393
|
+
end
|
394
|
+
end
|
395
|
+
|
396
|
+
register :get_princess_discarded_node do
|
397
|
+
->(player_id:) do
|
398
|
+
LoveLetterApplication::Results::Nodes::PrincessDiscardedNode::new(
|
399
|
+
player_id: player_id)
|
400
|
+
end
|
401
|
+
end
|
402
|
+
|
403
|
+
register :get_result_game_board_node do
|
404
|
+
->(game_board:) do
|
405
|
+
LoveLetterApplication::Results::Nodes::ResultGameBoardNode::new(game_board: game_board)
|
406
|
+
end
|
407
|
+
end
|
408
|
+
|
409
|
+
register :knight_drawn_node do
|
410
|
+
LoveLetterApplication::Results::Nodes::KnightDrawnNode::new
|
411
|
+
end
|
412
|
+
|
413
|
+
register :process_correct_guess do
|
414
|
+
LoveLetterApplication::Results::ProcessCorrectGuess::new(
|
415
|
+
log_correct_guess_node: LoveLetterApplication::Results::Nodes::LogNode::new(
|
416
|
+
message: 'The guess is correct'),
|
417
|
+
eliminate_player: resolve(:eliminate_player)).method(:call)
|
418
|
+
end
|
419
|
+
|
420
|
+
register :process_discard_passive_result do
|
421
|
+
no_action = ::Types::Callable.call(LoveLetterApplication::Results::YieldToBlock::new)
|
422
|
+
[ no_action,
|
423
|
+
no_action, #card_id = 1
|
424
|
+
no_action, #card_id = 2
|
425
|
+
no_action, #card_id = 3
|
426
|
+
no_action, #card_id = 4
|
427
|
+
no_action, #card_id = 5
|
428
|
+
no_action, #card_id = 6
|
429
|
+
no_action, #card_id = 7
|
430
|
+
resolve(:process_princess_discarded)] #card_id = 8
|
431
|
+
end
|
432
|
+
|
433
|
+
register :process_draw_after_discard do
|
434
|
+
discard_and_draw = LoveLetterApplication::DependencyContainer
|
435
|
+
.resolve('love_letter_application.model_effects.discard_and_draw')
|
436
|
+
LoveLetterApplication::Results::ProcessDrawAfterDiscard::new(
|
437
|
+
get_drawn_card_node: resolve(:get_drawn_card_node),
|
438
|
+
discard_and_draw: discard_and_draw,
|
439
|
+
process_next_player_turn: resolve(:process_next_player_turn)).method(:call)
|
440
|
+
end
|
441
|
+
|
442
|
+
register :process_incorrect_guess do
|
443
|
+
LoveLetterApplication::Results::ProcessIncorrectGuess::new(
|
444
|
+
log_incorrect_guess_node: LoveLetterApplication::Results::Nodes::LogNode::new(
|
445
|
+
message: 'The guess is incorrect'),
|
446
|
+
process_next_player_turn: resolve(:process_next_player_turn)).method(:call)
|
447
|
+
end
|
448
|
+
|
449
|
+
register :process_knight_showdown do
|
450
|
+
LoveLetterApplication::Results::ProcessKnightShowdown::new(
|
451
|
+
knight_drawn_node: resolve(:knight_drawn_node),
|
452
|
+
get_knight_victory_node: resolve(:get_knight_victory_node),
|
453
|
+
eliminate_player: resolve(:eliminate_player),
|
454
|
+
process_next_player_turn: resolve(:process_next_player_turn)).method(:call)
|
455
|
+
end
|
456
|
+
|
457
|
+
register :process_next_player_turn do
|
458
|
+
next_player_draw_card = LoveLetterApplication::DependencyContainer
|
459
|
+
.resolve('love_letter_application.model_effects.next_player_draw_card')
|
460
|
+
LoveLetterApplication::Results::ProcessNextPlayerTurn::new(
|
461
|
+
process_round_complete_by_depleted_deck: resolve(:process_round_complete_by_depleted_deck),
|
462
|
+
get_next_player_node: resolve(:get_next_player_node),
|
463
|
+
get_drawn_card_node: resolve(:get_drawn_card_node),
|
464
|
+
next_player_draw_card: next_player_draw_card,
|
465
|
+
get_result_game_board_node: resolve(:get_result_game_board_node),
|
466
|
+
process_next_turn_options: resolve(:process_next_turn_options)).method(:call)
|
467
|
+
end
|
468
|
+
|
469
|
+
register :process_next_turn_options do
|
470
|
+
all_card_validator_builders = LoveLetterApplication::DependencyContainer
|
471
|
+
.resolve('love_letter_application.validator_builders.raw.all')
|
472
|
+
get_legal_card_ids = LoveLetterApplication::DependencyContainer
|
473
|
+
.resolve('love_letter_application.validator_builders.raw.get_legal_card_ids')
|
474
|
+
player_id_option = resolve(:get_play_card_with_player_id_option_node)
|
475
|
+
player_card_id_option = resolve(:get_play_card_with_player_id_and_card_id_option_node)
|
476
|
+
|
477
|
+
LoveLetterApplication::Results::ProcessNextTurnOptions::new(
|
478
|
+
get_legal_card_ids: get_legal_card_ids,
|
479
|
+
all_card_validator_builders: all_card_validator_builders,
|
480
|
+
get_play_card_with_no_options_node: resolve(:get_play_card_with_no_options_node),
|
481
|
+
get_play_card_with_player_id_option_node: player_id_option,
|
482
|
+
get_play_card_with_player_id_and_card_id_option_node: player_card_id_option)
|
483
|
+
.method(:call)
|
484
|
+
end
|
485
|
+
|
486
|
+
register :process_princess_discarded do
|
487
|
+
LoveLetterApplication::Results::ProcessPrincessDiscarded::new(
|
488
|
+
get_princess_discarded_node: resolve(:get_princess_discarded_node),
|
489
|
+
eliminate_player: resolve(:eliminate_player)).method(:call)
|
490
|
+
end
|
491
|
+
|
492
|
+
register :process_resolve_wizard do
|
493
|
+
LoveLetterApplication::Results::ProcessResolveWizard::new(
|
494
|
+
get_discard_card_node: resolve(:get_discard_card_node),
|
495
|
+
process_discard_passive_result: resolve(:process_discard_passive_result),
|
496
|
+
process_draw_after_discard: resolve(:process_draw_after_discard)).method(:call)
|
497
|
+
end
|
498
|
+
|
499
|
+
register :process_round_complete_by_depleted_deck do
|
500
|
+
round_complete = LoveLetterApplication::DependencyContainer
|
501
|
+
.resolve('love_letter_application.model_effects.round_complete')
|
502
|
+
LoveLetterApplication::Results::ProcessRoundCompleteByDepletedDeck::new(
|
503
|
+
log_deck_depleted_node: LoveLetterApplication::Results::Nodes::LogNode::new(
|
504
|
+
message: 'Round is complete. There are no more cards in the draw pile.'),
|
505
|
+
get_players_and_scores_node: resolve(:get_players_and_scores_node),
|
506
|
+
get_player_victory_node: resolve(:get_player_victory_node),
|
507
|
+
round_complete: round_complete,
|
508
|
+
get_result_game_board_node: resolve(:get_result_game_board_node)).method(:call)
|
509
|
+
end
|
510
|
+
|
511
|
+
register :process_round_complete_by_elimination do
|
512
|
+
round_complete = LoveLetterApplication::DependencyContainer
|
513
|
+
.resolve('love_letter_application.model_effects.round_complete')
|
514
|
+
LoveLetterApplication::Results::ProcessRoundCompleteByElimination::new(
|
515
|
+
log_all_opponents_eliminated_node: LoveLetterApplication::Results::Nodes::LogNode::new(
|
516
|
+
message: 'Round is complete. Only one player remains.'),
|
517
|
+
get_player_victory_node: resolve(:get_player_victory_node),
|
518
|
+
round_complete: round_complete,
|
519
|
+
get_result_game_board_node: resolve(:get_result_game_board_node)).method(:call)
|
520
|
+
end
|
521
|
+
|
522
|
+
register :process_switch_hands do
|
523
|
+
switch_hands = LoveLetterApplication::DependencyContainer
|
524
|
+
.resolve('love_letter_application.model_effects.switch_hands')
|
525
|
+
LoveLetterApplication::Results::ProcessSwitchHands::new(
|
526
|
+
get_hands_switched_node: resolve(:get_hands_switched_node),
|
527
|
+
switch_hands: switch_hands,
|
528
|
+
process_next_player_turn: resolve(:process_next_player_turn)).method(:call)
|
529
|
+
end
|
530
|
+
end
|
531
|
+
|
532
|
+
namespace :actions do
|
533
|
+
register :get_card_played_node do
|
534
|
+
LoveLetterApplication::DependencyContainer
|
535
|
+
.resolve('love_letter_application.results.get_card_played_node')
|
536
|
+
end
|
537
|
+
|
538
|
+
register :play_card do
|
539
|
+
LoveLetterApplication::DependencyContainer
|
540
|
+
.resolve('love_letter_application.model_effects.play_card')
|
541
|
+
end
|
542
|
+
|
543
|
+
register :soldier do
|
544
|
+
process_correct_guess = LoveLetterApplication::DependencyContainer
|
545
|
+
.resolve('love_letter_application.results.process_correct_guess')
|
546
|
+
process_incorrect_guess = LoveLetterApplication::DependencyContainer
|
547
|
+
.resolve('love_letter_application.results.process_incorrect_guess')
|
548
|
+
LoveLetterApplication::Actions::Soldier::new(
|
549
|
+
play_card: resolve(:play_card),
|
550
|
+
get_card_played_node: resolve(:get_card_played_node),
|
551
|
+
process_correct_guess: process_correct_guess,
|
552
|
+
process_incorrect_guess: process_incorrect_guess).method(:call)
|
553
|
+
end
|
554
|
+
|
555
|
+
register :clown do
|
556
|
+
get_card_viewed_node = LoveLetterApplication::DependencyContainer
|
557
|
+
.resolve('love_letter_application.results.get_card_viewed_node')
|
558
|
+
process_next_player_turn = LoveLetterApplication::DependencyContainer
|
559
|
+
.resolve('love_letter_application.results.process_next_player_turn')
|
560
|
+
LoveLetterApplication::Actions::Clown::new(
|
561
|
+
play_card: resolve(:play_card),
|
562
|
+
get_card_played_node: resolve(:get_card_played_node),
|
563
|
+
get_card_viewed_node: get_card_viewed_node,
|
564
|
+
process_next_player_turn: process_next_player_turn).method(:call)
|
565
|
+
end
|
566
|
+
|
567
|
+
register :knight do
|
568
|
+
process_knight_showdown = LoveLetterApplication::DependencyContainer
|
569
|
+
.resolve('love_letter_application.results.process_knight_showdown')
|
570
|
+
LoveLetterApplication::Actions::Knight::new(
|
571
|
+
play_card: resolve(:play_card),
|
572
|
+
get_card_played_node: resolve(:get_card_played_node),
|
573
|
+
process_knight_showdown: process_knight_showdown).method(:call)
|
574
|
+
end
|
575
|
+
|
576
|
+
register :priestess do
|
577
|
+
make_player_not_targetable = LoveLetterApplication::DependencyContainer
|
578
|
+
.resolve('love_letter_application.model_effects.make_player_not_targetable')
|
579
|
+
get_player_not_targetable_node = LoveLetterApplication::DependencyContainer
|
580
|
+
.resolve('love_letter_application.results.get_player_not_targetable_node')
|
581
|
+
process_next_player_turn = LoveLetterApplication::DependencyContainer
|
582
|
+
.resolve('love_letter_application.results.process_next_player_turn')
|
583
|
+
LoveLetterApplication::Actions::Priestess::new(
|
584
|
+
play_card: resolve(:play_card),
|
585
|
+
get_card_played_node: resolve(:get_card_played_node),
|
586
|
+
make_player_not_targetable: make_player_not_targetable,
|
587
|
+
get_player_not_targetable_node: get_player_not_targetable_node,
|
588
|
+
process_next_player_turn: process_next_player_turn).method(:call)
|
589
|
+
end
|
590
|
+
|
591
|
+
register :wizard do
|
592
|
+
process_resolve_wizard = LoveLetterApplication::DependencyContainer
|
593
|
+
.resolve('love_letter_application.results.process_resolve_wizard')
|
594
|
+
LoveLetterApplication::Actions::Wizard::new(
|
595
|
+
play_card: resolve(:play_card),
|
596
|
+
get_card_played_node: resolve(:get_card_played_node),
|
597
|
+
process_resolve_wizard: process_resolve_wizard).method(:call)
|
598
|
+
end
|
599
|
+
|
600
|
+
register :general do
|
601
|
+
process_switch_hands = LoveLetterApplication::DependencyContainer
|
602
|
+
.resolve('love_letter_application.results.process_switch_hands')
|
603
|
+
LoveLetterApplication::Actions::General::new(
|
604
|
+
play_card: resolve(:play_card),
|
605
|
+
get_card_played_node: resolve(:get_card_played_node),
|
606
|
+
process_switch_hands: process_switch_hands).method(:call)
|
607
|
+
end
|
608
|
+
|
609
|
+
register :marquess do
|
610
|
+
process_next_player_turn = LoveLetterApplication::DependencyContainer
|
611
|
+
.resolve('love_letter_application.results.process_next_player_turn')
|
612
|
+
LoveLetterApplication::Actions::Marquess::new(
|
613
|
+
play_card: resolve(:play_card),
|
614
|
+
get_card_played_node: resolve(:get_card_played_node),
|
615
|
+
process_next_player_turn: process_next_player_turn).method(:call)
|
616
|
+
end
|
617
|
+
|
618
|
+
register :princess do
|
619
|
+
get_princess_discarded_node = LoveLetterApplication::DependencyContainer
|
620
|
+
.resolve('love_letter_application.results.get_princess_discarded_node')
|
621
|
+
eliminate_player = LoveLetterApplication::DependencyContainer
|
622
|
+
.resolve('love_letter_application.results.eliminate_player')
|
623
|
+
LoveLetterApplication::Actions::Princess::new(
|
624
|
+
play_card: resolve(:play_card),
|
625
|
+
get_card_played_node: resolve(:get_card_played_node),
|
626
|
+
get_princess_discarded_node: get_princess_discarded_node,
|
627
|
+
eliminate_player: eliminate_player).method(:call)
|
628
|
+
end
|
629
|
+
end
|
630
|
+
|
631
|
+
register :build_validator do
|
632
|
+
LoveLetterApplication::Validator::Builder::new(
|
633
|
+
all_card_validator_builders: resolve('validator_builders.all'),
|
634
|
+
get_legal_card_ids: resolve('validator_builders.raw.get_legal_card_ids'))
|
635
|
+
end
|
636
|
+
end
|
637
|
+
end
|
638
|
+
end
|
639
|
+
|
640
|
+
LoveLetterApplication::LoveLetterImports = Dry::AutoInject(LoveLetterApplication::DependencyContainer)
|
641
|
+
|