diff --git a/lib/magic/cards/tide_skimmer.rb b/lib/magic/cards/tide_skimmer.rb new file mode 100644 index 0000000..ce90ce2 --- /dev/null +++ b/lib/magic/cards/tide_skimmer.rb @@ -0,0 +1,26 @@ +module Magic + module Cards + class TideSkimmer < Creature + card_name "Tide Skimmer" + cost "{3}{U}" + creature_type "Drake" + keywords :flying + + class AttackerTrigger < TriggeredAbility + def should_perform? + game.current_turn.active_player == controller && game.current_turn.attacks.count >= 2 + end + + def call + actor.trigger_effect(:draw_cards) + end + end + + def event_handlers + { + Events::FinalAttackersDeclared => AttackerTrigger + } + end + end + end +end diff --git a/lib/magic/effects/draw_cards.rb b/lib/magic/effects/draw_cards.rb index ee6c154..1fce2eb 100644 --- a/lib/magic/effects/draw_cards.rb +++ b/lib/magic/effects/draw_cards.rb @@ -15,7 +15,6 @@ def inspect def resolve! number_to_draw.times do - player.draw! end end diff --git a/lib/magic/player.rb b/lib/magic/player.rb index 3edc2c0..405ac0c 100644 --- a/lib/magic/player.rb +++ b/lib/magic/player.rb @@ -198,6 +198,7 @@ def shuffle! def mill(amount) amount.times do card = library.mill + card.move_to_graveyard! game.notify!( Events::CardMilled.new( player: self, diff --git a/lib/magic/stack/choices.rb b/lib/magic/stack/choices.rb index bf67c35..2ffd06e 100644 --- a/lib/magic/stack/choices.rb +++ b/lib/magic/stack/choices.rb @@ -2,8 +2,7 @@ module Magic class Stack class Choices < SimpleDelegator def add(choice) - - self << choice + unshift(choice) end end end diff --git a/spec/cards/tide_skimmer_spec.rb b/spec/cards/tide_skimmer_spec.rb new file mode 100644 index 0000000..768f12b --- /dev/null +++ b/spec/cards/tide_skimmer_spec.rb @@ -0,0 +1,45 @@ +require "spec_helper" + +RSpec.describe Magic::Cards::TideSkimmer do + include_context "two player game" + + let!(:tide_skimmer) { ResolvePermanent("Tide Skimmer") } + + before do + skip_to_combat! + end + + it "does not draw a card" do + expect(p1).not_to receive(:draw!) + + current_turn.declare_attackers! + + p1.declare_attacker( + attacker: tide_skimmer, + target: p2 + ) + + current_turn.attackers_declared! + end + + context "when there's another flying creature" do + let!(:concordia_pegasus) { ResolvePermanent("Concordia Pegasus") } + + it "draws a card" do + expect(p1).to receive(:draw!).once + current_turn.declare_attackers! + + p1.declare_attacker( + attacker: tide_skimmer, + target: p2 + ) + + p1.declare_attacker( + attacker: concordia_pegasus, + target: p2 + ) + + current_turn.attackers_declared! + end + end +end