diff --git a/projects/mtg/include/MTGRules.h b/projects/mtg/include/MTGRules.h index d06bdfeec..f5493420e 100644 --- a/projects/mtg/include/MTGRules.h +++ b/projects/mtg/include/MTGRules.h @@ -19,8 +19,10 @@ class MTGPutInPlayRule:public MTGAbility{ virtual MTGPutInPlayRule * clone() const; }; -class MTGAttackRule:public MTGAbility{ +class MTGAttackRule:public MTGAbility, public Limitor{ public: + virtual bool select(Target*); + virtual bool greyout(Target*); int isReactingToClick(MTGCardInstance * card, ManaCost * mana = NULL); int reactToClick(MTGCardInstance * card); int testDestroy(); diff --git a/projects/mtg/src/MTGRules.cpp b/projects/mtg/src/MTGRules.cpp index d5f4b5dc8..0d51f328a 100644 --- a/projects/mtg/src/MTGRules.cpp +++ b/projects/mtg/src/MTGRules.cpp @@ -91,6 +91,20 @@ ostream& MTGPutInPlayRule::toString(ostream& out) const } + +bool MTGAttackRule::select(Target* t) +{ + if (CardView* c = dynamic_cast(t)) { + MTGCardInstance * card = c->getCard(); + if (card->canAttack()) return true; + } + return false; +} +bool MTGAttackRule::greyout(Target* t) +{ + return true; +} + MTGAttackRule::MTGAttackRule(int _id):MTGAbility(_id,NULL){ aType=MTGAbility::MTG_ATTACK_RULE; } @@ -120,6 +134,14 @@ int MTGAttackRule::receiveEvent(WEvent *e){ int MTGAttackRule::reactToClick(MTGCardInstance * card){ if (!isReactingToClick(card)) return 0; + + //Graphically select the next card that can attack + if(!card->isAttacker()){ + CardSelector * cs = game->mLayers->cs; + cs->Limit(this,CardSelector::playZone); + cs->CheckUserInput(PSP_CTRL_RIGHT); + cs->Limit(NULL,CardSelector::playZone); + } card->toggleAttacker(); return 1; }