From 70ad54961194b46790b1ea677715dc77fb814703 Mon Sep 17 00:00:00 2001 From: "wagic.the.homebrew@gmail.com" Date: Sat, 18 Jul 2009 09:31:34 +0000 Subject: [PATCH] Erwan -fixed bug when re-ordering blockers --- projects/mtg/bin/Res/test/_tests.txt | 1 + .../bin/Res/test/generic/m10_blockers2.txt | 30 +++++++++++++++++++ projects/mtg/src/MTGCardInstance.cpp | 8 ++--- 3 files changed, 35 insertions(+), 4 deletions(-) create mode 100644 projects/mtg/bin/Res/test/generic/m10_blockers2.txt diff --git a/projects/mtg/bin/Res/test/_tests.txt b/projects/mtg/bin/Res/test/_tests.txt index a46d058cb..f3f04e9e3 100644 --- a/projects/mtg/bin/Res/test/_tests.txt +++ b/projects/mtg/bin/Res/test/_tests.txt @@ -3,6 +3,7 @@ ######################## generic/attacks_each_turn.txt generic/m10_blockers.txt +generic/m10_blockers2.txt generic/first_strike.txt generic/first_strike2.txt generic/first_strike3.txt diff --git a/projects/mtg/bin/Res/test/generic/m10_blockers2.txt b/projects/mtg/bin/Res/test/generic/m10_blockers2.txt new file mode 100644 index 000000000..4b61c227f --- /dev/null +++ b/projects/mtg/bin/Res/test/generic/m10_blockers2.txt @@ -0,0 +1,30 @@ +#New blockers reordering rule +[INIT] +COMBATATTACKERS +[PLAYER1] +inplay:grizzly bears +[PLAYER2] +inplay:raging goblin,Drudge Skeletons,dragon engine +[DO] +grizzly bears +next +#blockers +dragon engine +raging goblin +Drudge Skeletons +next +#blockers order +dragon engine +dragon engine +next +#combat damage +next +#combat end +[ASSERT] +COMBATEND +[PLAYER1] +graveyard:grizzly bears +[PLAYER2] +graveyard:Drudge Skeletons,raging goblin +inplay:dragon engine +[END] \ No newline at end of file diff --git a/projects/mtg/src/MTGCardInstance.cpp b/projects/mtg/src/MTGCardInstance.cpp index 7c044ed9d..70b9cc0c0 100644 --- a/projects/mtg/src/MTGCardInstance.cpp +++ b/projects/mtg/src/MTGCardInstance.cpp @@ -474,10 +474,10 @@ MTGCardInstance * MTGCardInstance::getNextDefenser(MTGCardInstance * previous){ int MTGCardInstance::moveBlockerInRow(MTGCardInstance * blocker){ list::iterator it1 = find(blockers.begin(), blockers.end(), blocker); list::iterator it2 = it1; - if (it2 != blockers.end()) it2++; - if (it2 == blockers.end()) it2 = blockers.begin(); - - blockers.splice( it2, blockers, it1 ); // move a before b, invalidates a + if (it2 == blockers.end()) it2 = blockers.begin(); else ++it2; + if (it2 == blockers.end()) it2 = blockers.begin(); + + std::iter_swap(it1,it2); WEvent* e = NEW WEventCreatureBlockerRank(blocker,*it2,this); GameObserver::GetInstance()->receiveEvent(e); delete(e);