diff --git a/projects/mtg/include/DuelLayers.h b/projects/mtg/include/DuelLayers.h index 8093a3d5c..e0e09358b 100644 --- a/projects/mtg/include/DuelLayers.h +++ b/projects/mtg/include/DuelLayers.h @@ -29,9 +29,11 @@ protected: GuiAvatars * avatars; GameObserver* observer; MTGGamePhase* phaseHandler; + int mPlayerViewIndex; + CardSelectorBase* mCardSelector; public: - DuelLayers(); + DuelLayers(GameObserver* go, int playerViewIndex = 0); ~DuelLayers(); ActionLayer * actionLayer(); @@ -39,7 +41,6 @@ public: GuiCombat * combatLayer(); GuiAvatars * GetAvatars(); MTGGamePhase* getPhaseHandler() {return phaseHandler;}; - void init(GameObserver* go); virtual void Update(float dt, Player * player); void CheckUserInput(int isAI); void Render(); @@ -47,8 +48,11 @@ public: void Remove(); int receiveEvent(WEvent * e); float RightBoundary(); - - CardSelectorBase* mCardSelector; + int getPlayerViewIndex(){ return mPlayerViewIndex; }; + Player* getRenderedPlayer(); + Player* getRenderedPlayerOpponent(); + CardSelectorBase* getCardSelector() { return mCardSelector; }; + GameObserver* getObserver(){ return observer; }; }; #include "ActionLayer.h" diff --git a/projects/mtg/include/GameObserver.h b/projects/mtg/include/GameObserver.h index 3b438d383..41314108d 100644 --- a/projects/mtg/include/GameObserver.h +++ b/projects/mtg/include/GameObserver.h @@ -52,8 +52,8 @@ class GameObserver{ string startupGameSerialized; bool parseLine(const string& s); virtual void logAction(const string& s); - bool processAction(const string& s, bool swapPlayer = false); - bool processActions(bool undo, bool swapPlayer + bool processAction(const string& s); + bool processActions(bool undo #ifdef TESTSUITE , TestSuiteGame* testgame #endif @@ -143,7 +143,7 @@ class GameObserver{ logAction(players[playerId], s); }; void logAction(MTGCardInstance* card, MTGGameZone* zone, size_t index, int result); - bool load(const string& s, bool undo = false, bool swapPlayers = false + bool load(const string& s, bool undo = false, int controlledPlayerIndex = 0 #ifdef TESTSUITE , TestSuiteGame* testgame = 0 #endif @@ -155,7 +155,7 @@ class GameObserver{ bool isStarted() { return (mLayers!=NULL);}; RandomGenerator* getRandomGenerator() { return &randomGenerator; }; WResourceManager* getResourceManager() { if(this) return mResourceManager;else return 0;}; - CardSelectorBase* getCardSelector() { return mLayers->mCardSelector;}; + CardSelectorBase* getCardSelector() { return mLayers->getCardSelector();}; bool operator==(const GameObserver& aGame); JGE* getInput(){return mJGE;}; DeckManager* getDeckManager(){ return mDeckManager; }; @@ -180,6 +180,9 @@ class GameObserver{ return true; } }; + + DuelLayers *getView() { return mLayers; }; + }; #ifdef NETWORK_SUPPORT diff --git a/projects/mtg/include/GuiAvatars.h b/projects/mtg/include/GuiAvatars.h index d14a60772..2baf6822c 100644 --- a/projects/mtg/include/GuiAvatars.h +++ b/projects/mtg/include/GuiAvatars.h @@ -17,7 +17,7 @@ protected: GuiAvatar* active; public: - GuiAvatars(GameObserver *observer); + GuiAvatars(DuelLayers* duelLayers); ~GuiAvatars(); GuiAvatar* GetSelf(); diff --git a/projects/mtg/include/GuiLayers.h b/projects/mtg/include/GuiLayers.h index d5e572be2..4df7b41bc 100644 --- a/projects/mtg/include/GuiLayers.h +++ b/projects/mtg/include/GuiLayers.h @@ -11,12 +11,14 @@ class GameObserver; class Player; +class DuelLayers; class GuiLayer { protected: JButton mActionButton; GameObserver* observer; + DuelLayers* mpDuelLayers; public: int mCurr; vector mObjects; @@ -28,6 +30,7 @@ public: virtual void resetObjects(); int getMaxId(); GuiLayer(GameObserver *observer); + GuiLayer(DuelLayers *duelLayers); virtual ~GuiLayer(); virtual void Update(float dt); virtual bool CheckUserInput(JButton key) diff --git a/projects/mtg/include/GuiPhaseBar.h b/projects/mtg/include/GuiPhaseBar.h index 038256635..49dafac6e 100644 --- a/projects/mtg/include/GuiPhaseBar.h +++ b/projects/mtg/include/GuiPhaseBar.h @@ -11,9 +11,10 @@ protected: Phase* phase; float angle; float zoomFactor; + DuelLayers* mpDuelLayers; public: - GuiPhaseBar(GameObserver* observer); + GuiPhaseBar(DuelLayers* duelLayers); ~GuiPhaseBar(); void Update(float dt); virtual void Render(); diff --git a/projects/mtg/include/GuiPlay.h b/projects/mtg/include/GuiPlay.h index eacc5eeac..4eadc959a 100644 --- a/projects/mtg/include/GuiPlay.h +++ b/projects/mtg/include/GuiPlay.h @@ -81,7 +81,7 @@ protected: vector cards; public: - GuiPlay(GameObserver*); + GuiPlay(DuelLayers*); ~GuiPlay(); virtual void Render(); void Replace(); diff --git a/projects/mtg/src/DuelLayers.cpp b/projects/mtg/src/DuelLayers.cpp index 7c464320f..2c1713849 100644 --- a/projects/mtg/src/DuelLayers.cpp +++ b/projects/mtg/src/DuelLayers.cpp @@ -13,32 +13,6 @@ #include "Trash.h" #include "DuelLayers.h" -void DuelLayers::init(GameObserver* go) -{ - observer = go; - mCardSelector = NEW CardSelector(go, this); - //1 Action Layer - action = NEW ActionLayer(go); - action->Add(phaseHandler = NEW MTGGamePhase(go, action->getMaxId())); //Phases handler - action->Add(NEW OtherAbilitiesEventReceiver(go, -1)); //autohand, etc... handler - //Other display elements - action->Add(NEW HUDDisplay(go, -1)); - - Add(NEW GuiMana(20, 20, go->players[1])); - Add(NEW GuiMana(440, 20, go->players[0])); - Add(stack = NEW ActionStack(go)); - Add(combat = NEW GuiCombat(go)); - Add(action); - Add(mCardSelector); - Add(hand = NEW GuiHandSelf(go, go->players[0]->game->hand)); - Add(avatars = NEW GuiAvatars(go)); - Add(NEW GuiHandOpponent(go, go->players[1]->game->hand)); - Add(NEW GuiPlay(go)); - Add(NEW GuiPhaseBar(go)); - Add(NEW GuiFrame(go)); - Add(NEW GuiBackground(go)); -} - void DuelLayers::CheckUserInput(int isAI) { JButton key; @@ -111,9 +85,32 @@ GuiAvatars * DuelLayers::GetAvatars() return avatars; } -DuelLayers::DuelLayers() : - nbitems(0) +DuelLayers::DuelLayers(GameObserver* go, int playerViewIndex) : + nbitems(0), mPlayerViewIndex(playerViewIndex) { + observer = go; + observer->mLayers = this; + mCardSelector = NEW CardSelector(go, this); + //1 Action Layer + action = NEW ActionLayer(go); + action->Add(phaseHandler = NEW MTGGamePhase(go, action->getMaxId())); //Phases handler + action->Add(NEW OtherAbilitiesEventReceiver(go, -1)); //autohand, etc... handler + //Other display elements + action->Add(NEW HUDDisplay(go, -1)); + + Add(NEW GuiMana(20, 20, getRenderedPlayerOpponent())); + Add(NEW GuiMana(440, 20, getRenderedPlayer())); + Add(stack = NEW ActionStack(go)); + Add(combat = NEW GuiCombat(go)); + Add(action); + Add(mCardSelector); + Add(hand = NEW GuiHandSelf(go, getRenderedPlayer()->game->hand)); + Add(avatars = NEW GuiAvatars(this)); + Add(NEW GuiHandOpponent(go, getRenderedPlayerOpponent()->game->hand)); + Add(NEW GuiPlay(this)); + Add(NEW GuiPhaseBar(this)); + Add(NEW GuiFrame(go)); + Add(NEW GuiBackground(go)); } DuelLayers::~DuelLayers() @@ -216,3 +213,13 @@ float DuelLayers::RightBoundary() { return MIN (hand->LeftBoundary(), avatars->LeftBoundarySelf()); } + +Player* DuelLayers::getRenderedPlayer() +{ + return observer->players[mPlayerViewIndex]; +}; + +Player* DuelLayers::getRenderedPlayerOpponent() +{ + return observer->players[mPlayerViewIndex]->opponent(); +}; diff --git a/projects/mtg/src/GameObserver.cpp b/projects/mtg/src/GameObserver.cpp index f5dc1fb68..57c9ceb24 100644 --- a/projects/mtg/src/GameObserver.cpp +++ b/projects/mtg/src/GameObserver.cpp @@ -379,7 +379,6 @@ void GameObserver::resetStartupGame() DebugTrace(startupGameSerialized); } - void GameObserver::startGame(GameType gtype, Rules * rules) { mGameType = gtype; @@ -390,11 +389,10 @@ void GameObserver::startGame(GameType gtype, Rules * rules) options.automaticStyle(players[0], players[1]); - mLayers = NEW DuelLayers(); - mLayers->init(this); + mLayers = NEW DuelLayers(this); currentPlayerId = 0; - currentPlayer = players[0]; + currentPlayer = players[currentPlayerId]; currentActionPlayer = currentPlayer; phaseRing = NEW PhaseRing(this); @@ -1534,7 +1532,7 @@ bool GameObserver::parseLine(const string& s) return false; } -bool GameObserver::load(const string& ss, bool undo, bool swapPlayers +bool GameObserver::load(const string& ss, bool undo, int controlledPlayerIndex #ifdef TESTSUITE , TestSuiteGame* testgame #endif @@ -1629,16 +1627,8 @@ bool GameObserver::load(const string& ss, bool undo, bool swapPlayers case 3: if (s.compare("[end]") == 0) { - if(swapPlayers) { - std::swap(players[0], players[1]); - currentPlayerId = (currentPlayerId + 1) % players.size(); - currentPlayer = players[currentPlayerId]; - currentActionPlayer = currentPlayer; - } - turn = 0; - mLayers = NEW DuelLayers(); - mLayers->init(this); + mLayers = NEW DuelLayers(this, controlledPlayerIndex); currentPlayer = players[currentPlayerId]; phaseRing = NEW PhaseRing(this); startedAt = time(0); @@ -1655,7 +1645,7 @@ bool GameObserver::load(const string& ss, bool undo, bool swapPlayers testgame->initGame(); #endif //TESTSUITE - processActions(undo, swapPlayers + processActions(undo #ifdef TESTSUITE , testgame #endif //TESTSUITE @@ -1672,11 +1662,11 @@ bool GameObserver::load(const string& ss, bool undo, bool swapPlayers return true; } -bool GameObserver::processAction(const string& s, bool swapPlayer) +bool GameObserver::processAction(const string& s) { - Player* p = (swapPlayer)?players[0]:players[1]; + Player* p = players[1]; if (s.find("p1") != string::npos) - p = (swapPlayer)?players[1]:players[0]; + p = players[0]; MTGGameZone* zone = NULL; if(s.find(string(p->game->hand->getName())+"[") != string::npos) @@ -1729,7 +1719,7 @@ bool GameObserver::processAction(const string& s, bool swapPlayer) return true; } -bool GameObserver::processActions(bool undo, bool swapPlayer +bool GameObserver::processActions(bool undo #ifdef TESTSUITE , TestSuiteGame* testgame #endif @@ -1767,7 +1757,7 @@ bool GameObserver::processActions(bool undo, bool swapPlayer for(loadingite = loadingList.begin(); loadingite != loadingList.end(); loadingite++, cmdIndex++) { - processAction(*loadingite, swapPlayer); + processAction(*loadingite); size_t nb = actionsList.size(); @@ -2015,8 +2005,8 @@ void NetworkGameObserver::synchronize() void NetworkGameObserver::synchronize(void*pxThis, stringstream& in, stringstream& out) { NetworkGameObserver* pThis = (NetworkGameObserver*)pxThis; - // now, we need to swap players as player1 for host is player 2 for guest - pThis->load(in.str(), false, true); + // now, we need to load the game from player 2's perspective + pThis->load(in.str(), false, 1); out << *pThis; } @@ -2027,7 +2017,7 @@ void NetworkGameObserver::checkSynchro(void*pxThis, stringstream& in, stringstre GameObserver aGame; aGame.mRules = pThis->mRules; - aGame.load(in.str(), false, true); + aGame.load(in.str()); assert(aGame == *pThis); } @@ -2037,9 +2027,9 @@ void NetworkGameObserver::sendAction(void*pxThis, stringstream& in, stringstream NetworkGameObserver* pThis = (NetworkGameObserver*)pxThis; pThis->mForwardAction = false; - pThis->processAction(in.str(), true); + pThis->processAction(in.str()); pThis->mForwardAction = true; - out << *pThis; + //out << *pThis; } void NetworkGameObserver::logAction(const string& s) diff --git a/projects/mtg/src/GuiAvatars.cpp b/projects/mtg/src/GuiAvatars.cpp index 46186f8c3..e364bae3c 100644 --- a/projects/mtg/src/GuiAvatars.cpp +++ b/projects/mtg/src/GuiAvatars.cpp @@ -7,24 +7,24 @@ #define LIB_GRAVE_OFFSET 230 -GuiAvatars::GuiAvatars(GameObserver* observer) : - GuiLayer(observer), active(NULL) +GuiAvatars::GuiAvatars(DuelLayers* duelLayers) : + GuiLayer(duelLayers), active(NULL) { - Add(self = NEW GuiAvatar(SCREEN_WIDTH, SCREEN_HEIGHT, false, observer->players[0], GuiAvatar::BOTTOM_RIGHT, this)); + Add(self = NEW GuiAvatar(SCREEN_WIDTH, SCREEN_HEIGHT, false, mpDuelLayers->getRenderedPlayer(), GuiAvatar::BOTTOM_RIGHT, this)); self->zoom = 0.9f; - Add(selfGraveyard = NEW GuiGraveyard(SCREEN_WIDTH - GuiAvatar::Width - GuiGameZone::Width / 2 - 11, SCREEN_HEIGHT - GuiAvatar::Height - 1, false, observer->players[0], this)); - Add(selfLibrary = NEW GuiLibrary(SCREEN_WIDTH - GuiAvatar::Width - GuiGameZone::Width / 2 - 11, SCREEN_HEIGHT - GuiAvatar::Height - 5 + GuiGameZone::Height + 5, false, observer->players[0], this)); + Add(selfGraveyard = NEW GuiGraveyard(SCREEN_WIDTH - GuiAvatar::Width - GuiGameZone::Width / 2 - 11, SCREEN_HEIGHT - GuiAvatar::Height - 1, false, mpDuelLayers->getRenderedPlayer(), this)); + Add(selfLibrary = NEW GuiLibrary(SCREEN_WIDTH - GuiAvatar::Width - GuiGameZone::Width / 2 - 11, SCREEN_HEIGHT - GuiAvatar::Height - 5 + GuiGameZone::Height + 5, false, mpDuelLayers->getRenderedPlayer(), this)); - Add(opponent = NEW GuiAvatar(0, 0, false, observer->players[1], GuiAvatar::TOP_LEFT, this)); + Add(opponent = NEW GuiAvatar(0, 0, false, mpDuelLayers->getRenderedPlayerOpponent(), GuiAvatar::TOP_LEFT, this)); opponent->zoom = 0.9f; //opponenthandveiw button Add(opponentHand = NEW GuiOpponentHand(-30 + GuiAvatar::Width * 1.2 - GuiGameZone::Width / 2, 35 + GuiGameZone::Height - 10, - false, observer->players[1], this)); + false, mpDuelLayers->getRenderedPlayerOpponent(), this)); //opponenthandveiwends Add(opponentGraveyard = NEW GuiGraveyard(5 + GuiAvatar::Width * 1.4 - GuiGameZone::Width / 2, 5, false, - observer->players[1], this)); + mpDuelLayers->getRenderedPlayerOpponent(), this)); Add(opponentLibrary = NEW GuiLibrary(5 + GuiAvatar::Width * 1.4 - GuiGameZone::Width / 2, 5 + GuiGameZone::Height + 5, false, - observer->players[1], this)); + mpDuelLayers->getRenderedPlayerOpponent(), this)); observer->getCardSelector()->Add(self); observer->getCardSelector()->Add(selfGraveyard); diff --git a/projects/mtg/src/GuiLayers.cpp b/projects/mtg/src/GuiLayers.cpp index 262606735..7ac419768 100644 --- a/projects/mtg/src/GuiLayers.cpp +++ b/projects/mtg/src/GuiLayers.cpp @@ -13,6 +13,15 @@ GuiLayer::GuiLayer(GameObserver *observer) mActionButton = JGE_BTN_OK; } +GuiLayer::GuiLayer(DuelLayers *duelLayers) + : observer(duelLayers->getObserver()), mpDuelLayers(duelLayers) +{ + modal = 0; + hasFocus = false; + mCurr = 0; + mActionButton = JGE_BTN_OK; +} + GuiLayer::~GuiLayer() { resetObjects(); diff --git a/projects/mtg/src/GuiPhaseBar.cpp b/projects/mtg/src/GuiPhaseBar.cpp index 960ebc0d5..22d3e4ee9 100644 --- a/projects/mtg/src/GuiPhaseBar.cpp +++ b/projects/mtg/src/GuiPhaseBar.cpp @@ -41,9 +41,9 @@ namespace } } -GuiPhaseBar::GuiPhaseBar(GameObserver* observer) : - GuiLayer(observer), PlayGuiObject(0, 0, 106, 0, false), - phase(NULL), angle(0.0f), zoomFactor(ICONSCALE) +GuiPhaseBar::GuiPhaseBar(DuelLayers* duelLayers) : + GuiLayer(duelLayers->getObserver()), PlayGuiObject(0, 0, 106, 0, false), + phase(NULL), angle(0.0f), zoomFactor(ICONSCALE), mpDuelLayers(duelLayers) { JQuadPtr quad = WResourceManager::Instance()->GetQuad("phasebar"); if (quad.get() != NULL) @@ -55,7 +55,7 @@ GuiPhaseBar::GuiPhaseBar(GameObserver* observer) : GameApp::systemError = "Error loading phasebar texture : " __FILE__; zoom = ICONSCALE; - observer->getCardSelector()->Add(this); + mpDuelLayers->getCardSelector()->Add(this); } @@ -132,7 +132,7 @@ void GuiPhaseBar::Render() WFont * font = WResourceManager::Instance()->GetWFont(Fonts::MAIN_FONT); string currentP = _("your turn"); string interrupt = ""; - if (observer->currentPlayer == observer->players[1]) + if (observer->currentPlayer == mpDuelLayers->getRenderedPlayerOpponent()) { currentP = _("opponent's turn"); } @@ -143,7 +143,7 @@ void GuiPhaseBar::Render() } if (observer->currentlyActing() != observer->currentPlayer) { - if (observer->currentPlayer == observer->players[0]) + if (observer->currentPlayer == mpDuelLayers->getRenderedPlayer()) { interrupt = _(" - ") + _("opponent plays"); } diff --git a/projects/mtg/src/GuiPlay.cpp b/projects/mtg/src/GuiPlay.cpp index 471f96735..183bd581f 100644 --- a/projects/mtg/src/GuiPlay.cpp +++ b/projects/mtg/src/GuiPlay.cpp @@ -6,6 +6,7 @@ #include "Subtypes.h" #include "Trash.h" #include "ModRules.h" +#include "DuelLayers.h" #define CARD_WIDTH (31) @@ -123,7 +124,7 @@ void GuiPlay::BattleField::reset(float x, float y) void GuiPlay::BattleField::EnstackAttacker(CardView* card) { card->x = CARD_WIDTH + 20 + (currentAttacker * (HORZWIDTH) / (attackers+1)); - card->y = baseY + (card->card->getObserver()->players[0] == card->card->controller() ? 20 + y : -20 - y); + card->y = baseY + (card->card->getObserver()->getView()->getRenderedPlayer() == card->card->controller() ? 20 + y : -20 - y); ++currentAttacker; // JRenderer::GetInstance()->RenderQuad(WResourceManager::Instance()->GetQuad("BattleIcon"), card->actX, card->actY, 0, 0.5 + 0.1 * sinf(JGE::GetInstance()->GetTime()), 0.5 + 0.1 * sinf(JGE::GetInstance()->GetTime())); } @@ -138,7 +139,7 @@ void GuiPlay::BattleField::EnstackBlocker(CardView* card) offset = c->defenser->getDefenserRank(c); card->x = c->defenser->view->x + 5 * offset; } - card->y = baseY + (card->card->getObserver()->players[0] == card->card->controller() ? 20 + y + 6 * offset : -20 - y + 6 * offset); + card->y = baseY + (card->card->getObserver()->getView()->getRenderedPlayer() == card->card->controller() ? 20 + y + 6 * offset : -20 - y + 6 * offset); } void GuiPlay::BattleField::Update(float dt) { @@ -162,8 +163,8 @@ void GuiPlay::BattleField::Render() JRenderer::GetInstance()->FillRect(44, SCREEN_HEIGHT / 2 + 10 - height / 2, 318, height, ARGB(127, red, 0, 0)); } -GuiPlay::GuiPlay(GameObserver* game) : - GuiLayer(game) +GuiPlay::GuiPlay(DuelLayers* view) : + GuiLayer(view) { end_spells = cards.end(); } @@ -192,7 +193,7 @@ void GuiPlay::Replace() { if((!(*it)->card->hasSubtype(Subtypes::TYPE_AURA)|| ((*it)->card->hasSubtype(Subtypes::TYPE_AURA) && (*it)->card->playerTarget)) && !(*it)->card->hasType(Subtypes::TYPE_PLANESWALKER)) { - if (observer->players[0] == (*it)->card->controller()) + if (mpDuelLayers->getRenderedPlayer() == (*it)->card->controller()) ++selfSpellsN; else ++opponentSpellsN; @@ -206,14 +207,14 @@ void GuiPlay::Replace() ++battleFieldAttackersN; else if ((*it)->card->isDefenser()) ++battleFieldBlockersN; - else if (observer->players[0] == (*it)->card->controller()) + else if (mpDuelLayers->getRenderedPlayer() == (*it)->card->controller()) ++selfCreaturesN; else ++opponentCreaturesN; } else if ((*it)->card->isLand() || (*it)->card->hasType(Subtypes::TYPE_PLANESWALKER)) { - if (observer->players[0] == (*it)->card->controller()) + if (mpDuelLayers->getRenderedPlayer() == (*it)->card->controller()) ++selfLandsN; else ++opponentLandsN; @@ -228,7 +229,7 @@ void GuiPlay::Replace() { if((!(*it)->card->hasSubtype(Subtypes::TYPE_AURA)|| ((*it)->card->hasSubtype(Subtypes::TYPE_AURA) && (*it)->card->playerTarget)) && !(*it)->card->hasType(Subtypes::TYPE_PLANESWALKER)) { - if (observer->players[0] == (*it)->card->controller()) + if (mpDuelLayers->getRenderedPlayer() == (*it)->card->controller()) selfSpells.Enstack(*it); else opponentSpells.Enstack(*it); @@ -252,14 +253,14 @@ void GuiPlay::Replace() battleField.EnstackAttacker(*it); else if ((*it)->card->isDefenser()) battleField.EnstackBlocker(*it); - else if (observer->players[0] == (*it)->card->controller()) + else if (mpDuelLayers->getRenderedPlayer() == (*it)->card->controller()) selfCreatures.Enstack(*it); else opponentCreatures.Enstack(*it); } else if ((*it)->card->isLand()) { - if (observer->players[0] == (*it)->card->controller()) + if (mpDuelLayers->getRenderedPlayer() == (*it)->card->controller()) selfLands.Enstack(*it); else opponentLands.Enstack(*it); @@ -271,7 +272,7 @@ void GuiPlay::Replace() { if ((*it)->card->hasType(Subtypes::TYPE_PLANESWALKER)) { - if (observer->players[0] == (*it)->card->controller()) + if (mpDuelLayers->getRenderedPlayer() == (*it)->card->controller()) selfLands.Enstack(*it); else opponentLands.Enstack(*it); @@ -287,14 +288,14 @@ void GuiPlay::Render() { if ((*it)->card->isLand()) { - if (observer->players[0] == (*it)->card->controller()) + if (mpDuelLayers->getRenderedPlayer() == (*it)->card->controller()) selfLands.Render(*it, cards.begin(), end_spells); else opponentLands.Render(*it, cards.begin(), end_spells); } else if ((*it)->card->isCreature()) { - if (observer->players[0] == (*it)->card->controller()) + if (mpDuelLayers->getRenderedPlayer() == (*it)->card->controller()) selfCreatures.Render(*it, cards.begin(), end_spells); else opponentCreatures.Render(*it, cards.begin(), end_spells); @@ -303,7 +304,7 @@ void GuiPlay::Render() { if (!(*it)->card->target) { - if (observer->players[0] == (*it)->card->controller()) + if (mpDuelLayers->getRenderedPlayer() == (*it)->card->controller()) selfSpells.Render(*it, cards.begin(), end_spells); else opponentSpells.Render(*it, cards.begin(), end_spells); @@ -313,7 +314,7 @@ void GuiPlay::Render() { if (!(*it)->card->target) { - if (observer->players[0] == (*it)->card->controller()) + if (mpDuelLayers->getRenderedPlayer() == (*it)->card->controller()) selfPlaneswalker.Render(*it, cards.begin(), end_spells); else opponentPlaneswalker.Render(*it, cards.begin(), end_spells);