Fix players vector (had a couple of 4 players game with the new code), added more cleanup
This commit is contained in:
@@ -27,7 +27,6 @@ class GameObserver{
|
||||
MTGCardInstance * cardWaitingForTargets;
|
||||
queue<WEvent *> 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<Player *> _players, int _nbplayers);
|
||||
void setPlayers(vector<Player *> _players);
|
||||
Player * currentPlayer;
|
||||
Player * currentActionPlayer;
|
||||
Player * isInterrupting;
|
||||
Player * opponent();
|
||||
Player * currentlyActing();
|
||||
GameObserver();
|
||||
GameObserver(vector<Player *> _players, int _nbplayers);
|
||||
GameObserver(vector<Player *> _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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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<Player *> _players, int _nbplayers)
|
||||
void GameObserver::setPlayers(vector<Player *> _players)
|
||||
{
|
||||
for (size_t i = 0; i < _players.size(); i++)
|
||||
{
|
||||
players.push_back(_players[i]);
|
||||
players[i]->setObserver(this);
|
||||
}
|
||||
nbPlayers = _nbplayers;
|
||||
}
|
||||
|
||||
GameObserver::GameObserver(vector<Player *> _players, int _nb_players)
|
||||
GameObserver::GameObserver(vector<Player *> _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();
|
||||
}
|
||||
|
||||
@@ -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 = "";
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user