From e389ea5062201027b4c6462cdd2ee4405b38c35a Mon Sep 17 00:00:00 2001 From: "wagic.the.homebrew" Date: Thu, 22 Jan 2009 13:25:00 +0000 Subject: [PATCH] Erwan - Moved the "putintoplay" rule as a standard MTGAbility - reverted bad encoding for MTGGuiPlay --- projects/mtg/include/GameObserver.h | 3 +- projects/mtg/include/MTGRules.h | 10 ++++ projects/mtg/src/ActionLayer.cpp | 2 + projects/mtg/src/DuelLayers.cpp | 1 + projects/mtg/src/GameObserver.cpp | 19 ++------ projects/mtg/src/MTGAbility.cpp | 8 ++-- projects/mtg/src/MTGGuiPlay.cpp | Bin 23754 -> 12277 bytes projects/mtg/src/MTGRules.cpp | 70 ++++++++++++++++++++++++++++ 8 files changed, 95 insertions(+), 18 deletions(-) diff --git a/projects/mtg/include/GameObserver.h b/projects/mtg/include/GameObserver.h index 0875a5c5b..600549628 100644 --- a/projects/mtg/include/GameObserver.h +++ b/projects/mtg/include/GameObserver.h @@ -32,8 +32,9 @@ class GameObserver{ int currentRound; - int targetListIsSet(MTGCardInstance * card); + public: + int targetListIsSet(MTGCardInstance * card); PhaseRing * phaseRing; int cancelCurrentAction(); int currentGamePhase; diff --git a/projects/mtg/include/MTGRules.h b/projects/mtg/include/MTGRules.h index 03db93fcb..99971281f 100644 --- a/projects/mtg/include/MTGRules.h +++ b/projects/mtg/include/MTGRules.h @@ -8,6 +8,16 @@ #include "../include/Counters.h" +class MTGPutInPlayRule:public MTGAbility{ + public: + int isReactingToClick(MTGCardInstance * card); + int reactToClick(MTGCardInstance * card); + int testDestroy(); + MTGPutInPlayRule(int _id); + const char * getMenuText(){return "Put into play";} + +}; + class MTGAttackRule:public MTGAbility{ public: int isReactingToClick(MTGCardInstance * card); diff --git a/projects/mtg/src/ActionLayer.cpp b/projects/mtg/src/ActionLayer.cpp index fe854625c..ff16aaf6a 100644 --- a/projects/mtg/src/ActionLayer.cpp +++ b/projects/mtg/src/ActionLayer.cpp @@ -152,7 +152,9 @@ int ActionLayer::reactToClick(MTGCardInstance * card){ for (int i=0;igetMenuText()); result += currentAction->reactToClick(card); + if (result) return result; } return result; } diff --git a/projects/mtg/src/DuelLayers.cpp b/projects/mtg/src/DuelLayers.cpp index 295ff99e6..099f7e416 100644 --- a/projects/mtg/src/DuelLayers.cpp +++ b/projects/mtg/src/DuelLayers.cpp @@ -19,6 +19,7 @@ void DuelLayers::init(){ MTGGamePhase * phaseManager = NEW MTGGamePhase(actionLayer->getMaxId()); actionLayer->Add(phaseManager); //Add Magic Specific Rules + actionLayer->Add(NEW MTGPutInPlayRule(-1)); actionLayer->Add(NEW MTGAttackRule(-1)); actionLayer->Add(NEW MTGBlockRule(-1)); actionLayer->Add(NEW MTGLegendRule(-1)); diff --git a/projects/mtg/src/GameObserver.cpp b/projects/mtg/src/GameObserver.cpp index 6a6bab569..327000bb5 100644 --- a/projects/mtg/src/GameObserver.cpp +++ b/projects/mtg/src/GameObserver.cpp @@ -307,26 +307,17 @@ void GameObserver::cardClick (MTGCardInstance * card, Targetable * object){ if (reaction != -1){ if (!card) return; - if (currentlyActing()->game->hand->hasCard(card)){ - //Current player's hand - if (canPutInPlay(card)){ - putInPlay(card); - if (card->hasType("land")){ - currentPlayer->canPutLandsIntoPlay--; - } - }else if (currentPlayer->game->hand->hasCard(card)){ //Current player's hand - if (currentGamePhase == Constants::MTG_PHASE_CLEANUP && currentPlayer->game->hand->nb_cards > 7){ - currentPlayer->game->putInGraveyard(card); - } - } - }else if (reaction){ + //Current player's hand + if (currentPlayer->game->hand->hasCard(card) && currentGamePhase == Constants::MTG_PHASE_CLEANUP && currentPlayer->game->hand->nb_cards > 7){ + currentPlayer->game->putInGraveyard(card); + }else if (reaction){ if (reaction == 1){ mLayers->actionLayer()->reactToClick(card); }else{ mLayers->actionLayer()->setMenuObject(object); } }else if (card->isTapped() && card->controller() == currentPlayer){ - // int a = ConstraintResolver::untap(this, card); + ConstraintResolver::untap(this, card); } } diff --git a/projects/mtg/src/MTGAbility.cpp b/projects/mtg/src/MTGAbility.cpp index 644656241..088610a33 100644 --- a/projects/mtg/src/MTGAbility.cpp +++ b/projects/mtg/src/MTGAbility.cpp @@ -1712,18 +1712,20 @@ int TargetAbility::reactToClick(MTGCardInstance * card){ if (isReactingToClick(card)){ waitingForAnswer = 1; tc->initTargets(); + return 1; } }else{ if (card == source){ if (tc->targetsReadyCheck() == TARGET_OK){ - waitingForAnswer = 0; - ActivatedAbility::reactToClick(source); + waitingForAnswer = 0; + return ActivatedAbility::reactToClick(source); } }else{ tc->toggleTarget(card); + return 1; } } - return 1; + return 0; } void TargetAbility::Render(){ diff --git a/projects/mtg/src/MTGGuiPlay.cpp b/projects/mtg/src/MTGGuiPlay.cpp index 3039460637a5dfec31490e68553b1ecc1fee3420..1a769180c0591ed8d7ea8ed4ee2716d2fdc5d131 100644 GIT binary patch literal 12277 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 literal 23754 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 + Player * currentPlayer = game->currentPlayer; + LOG("CANPUTINPLAY- check if card belongs to current player\n"); + if (!player->game->hand->hasCard(card)) return 0; + LOG("CANPUTINPLAY- check if card is land or can be played\n"); + if (card->hasType("land")){ + LOG("CANPUTINPLAY- card is land - check if can be played\n"); + if (player == currentPlayer && currentPlayer->canPutLandsIntoPlay && (game->currentGamePhase == Constants::MTG_PHASE_FIRSTMAIN || game->currentGamePhase == Constants::MTG_PHASE_SECONDMAIN)){ + LOG("CANPUTINPLAY- Land, ok\n"); + return 1; + } + }else if ((card->hasType("instant")) || card->has(Constants::FLASH) || (player == currentPlayer && (game->currentGamePhase == Constants::MTG_PHASE_FIRSTMAIN || game->currentGamePhase == Constants::MTG_PHASE_SECONDMAIN))){ + LOG("CANPUTINPLAY- correct time to play\n"); + ManaCost * playerMana = player->getManaPool(); + ManaCost * cost = card->getManaCost(); + if (playerMana->canAfford(cost)){ + LOG("CANPUTINPLAY- ManaCost ok\n"); + if (game->targetListIsSet(card)){ +#ifdef LOG + LOG("CANPUTINPLAY- Targets chosen -> OK\n"); +#endif + return 1; + }else{ +#ifdef LOG + LOG("CANPUTINPLAY- Targets not chosen yet\n"); +#endif + return 0; + } + } + } + return 0; +} + +int MTGPutInPlayRule::reactToClick(MTGCardInstance * card){ + if (!isReactingToClick(card)) return 0; + Player * player = game->currentlyActing(); + ManaCost * previousManaPool = NEW ManaCost(player->getManaPool()); + player->getManaPool()->pay(card->getManaCost()); + ManaCost * spellCost = previousManaPool->Diff(player->getManaPool()); + delete previousManaPool; + if (card->hasType("land")){ + Spell * spell = NEW Spell(card); + player->game->putInZone(card, player->game->hand, player->game->stack); + spell->resolve(); + delete spellCost; + delete spell; + player->canPutLandsIntoPlay--; + }else{ + if (game->targetChooser){ + game->mLayers->stackLayer()->addSpell(card,game->targetChooser->targets,game->targetChooser->cursor, spellCost); + SAFE_DELETE(game->targetChooser); + }else{ + game->mLayers->stackLayer()->addSpell(card,NULL,0, spellCost); + } + player->game->putInZone(card, player->game->hand, player->game->stack); + + } + return 1; +} + +//The Put into play rule is never destroyed +int MTGPutInPlayRule::testDestroy(){ + return 0; +} + MTGAttackRule::MTGAttackRule(int _id):MTGAbility(_id,NULL){ }