diff --git a/projects/mtg/include/GameObserver.h b/projects/mtg/include/GameObserver.h index d41a8b169..4a93ded69 100644 --- a/projects/mtg/include/GameObserver.h +++ b/projects/mtg/include/GameObserver.h @@ -27,7 +27,6 @@ class GameObserver{ MTGCardInstance * cardWaitingForTargets; queue eventsQueue; - int nbPlayers; int untap(MTGCardInstance * card); bool WaitForExtraPayment(MTGCardInstance* card); void initialize(); @@ -63,14 +62,14 @@ class GameObserver{ void nextGamePhase(); void cleanupPhase(); void nextPlayer(); - void setPlayers(vector _players, int _nbplayers); + void setPlayers(vector _players); Player * currentPlayer; Player * currentActionPlayer; Player * isInterrupting; Player * opponent(); Player * currentlyActing(); GameObserver(); - GameObserver(vector _players, int _nbplayers); + GameObserver(vector _players); ~GameObserver(); void gameStateBasedEffects(); void enchantmentStatus(); @@ -87,7 +86,7 @@ class GameObserver{ void Update(float dt); void Render(); void ButtonPressed(PlayGuiObject*); - int getPlayersNumber() {return nbPlayers;}; + int getPlayersNumber() {return players.size();}; int receiveEvent(WEvent * event); bool connectRule; diff --git a/projects/mtg/src/AIPlayer.cpp b/projects/mtg/src/AIPlayer.cpp index 94df22397..e5afff1bf 100644 --- a/projects/mtg/src/AIPlayer.cpp +++ b/projects/mtg/src/AIPlayer.cpp @@ -269,7 +269,6 @@ AIPlayer * AIPlayerFactory::createAIPlayer(GameObserver *observer, MTGAllCards * // AIPlayerBaka will delete MTGDeck when it's time AIPlayerBaka * baka = NEW AIPlayerBaka(observer, deckFile, deckFileSmall, avatarFilename, NEW MTGDeck(deckFile, collection,0, deckSetting)); baka->deckId = deckid; - baka->setObserver(observer); return baka; } diff --git a/projects/mtg/src/GameObserver.cpp b/projects/mtg/src/GameObserver.cpp index 7cb096ddb..c13a0ae38 100644 --- a/projects/mtg/src/GameObserver.cpp +++ b/projects/mtg/src/GameObserver.cpp @@ -22,7 +22,6 @@ void GameObserver::initialize() currentActionPlayer = NULL; isInterrupting = NULL; currentPlayerId = 0; - nbPlayers = 0; currentGamePhase = -1; targetChooser = NULL; cardWaitingForTargets = NULL; @@ -35,20 +34,19 @@ void GameObserver::initialize() connectRule = false; } -void GameObserver::setPlayers(vector _players, int _nbplayers) +void GameObserver::setPlayers(vector _players) { for (size_t i = 0; i < _players.size(); i++) { players.push_back(_players[i]); players[i]->setObserver(this); } - nbPlayers = _nbplayers; } -GameObserver::GameObserver(vector _players, int _nb_players) +GameObserver::GameObserver(vector _players) { initialize(); - setPlayers(_players, _nb_players); + setPlayers(_players); } int GameObserver::getCurrentGamePhase() @@ -68,14 +66,14 @@ const char* GameObserver::getNextGamePhaseName() Player * GameObserver::opponent() { - int index = (currentPlayerId + 1) % nbPlayers; + int index = (currentPlayerId + 1) % players.size(); return players[index]; } void GameObserver::nextPlayer() { turn++; - currentPlayerId = (currentPlayerId + 1) % nbPlayers; + currentPlayerId = (currentPlayerId + 1) % players.size(); currentPlayer = players[currentPlayerId]; currentActionPlayer = currentPlayer; combatStep = BLOCKERS; @@ -337,7 +335,7 @@ GameObserver::~GameObserver() SAFE_DELETE(mLayers); SAFE_DELETE(phaseRing); SAFE_DELETE(replacementEffects); - for (int i = 0; i < nbPlayers; ++i) + for (int i = 0; i < players.size(); ++i) { SAFE_DELETE(players[i]); } @@ -786,7 +784,7 @@ void GameObserver::Render() if (mExtraPayment) mExtraPayment->Render(); - for (int i = 0; i < nbPlayers; ++i) + for (int i = 0; i < players.size(); ++i) { players[i]->Render(); } diff --git a/projects/mtg/src/GameStateDuel.cpp b/projects/mtg/src/GameStateDuel.cpp index 1c0a8ef64..689c79d25 100644 --- a/projects/mtg/src/GameStateDuel.cpp +++ b/projects/mtg/src/GameStateDuel.cpp @@ -264,7 +264,7 @@ void GameStateDuel::loadTestSuitePlayers() { mPlayers.push_back(new TestSuiteAI(game, testSuite, i)); } - game->setPlayers(mPlayers, 2); + game->setPlayers(mPlayers); mParent->gameType = testSuite->gameType; game->startGame(mParent->rules); @@ -446,20 +446,20 @@ void GameStateDuel::Update(float dt) case DUEL_STATE_PLAY: if (!game) { - game = new GameObserver(mPlayers, 2); + game = new GameObserver(mPlayers); game->startGame(mParent->rules); if (mParent->gameType == GAME_TYPE_MOMIR) { game->addObserver(NEW MTGMomirRule(game, -1, MTGCollection())); } - if (mParent->gameType == GAME_TYPE_STONEHEWER) - { - game->addObserver(NEW MTGStoneHewerRule(game, -1,MTGCollection())); - } - if (mParent->gameType == GAME_TYPE_HERMIT) - { - game->addObserver(NEW MTGHermitRule(game, -1)); - } + if (mParent->gameType == GAME_TYPE_STONEHEWER) + { + game->addObserver(NEW MTGStoneHewerRule(game, -1,MTGCollection())); + } + if (mParent->gameType == GAME_TYPE_HERMIT) + { + game->addObserver(NEW MTGHermitRule(game, -1)); + } //start of in game music code musictrack = ""; diff --git a/projects/mtg/src/Player.cpp b/projects/mtg/src/Player.cpp index 018f2fc1e..05c34327c 100644 --- a/projects/mtg/src/Player.cpp +++ b/projects/mtg/src/Player.cpp @@ -30,6 +30,7 @@ Player::Player(GameObserver *observer, string file, string fileSmall, MTGDeck * if (deck != NULL) { game = NEW MTGPlayerCards(deck); + // This automatically sets the observer pointer on all the deck cards game->setOwner(this); deckName = deck->meta_name; } @@ -106,7 +107,6 @@ HumanPlayer::HumanPlayer(GameObserver *observer, string file, string fileSmall, { loadAvatar("avatar.jpg"); playMode = MODE_HUMAN; - setObserver(observer); } ManaPool * Player::getManaPool() diff --git a/projects/mtg/src/Rules.cpp b/projects/mtg/src/Rules.cpp index 0c56b4752..d82f0632b 100644 --- a/projects/mtg/src/Rules.cpp +++ b/projects/mtg/src/Rules.cpp @@ -342,8 +342,8 @@ void Rules::initPlayers(GameObserver *g) for (int i = 0; i < 2; i++) { Player * p = initPlayer(g, i); - if(p) - g->players.push_back(p); + if(p && g->getPlayersNumber() < 2) + g->players.push_back(p); MTGDeck * deck = buildDeck(i); if (deck) { diff --git a/projects/mtg/src/StoryFlow.cpp b/projects/mtg/src/StoryFlow.cpp index ea1c99eb9..b5498a888 100644 --- a/projects/mtg/src/StoryFlow.cpp +++ b/projects/mtg/src/StoryFlow.cpp @@ -321,7 +321,7 @@ void StoryDuel::init() rules = NEW Rules(bg); rules->load(rulesFile); - game = new GameObserver(players, 2); + game = new GameObserver(players); rules->gamemode = GAME_TYPE_STORY; game->startGame(rules); diff --git a/projects/mtg/src/TestSuiteAI.cpp b/projects/mtg/src/TestSuiteAI.cpp index 80ca481b8..f4264fd7f 100644 --- a/projects/mtg/src/TestSuiteAI.cpp +++ b/projects/mtg/src/TestSuiteAI.cpp @@ -255,10 +255,6 @@ void TestSuiteActions::add(string s) TestSuiteState::TestSuiteState() { - for(size_t p = 0;p < players.size();++p) - { - players[p] = 0; - } players.clear(); } @@ -294,33 +290,30 @@ MTGPlayerCards * TestSuite::buildDeck(Player* player, int playerId) int list[100]; int nbcards = 0; MTGPlayerCards * deck = NULL; - if(initState.players.size()) - { - if(initState.players.size() > size_t(playerId)) - { - MTGGameZone * loadedPlayerZones[] = { initState.players[playerId]->game->graveyard, - initState.players[playerId]->game->library, - initState.players[playerId]->game->hand, - initState.players[playerId]->game->inPlay }; - for (int j = 0; j < 4; j++) + if(initState.players.size() > (size_t)playerId) + { + MTGGameZone * loadedPlayerZones[] = { initState.players[playerId]->game->graveyard, + initState.players[playerId]->game->library, + initState.players[playerId]->game->hand, + initState.players[playerId]->game->inPlay }; + + for (int j = 0; j < 4; j++) + { + for (size_t k = 0; k < loadedPlayerZones[j]->cards.size(); k++) { - for (size_t k = 0; k < loadedPlayerZones[j]->cards.size(); k++) - { - int cardid = loadedPlayerZones[j]->cards[k]->getId(); - list[nbcards] = cardid; - nbcards++; - } + int cardid = loadedPlayerZones[j]->cards[k]->getId(); + list[nbcards] = cardid; + nbcards++; } - deck = NEW MTGPlayerCards(player, list, nbcards); } - else - deck = NEW MTGPlayerCards(); + deck = NEW MTGPlayerCards(player, list, nbcards); } else { deck = NEW MTGPlayerCards(); } + return deck; }