diff --git a/projects/mtg/include/AllAbilities.h b/projects/mtg/include/AllAbilities.h index 9c400ceae..064cd73f8 100644 --- a/projects/mtg/include/AllAbilities.h +++ b/projects/mtg/include/AllAbilities.h @@ -1332,6 +1332,28 @@ public: } }; +class TrCardPhasesOut: public Trigger +{ +public: + TrCardPhasesOut(GameObserver* observer, int id, MTGCardInstance * source, TargetChooser * tc, bool once = false) : + Trigger(observer, id, source, once, tc) + { + } + + int triggerOnEventImpl(WEvent * event) + { + WEventCardPhasesOut * e = dynamic_cast (event); + if (!e) return 0; + if (!tc->canTarget(e->card)) return 0; + return 1; + } + + TrCardPhasesOut * clone() const + { + return NEW TrCardPhasesOut(*this); + } +}; + class TrCardPhasesIn: public Trigger { public: diff --git a/projects/mtg/include/WEvent.h b/projects/mtg/include/WEvent.h index 8971cfb79..8dad3de0b 100644 --- a/projects/mtg/include/WEvent.h +++ b/projects/mtg/include/WEvent.h @@ -305,7 +305,13 @@ struct WEventCardControllerChange : public WEventCardUpdate { virtual Targetable * getTarget(int target); }; -//event when card with phases in +//event when card phases out +struct WEventCardPhasesOut : public WEventCardUpdate { + WEventCardPhasesOut(MTGCardInstance * card); + virtual Targetable * getTarget(int target); +}; + +//event when card phases in struct WEventCardPhasesIn : public WEventCardUpdate { WEventCardPhasesIn(MTGCardInstance * card); virtual Targetable * getTarget(int target); diff --git a/projects/mtg/src/AllAbilities.cpp b/projects/mtg/src/AllAbilities.cpp index ac80a2d2a..c2b6e2e72 100644 --- a/projects/mtg/src/AllAbilities.cpp +++ b/projects/mtg/src/AllAbilities.cpp @@ -1708,6 +1708,9 @@ int AAPhaseOut::resolve() if(_target->view) _target->view->alpha = 50; _target->initAttackersDefensers(); + //add event phases out here + WEvent * e = NEW WEventCardPhasesOut(_target); + game->receiveEvent(e); return 1; } return 0; diff --git a/projects/mtg/src/GameObserver.cpp b/projects/mtg/src/GameObserver.cpp index 8b8728474..ddb09c15c 100644 --- a/projects/mtg/src/GameObserver.cpp +++ b/projects/mtg/src/GameObserver.cpp @@ -852,6 +852,9 @@ void GameObserver::gameStateBasedEffects() if(card->view) card->view->alpha = 50; card->initAttackersDefensers(); + //add event phases out here + WEvent * evphaseout = NEW WEventCardPhasesOut(card); + receiveEvent(evphaseout); } else if((card->has(Constants::PHASING) || card->isPhased)&& mCurrentGamePhase == MTG_PHASE_UNTAP && currentPlayer == card->controller() && card->phasedTurn != turn) { diff --git a/projects/mtg/src/MTGAbility.cpp b/projects/mtg/src/MTGAbility.cpp index 55bccd9ae..5259a2f10 100644 --- a/projects/mtg/src/MTGAbility.cpp +++ b/projects/mtg/src/MTGAbility.cpp @@ -1044,6 +1044,10 @@ TriggeredAbility * AbilityFactory::parseTrigger(string s, string, int id, Spell if (TargetChooser *tc = parseSimpleTC(s,"phasedin", card)) return NEW TrCardPhasesIn(observer, id, card, tc,once); + //Card Phases Out + if (TargetChooser *tc = parseSimpleTC(s,"phasedout", card)) + return NEW TrCardPhasesOut(observer, id, card, tc,once); + //CombatTrigger //Card card attacked and is blocked found = s.find("combat("); diff --git a/projects/mtg/src/WEvent.cpp b/projects/mtg/src/WEvent.cpp index a8a7903e6..cbfe9ecd9 100644 --- a/projects/mtg/src/WEvent.cpp +++ b/projects/mtg/src/WEvent.cpp @@ -236,6 +236,11 @@ WEventCardControllerChange::WEventCardControllerChange(MTGCardInstance * card) : { } +WEventCardPhasesOut::WEventCardPhasesOut(MTGCardInstance * card) : + WEventCardUpdate(card) +{ +} + WEventCardPhasesIn::WEventCardPhasesIn(MTGCardInstance * card) : WEventCardUpdate(card) { @@ -427,6 +432,12 @@ Targetable * WEventCardControllerChange::getTarget(int target) return NULL; } +Targetable * WEventCardPhasesOut::getTarget(int target) +{ + if (target) return card; + return NULL; +} + Targetable * WEventCardPhasesIn::getTarget(int target) { if (target) return card;