Just won my first Wagic network game :)

In details:
- I removed my player swap idea, it caused tons of issues with randoms
- instead I simply keep both peer on the exact same game and added one single parameter allowing to configure the view on the game. So, each peer is rendering the same game (gameObserver class) from a different player point of view (DuelLayers and related classes).
- a lot of gui stuff are missing to prevent user forbidden interactions but it works fine on Windows
This commit is contained in:
Xawotihs@gmail.com
2013-01-26 16:42:16 +00:00
parent db0f401ba5
commit f45c8e1d41
12 changed files with 112 additions and 94 deletions
+8 -4
View File
@@ -29,9 +29,11 @@ protected:
GuiAvatars * avatars; GuiAvatars * avatars;
GameObserver* observer; GameObserver* observer;
MTGGamePhase* phaseHandler; MTGGamePhase* phaseHandler;
int mPlayerViewIndex;
CardSelectorBase* mCardSelector;
public: public:
DuelLayers(); DuelLayers(GameObserver* go, int playerViewIndex = 0);
~DuelLayers(); ~DuelLayers();
ActionLayer * actionLayer(); ActionLayer * actionLayer();
@@ -39,7 +41,6 @@ public:
GuiCombat * combatLayer(); GuiCombat * combatLayer();
GuiAvatars * GetAvatars(); GuiAvatars * GetAvatars();
MTGGamePhase* getPhaseHandler() {return phaseHandler;}; MTGGamePhase* getPhaseHandler() {return phaseHandler;};
void init(GameObserver* go);
virtual void Update(float dt, Player * player); virtual void Update(float dt, Player * player);
void CheckUserInput(int isAI); void CheckUserInput(int isAI);
void Render(); void Render();
@@ -47,8 +48,11 @@ public:
void Remove(); void Remove();
int receiveEvent(WEvent * e); int receiveEvent(WEvent * e);
float RightBoundary(); float RightBoundary();
int getPlayerViewIndex(){ return mPlayerViewIndex; };
CardSelectorBase* mCardSelector; Player* getRenderedPlayer();
Player* getRenderedPlayerOpponent();
CardSelectorBase* getCardSelector() { return mCardSelector; };
GameObserver* getObserver(){ return observer; };
}; };
#include "ActionLayer.h" #include "ActionLayer.h"
+7 -4
View File
@@ -52,8 +52,8 @@ class GameObserver{
string startupGameSerialized; string startupGameSerialized;
bool parseLine(const string& s); bool parseLine(const string& s);
virtual void logAction(const string& s); virtual void logAction(const string& s);
bool processAction(const string& s, bool swapPlayer = false); bool processAction(const string& s);
bool processActions(bool undo, bool swapPlayer bool processActions(bool undo
#ifdef TESTSUITE #ifdef TESTSUITE
, TestSuiteGame* testgame , TestSuiteGame* testgame
#endif #endif
@@ -143,7 +143,7 @@ class GameObserver{
logAction(players[playerId], s); logAction(players[playerId], s);
}; };
void logAction(MTGCardInstance* card, MTGGameZone* zone, size_t index, int result); 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 #ifdef TESTSUITE
, TestSuiteGame* testgame = 0 , TestSuiteGame* testgame = 0
#endif #endif
@@ -155,7 +155,7 @@ class GameObserver{
bool isStarted() { return (mLayers!=NULL);}; bool isStarted() { return (mLayers!=NULL);};
RandomGenerator* getRandomGenerator() { return &randomGenerator; }; RandomGenerator* getRandomGenerator() { return &randomGenerator; };
WResourceManager* getResourceManager() { if(this) return mResourceManager;else return 0;}; WResourceManager* getResourceManager() { if(this) return mResourceManager;else return 0;};
CardSelectorBase* getCardSelector() { return mLayers->mCardSelector;}; CardSelectorBase* getCardSelector() { return mLayers->getCardSelector();};
bool operator==(const GameObserver& aGame); bool operator==(const GameObserver& aGame);
JGE* getInput(){return mJGE;}; JGE* getInput(){return mJGE;};
DeckManager* getDeckManager(){ return mDeckManager; }; DeckManager* getDeckManager(){ return mDeckManager; };
@@ -180,6 +180,9 @@ class GameObserver{
return true; return true;
} }
}; };
DuelLayers *getView() { return mLayers; };
}; };
#ifdef NETWORK_SUPPORT #ifdef NETWORK_SUPPORT
+1 -1
View File
@@ -17,7 +17,7 @@ protected:
GuiAvatar* active; GuiAvatar* active;
public: public:
GuiAvatars(GameObserver *observer); GuiAvatars(DuelLayers* duelLayers);
~GuiAvatars(); ~GuiAvatars();
GuiAvatar* GetSelf(); GuiAvatar* GetSelf();
+3
View File
@@ -11,12 +11,14 @@
class GameObserver; class GameObserver;
class Player; class Player;
class DuelLayers;
class GuiLayer class GuiLayer
{ {
protected: protected:
JButton mActionButton; JButton mActionButton;
GameObserver* observer; GameObserver* observer;
DuelLayers* mpDuelLayers;
public: public:
int mCurr; int mCurr;
vector<JGuiObject *> mObjects; vector<JGuiObject *> mObjects;
@@ -28,6 +30,7 @@ public:
virtual void resetObjects(); virtual void resetObjects();
int getMaxId(); int getMaxId();
GuiLayer(GameObserver *observer); GuiLayer(GameObserver *observer);
GuiLayer(DuelLayers *duelLayers);
virtual ~GuiLayer(); virtual ~GuiLayer();
virtual void Update(float dt); virtual void Update(float dt);
virtual bool CheckUserInput(JButton key) virtual bool CheckUserInput(JButton key)
+2 -1
View File
@@ -11,9 +11,10 @@ protected:
Phase* phase; Phase* phase;
float angle; float angle;
float zoomFactor; float zoomFactor;
DuelLayers* mpDuelLayers;
public: public:
GuiPhaseBar(GameObserver* observer); GuiPhaseBar(DuelLayers* duelLayers);
~GuiPhaseBar(); ~GuiPhaseBar();
void Update(float dt); void Update(float dt);
virtual void Render(); virtual void Render();
+1 -1
View File
@@ -81,7 +81,7 @@ protected:
vector<CardView*> cards; vector<CardView*> cards;
public: public:
GuiPlay(GameObserver*); GuiPlay(DuelLayers*);
~GuiPlay(); ~GuiPlay();
virtual void Render(); virtual void Render();
void Replace(); void Replace();
+35 -28
View File
@@ -13,32 +13,6 @@
#include "Trash.h" #include "Trash.h"
#include "DuelLayers.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) void DuelLayers::CheckUserInput(int isAI)
{ {
JButton key; JButton key;
@@ -111,9 +85,32 @@ GuiAvatars * DuelLayers::GetAvatars()
return avatars; return avatars;
} }
DuelLayers::DuelLayers() : DuelLayers::DuelLayers(GameObserver* go, int playerViewIndex) :
nbitems(0) 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() DuelLayers::~DuelLayers()
@@ -216,3 +213,13 @@ float DuelLayers::RightBoundary()
{ {
return MIN (hand->LeftBoundary(), avatars->LeftBoundarySelf()); return MIN (hand->LeftBoundary(), avatars->LeftBoundarySelf());
} }
Player* DuelLayers::getRenderedPlayer()
{
return observer->players[mPlayerViewIndex];
};
Player* DuelLayers::getRenderedPlayerOpponent()
{
return observer->players[mPlayerViewIndex]->opponent();
};
+15 -25
View File
@@ -379,7 +379,6 @@ void GameObserver::resetStartupGame()
DebugTrace(startupGameSerialized); DebugTrace(startupGameSerialized);
} }
void GameObserver::startGame(GameType gtype, Rules * rules) void GameObserver::startGame(GameType gtype, Rules * rules)
{ {
mGameType = gtype; mGameType = gtype;
@@ -390,11 +389,10 @@ void GameObserver::startGame(GameType gtype, Rules * rules)
options.automaticStyle(players[0], players[1]); options.automaticStyle(players[0], players[1]);
mLayers = NEW DuelLayers(); mLayers = NEW DuelLayers(this);
mLayers->init(this);
currentPlayerId = 0; currentPlayerId = 0;
currentPlayer = players[0]; currentPlayer = players[currentPlayerId];
currentActionPlayer = currentPlayer; currentActionPlayer = currentPlayer;
phaseRing = NEW PhaseRing(this); phaseRing = NEW PhaseRing(this);
@@ -1534,7 +1532,7 @@ bool GameObserver::parseLine(const string& s)
return false; return false;
} }
bool GameObserver::load(const string& ss, bool undo, bool swapPlayers bool GameObserver::load(const string& ss, bool undo, int controlledPlayerIndex
#ifdef TESTSUITE #ifdef TESTSUITE
, TestSuiteGame* testgame , TestSuiteGame* testgame
#endif #endif
@@ -1629,16 +1627,8 @@ bool GameObserver::load(const string& ss, bool undo, bool swapPlayers
case 3: case 3:
if (s.compare("[end]") == 0) 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; turn = 0;
mLayers = NEW DuelLayers(); mLayers = NEW DuelLayers(this, controlledPlayerIndex);
mLayers->init(this);
currentPlayer = players[currentPlayerId]; currentPlayer = players[currentPlayerId];
phaseRing = NEW PhaseRing(this); phaseRing = NEW PhaseRing(this);
startedAt = time(0); startedAt = time(0);
@@ -1655,7 +1645,7 @@ bool GameObserver::load(const string& ss, bool undo, bool swapPlayers
testgame->initGame(); testgame->initGame();
#endif //TESTSUITE #endif //TESTSUITE
processActions(undo, swapPlayers processActions(undo
#ifdef TESTSUITE #ifdef TESTSUITE
, testgame , testgame
#endif //TESTSUITE #endif //TESTSUITE
@@ -1672,11 +1662,11 @@ bool GameObserver::load(const string& ss, bool undo, bool swapPlayers
return true; 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) if (s.find("p1") != string::npos)
p = (swapPlayer)?players[1]:players[0]; p = players[0];
MTGGameZone* zone = NULL; MTGGameZone* zone = NULL;
if(s.find(string(p->game->hand->getName())+"[") != string::npos) if(s.find(string(p->game->hand->getName())+"[") != string::npos)
@@ -1729,7 +1719,7 @@ bool GameObserver::processAction(const string& s, bool swapPlayer)
return true; return true;
} }
bool GameObserver::processActions(bool undo, bool swapPlayer bool GameObserver::processActions(bool undo
#ifdef TESTSUITE #ifdef TESTSUITE
, TestSuiteGame* testgame , TestSuiteGame* testgame
#endif #endif
@@ -1767,7 +1757,7 @@ bool GameObserver::processActions(bool undo, bool swapPlayer
for(loadingite = loadingList.begin(); loadingite != loadingList.end(); loadingite++, cmdIndex++) for(loadingite = loadingList.begin(); loadingite != loadingList.end(); loadingite++, cmdIndex++)
{ {
processAction(*loadingite, swapPlayer); processAction(*loadingite);
size_t nb = actionsList.size(); size_t nb = actionsList.size();
@@ -2015,8 +2005,8 @@ void NetworkGameObserver::synchronize()
void NetworkGameObserver::synchronize(void*pxThis, stringstream& in, stringstream& out) void NetworkGameObserver::synchronize(void*pxThis, stringstream& in, stringstream& out)
{ {
NetworkGameObserver* pThis = (NetworkGameObserver*)pxThis; NetworkGameObserver* pThis = (NetworkGameObserver*)pxThis;
// now, we need to swap players as player1 for host is player 2 for guest // now, we need to load the game from player 2's perspective
pThis->load(in.str(), false, true); pThis->load(in.str(), false, 1);
out << *pThis; out << *pThis;
} }
@@ -2027,7 +2017,7 @@ void NetworkGameObserver::checkSynchro(void*pxThis, stringstream& in, stringstre
GameObserver aGame; GameObserver aGame;
aGame.mRules = pThis->mRules; aGame.mRules = pThis->mRules;
aGame.load(in.str(), false, true); aGame.load(in.str());
assert(aGame == *pThis); assert(aGame == *pThis);
} }
@@ -2037,9 +2027,9 @@ void NetworkGameObserver::sendAction(void*pxThis, stringstream& in, stringstream
NetworkGameObserver* pThis = (NetworkGameObserver*)pxThis; NetworkGameObserver* pThis = (NetworkGameObserver*)pxThis;
pThis->mForwardAction = false; pThis->mForwardAction = false;
pThis->processAction(in.str(), true); pThis->processAction(in.str());
pThis->mForwardAction = true; pThis->mForwardAction = true;
out << *pThis; //out << *pThis;
} }
void NetworkGameObserver::logAction(const string& s) void NetworkGameObserver::logAction(const string& s)
+9 -9
View File
@@ -7,24 +7,24 @@
#define LIB_GRAVE_OFFSET 230 #define LIB_GRAVE_OFFSET 230
GuiAvatars::GuiAvatars(GameObserver* observer) : GuiAvatars::GuiAvatars(DuelLayers* duelLayers) :
GuiLayer(observer), active(NULL) 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; 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(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, 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, 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; opponent->zoom = 0.9f;
//opponenthandveiw button //opponenthandveiw button
Add(opponentHand = NEW GuiOpponentHand(-30 + GuiAvatar::Width * 1.2 - GuiGameZone::Width / 2, 35 + GuiGameZone::Height - 10, 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 //opponenthandveiwends
Add(opponentGraveyard = NEW GuiGraveyard(5 + GuiAvatar::Width * 1.4 - GuiGameZone::Width / 2, 5, false, 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, 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(self);
observer->getCardSelector()->Add(selfGraveyard); observer->getCardSelector()->Add(selfGraveyard);
+9
View File
@@ -13,6 +13,15 @@ GuiLayer::GuiLayer(GameObserver *observer)
mActionButton = JGE_BTN_OK; 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() GuiLayer::~GuiLayer()
{ {
resetObjects(); resetObjects();
+6 -6
View File
@@ -41,9 +41,9 @@ namespace
} }
} }
GuiPhaseBar::GuiPhaseBar(GameObserver* observer) : GuiPhaseBar::GuiPhaseBar(DuelLayers* duelLayers) :
GuiLayer(observer), PlayGuiObject(0, 0, 106, 0, false), GuiLayer(duelLayers->getObserver()), PlayGuiObject(0, 0, 106, 0, false),
phase(NULL), angle(0.0f), zoomFactor(ICONSCALE) phase(NULL), angle(0.0f), zoomFactor(ICONSCALE), mpDuelLayers(duelLayers)
{ {
JQuadPtr quad = WResourceManager::Instance()->GetQuad("phasebar"); JQuadPtr quad = WResourceManager::Instance()->GetQuad("phasebar");
if (quad.get() != NULL) if (quad.get() != NULL)
@@ -55,7 +55,7 @@ GuiPhaseBar::GuiPhaseBar(GameObserver* observer) :
GameApp::systemError = "Error loading phasebar texture : " __FILE__; GameApp::systemError = "Error loading phasebar texture : " __FILE__;
zoom = ICONSCALE; 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); WFont * font = WResourceManager::Instance()->GetWFont(Fonts::MAIN_FONT);
string currentP = _("your turn"); string currentP = _("your turn");
string interrupt = ""; string interrupt = "";
if (observer->currentPlayer == observer->players[1]) if (observer->currentPlayer == mpDuelLayers->getRenderedPlayerOpponent())
{ {
currentP = _("opponent's turn"); currentP = _("opponent's turn");
} }
@@ -143,7 +143,7 @@ void GuiPhaseBar::Render()
} }
if (observer->currentlyActing() != observer->currentPlayer) if (observer->currentlyActing() != observer->currentPlayer)
{ {
if (observer->currentPlayer == observer->players[0]) if (observer->currentPlayer == mpDuelLayers->getRenderedPlayer())
{ {
interrupt = _(" - ") + _("opponent plays"); interrupt = _(" - ") + _("opponent plays");
} }
+16 -15
View File
@@ -6,6 +6,7 @@
#include "Subtypes.h" #include "Subtypes.h"
#include "Trash.h" #include "Trash.h"
#include "ModRules.h" #include "ModRules.h"
#include "DuelLayers.h"
#define CARD_WIDTH (31) #define CARD_WIDTH (31)
@@ -123,7 +124,7 @@ void GuiPlay::BattleField::reset(float x, float y)
void GuiPlay::BattleField::EnstackAttacker(CardView* card) void GuiPlay::BattleField::EnstackAttacker(CardView* card)
{ {
card->x = CARD_WIDTH + 20 + (currentAttacker * (HORZWIDTH) / (attackers+1)); 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; ++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())); // 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); offset = c->defenser->getDefenserRank(c);
card->x = c->defenser->view->x + 5 * offset; 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) 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)); JRenderer::GetInstance()->FillRect(44, SCREEN_HEIGHT / 2 + 10 - height / 2, 318, height, ARGB(127, red, 0, 0));
} }
GuiPlay::GuiPlay(GameObserver* game) : GuiPlay::GuiPlay(DuelLayers* view) :
GuiLayer(game) GuiLayer(view)
{ {
end_spells = cards.end(); 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((!(*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; ++selfSpellsN;
else else
++opponentSpellsN; ++opponentSpellsN;
@@ -206,14 +207,14 @@ void GuiPlay::Replace()
++battleFieldAttackersN; ++battleFieldAttackersN;
else if ((*it)->card->isDefenser()) else if ((*it)->card->isDefenser())
++battleFieldBlockersN; ++battleFieldBlockersN;
else if (observer->players[0] == (*it)->card->controller()) else if (mpDuelLayers->getRenderedPlayer() == (*it)->card->controller())
++selfCreaturesN; ++selfCreaturesN;
else else
++opponentCreaturesN; ++opponentCreaturesN;
} }
else if ((*it)->card->isLand() || (*it)->card->hasType(Subtypes::TYPE_PLANESWALKER)) 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; ++selfLandsN;
else else
++opponentLandsN; ++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((!(*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); selfSpells.Enstack(*it);
else else
opponentSpells.Enstack(*it); opponentSpells.Enstack(*it);
@@ -252,14 +253,14 @@ void GuiPlay::Replace()
battleField.EnstackAttacker(*it); battleField.EnstackAttacker(*it);
else if ((*it)->card->isDefenser()) else if ((*it)->card->isDefenser())
battleField.EnstackBlocker(*it); battleField.EnstackBlocker(*it);
else if (observer->players[0] == (*it)->card->controller()) else if (mpDuelLayers->getRenderedPlayer() == (*it)->card->controller())
selfCreatures.Enstack(*it); selfCreatures.Enstack(*it);
else else
opponentCreatures.Enstack(*it); opponentCreatures.Enstack(*it);
} }
else if ((*it)->card->isLand()) else if ((*it)->card->isLand())
{ {
if (observer->players[0] == (*it)->card->controller()) if (mpDuelLayers->getRenderedPlayer() == (*it)->card->controller())
selfLands.Enstack(*it); selfLands.Enstack(*it);
else else
opponentLands.Enstack(*it); opponentLands.Enstack(*it);
@@ -271,7 +272,7 @@ void GuiPlay::Replace()
{ {
if ((*it)->card->hasType(Subtypes::TYPE_PLANESWALKER)) if ((*it)->card->hasType(Subtypes::TYPE_PLANESWALKER))
{ {
if (observer->players[0] == (*it)->card->controller()) if (mpDuelLayers->getRenderedPlayer() == (*it)->card->controller())
selfLands.Enstack(*it); selfLands.Enstack(*it);
else else
opponentLands.Enstack(*it); opponentLands.Enstack(*it);
@@ -287,14 +288,14 @@ void GuiPlay::Render()
{ {
if ((*it)->card->isLand()) if ((*it)->card->isLand())
{ {
if (observer->players[0] == (*it)->card->controller()) if (mpDuelLayers->getRenderedPlayer() == (*it)->card->controller())
selfLands.Render(*it, cards.begin(), end_spells); selfLands.Render(*it, cards.begin(), end_spells);
else else
opponentLands.Render(*it, cards.begin(), end_spells); opponentLands.Render(*it, cards.begin(), end_spells);
} }
else if ((*it)->card->isCreature()) 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); selfCreatures.Render(*it, cards.begin(), end_spells);
else else
opponentCreatures.Render(*it, cards.begin(), end_spells); opponentCreatures.Render(*it, cards.begin(), end_spells);
@@ -303,7 +304,7 @@ void GuiPlay::Render()
{ {
if (!(*it)->card->target) if (!(*it)->card->target)
{ {
if (observer->players[0] == (*it)->card->controller()) if (mpDuelLayers->getRenderedPlayer() == (*it)->card->controller())
selfSpells.Render(*it, cards.begin(), end_spells); selfSpells.Render(*it, cards.begin(), end_spells);
else else
opponentSpells.Render(*it, cards.begin(), end_spells); opponentSpells.Render(*it, cards.begin(), end_spells);
@@ -313,7 +314,7 @@ void GuiPlay::Render()
{ {
if (!(*it)->card->target) if (!(*it)->card->target)
{ {
if (observer->players[0] == (*it)->card->controller()) if (mpDuelLayers->getRenderedPlayer() == (*it)->card->controller())
selfPlaneswalker.Render(*it, cards.begin(), end_spells); selfPlaneswalker.Render(*it, cards.begin(), end_spells);
else else
opponentPlaneswalker.Render(*it, cards.begin(), end_spells); opponentPlaneswalker.Render(*it, cards.begin(), end_spells);