Fix players vector (had a couple of 4 players game with the new code), added more cleanup

This commit is contained in:
Xawotihs
2011-10-01 23:49:37 +00:00
parent 76a8f406ec
commit 483c767492
8 changed files with 39 additions and 50 deletions
+3 -4
View File
@@ -27,7 +27,6 @@ class GameObserver{
MTGCardInstance * cardWaitingForTargets; MTGCardInstance * cardWaitingForTargets;
queue<WEvent *> eventsQueue; queue<WEvent *> eventsQueue;
int nbPlayers;
int untap(MTGCardInstance * card); int untap(MTGCardInstance * card);
bool WaitForExtraPayment(MTGCardInstance* card); bool WaitForExtraPayment(MTGCardInstance* card);
void initialize(); void initialize();
@@ -63,14 +62,14 @@ class GameObserver{
void nextGamePhase(); void nextGamePhase();
void cleanupPhase(); void cleanupPhase();
void nextPlayer(); void nextPlayer();
void setPlayers(vector<Player *> _players, int _nbplayers); void setPlayers(vector<Player *> _players);
Player * currentPlayer; Player * currentPlayer;
Player * currentActionPlayer; Player * currentActionPlayer;
Player * isInterrupting; Player * isInterrupting;
Player * opponent(); Player * opponent();
Player * currentlyActing(); Player * currentlyActing();
GameObserver(); GameObserver();
GameObserver(vector<Player *> _players, int _nbplayers); GameObserver(vector<Player *> _players);
~GameObserver(); ~GameObserver();
void gameStateBasedEffects(); void gameStateBasedEffects();
void enchantmentStatus(); void enchantmentStatus();
@@ -87,7 +86,7 @@ class GameObserver{
void Update(float dt); void Update(float dt);
void Render(); void Render();
void ButtonPressed(PlayGuiObject*); void ButtonPressed(PlayGuiObject*);
int getPlayersNumber() {return nbPlayers;}; int getPlayersNumber() {return players.size();};
int receiveEvent(WEvent * event); int receiveEvent(WEvent * event);
bool connectRule; bool connectRule;
-1
View File
@@ -269,7 +269,6 @@ AIPlayer * AIPlayerFactory::createAIPlayer(GameObserver *observer, MTGAllCards *
// AIPlayerBaka will delete MTGDeck when it's time // AIPlayerBaka will delete MTGDeck when it's time
AIPlayerBaka * baka = NEW AIPlayerBaka(observer, deckFile, deckFileSmall, avatarFilename, NEW MTGDeck(deckFile, collection,0, deckSetting)); AIPlayerBaka * baka = NEW AIPlayerBaka(observer, deckFile, deckFileSmall, avatarFilename, NEW MTGDeck(deckFile, collection,0, deckSetting));
baka->deckId = deckid; baka->deckId = deckid;
baka->setObserver(observer);
return baka; return baka;
} }
+7 -9
View File
@@ -22,7 +22,6 @@ void GameObserver::initialize()
currentActionPlayer = NULL; currentActionPlayer = NULL;
isInterrupting = NULL; isInterrupting = NULL;
currentPlayerId = 0; currentPlayerId = 0;
nbPlayers = 0;
currentGamePhase = -1; currentGamePhase = -1;
targetChooser = NULL; targetChooser = NULL;
cardWaitingForTargets = NULL; cardWaitingForTargets = NULL;
@@ -35,20 +34,19 @@ void GameObserver::initialize()
connectRule = false; 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++) for (size_t i = 0; i < _players.size(); i++)
{ {
players.push_back(_players[i]); players.push_back(_players[i]);
players[i]->setObserver(this); players[i]->setObserver(this);
} }
nbPlayers = _nbplayers;
} }
GameObserver::GameObserver(vector<Player *> _players, int _nb_players) GameObserver::GameObserver(vector<Player *> _players)
{ {
initialize(); initialize();
setPlayers(_players, _nb_players); setPlayers(_players);
} }
int GameObserver::getCurrentGamePhase() int GameObserver::getCurrentGamePhase()
@@ -68,14 +66,14 @@ const char* GameObserver::getNextGamePhaseName()
Player * GameObserver::opponent() Player * GameObserver::opponent()
{ {
int index = (currentPlayerId + 1) % nbPlayers; int index = (currentPlayerId + 1) % players.size();
return players[index]; return players[index];
} }
void GameObserver::nextPlayer() void GameObserver::nextPlayer()
{ {
turn++; turn++;
currentPlayerId = (currentPlayerId + 1) % nbPlayers; currentPlayerId = (currentPlayerId + 1) % players.size();
currentPlayer = players[currentPlayerId]; currentPlayer = players[currentPlayerId];
currentActionPlayer = currentPlayer; currentActionPlayer = currentPlayer;
combatStep = BLOCKERS; combatStep = BLOCKERS;
@@ -337,7 +335,7 @@ GameObserver::~GameObserver()
SAFE_DELETE(mLayers); SAFE_DELETE(mLayers);
SAFE_DELETE(phaseRing); SAFE_DELETE(phaseRing);
SAFE_DELETE(replacementEffects); SAFE_DELETE(replacementEffects);
for (int i = 0; i < nbPlayers; ++i) for (int i = 0; i < players.size(); ++i)
{ {
SAFE_DELETE(players[i]); SAFE_DELETE(players[i]);
} }
@@ -786,7 +784,7 @@ void GameObserver::Render()
if (mExtraPayment) if (mExtraPayment)
mExtraPayment->Render(); mExtraPayment->Render();
for (int i = 0; i < nbPlayers; ++i) for (int i = 0; i < players.size(); ++i)
{ {
players[i]->Render(); players[i]->Render();
} }
+10 -10
View File
@@ -264,7 +264,7 @@ void GameStateDuel::loadTestSuitePlayers()
{ {
mPlayers.push_back(new TestSuiteAI(game, testSuite, i)); mPlayers.push_back(new TestSuiteAI(game, testSuite, i));
} }
game->setPlayers(mPlayers, 2); game->setPlayers(mPlayers);
mParent->gameType = testSuite->gameType; mParent->gameType = testSuite->gameType;
game->startGame(mParent->rules); game->startGame(mParent->rules);
@@ -446,20 +446,20 @@ void GameStateDuel::Update(float dt)
case DUEL_STATE_PLAY: case DUEL_STATE_PLAY:
if (!game) if (!game)
{ {
game = new GameObserver(mPlayers, 2); game = new GameObserver(mPlayers);
game->startGame(mParent->rules); game->startGame(mParent->rules);
if (mParent->gameType == GAME_TYPE_MOMIR) if (mParent->gameType == GAME_TYPE_MOMIR)
{ {
game->addObserver(NEW MTGMomirRule(game, -1, MTGCollection())); game->addObserver(NEW MTGMomirRule(game, -1, MTGCollection()));
} }
if (mParent->gameType == GAME_TYPE_STONEHEWER) if (mParent->gameType == GAME_TYPE_STONEHEWER)
{ {
game->addObserver(NEW MTGStoneHewerRule(game, -1,MTGCollection())); game->addObserver(NEW MTGStoneHewerRule(game, -1,MTGCollection()));
} }
if (mParent->gameType == GAME_TYPE_HERMIT) if (mParent->gameType == GAME_TYPE_HERMIT)
{ {
game->addObserver(NEW MTGHermitRule(game, -1)); game->addObserver(NEW MTGHermitRule(game, -1));
} }
//start of in game music code //start of in game music code
musictrack = ""; musictrack = "";
+1 -1
View File
@@ -30,6 +30,7 @@ Player::Player(GameObserver *observer, string file, string fileSmall, MTGDeck *
if (deck != NULL) if (deck != NULL)
{ {
game = NEW MTGPlayerCards(deck); game = NEW MTGPlayerCards(deck);
// This automatically sets the observer pointer on all the deck cards
game->setOwner(this); game->setOwner(this);
deckName = deck->meta_name; deckName = deck->meta_name;
} }
@@ -106,7 +107,6 @@ HumanPlayer::HumanPlayer(GameObserver *observer, string file, string fileSmall,
{ {
loadAvatar("avatar.jpg"); loadAvatar("avatar.jpg");
playMode = MODE_HUMAN; playMode = MODE_HUMAN;
setObserver(observer);
} }
ManaPool * Player::getManaPool() ManaPool * Player::getManaPool()
+2 -2
View File
@@ -342,8 +342,8 @@ void Rules::initPlayers(GameObserver *g)
for (int i = 0; i < 2; i++) for (int i = 0; i < 2; i++)
{ {
Player * p = initPlayer(g, i); Player * p = initPlayer(g, i);
if(p) if(p && g->getPlayersNumber() < 2)
g->players.push_back(p); g->players.push_back(p);
MTGDeck * deck = buildDeck(i); MTGDeck * deck = buildDeck(i);
if (deck) if (deck)
{ {
+1 -1
View File
@@ -321,7 +321,7 @@ void StoryDuel::init()
rules = NEW Rules(bg); rules = NEW Rules(bg);
rules->load(rulesFile); rules->load(rulesFile);
game = new GameObserver(players, 2); game = new GameObserver(players);
rules->gamemode = GAME_TYPE_STORY; rules->gamemode = GAME_TYPE_STORY;
game->startGame(rules); game->startGame(rules);
+15 -22
View File
@@ -255,10 +255,6 @@ void TestSuiteActions::add(string s)
TestSuiteState::TestSuiteState() TestSuiteState::TestSuiteState()
{ {
for(size_t p = 0;p < players.size();++p)
{
players[p] = 0;
}
players.clear(); players.clear();
} }
@@ -294,33 +290,30 @@ MTGPlayerCards * TestSuite::buildDeck(Player* player, int playerId)
int list[100]; int list[100];
int nbcards = 0; int nbcards = 0;
MTGPlayerCards * deck = NULL; 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;
int cardid = loadedPlayerZones[j]->cards[k]->getId(); nbcards++;
list[nbcards] = cardid;
nbcards++;
}
} }
deck = NEW MTGPlayerCards(player, list, nbcards);
} }
else deck = NEW MTGPlayerCards(player, list, nbcards);
deck = NEW MTGPlayerCards();
} }
else else
{ {
deck = NEW MTGPlayerCards(); deck = NEW MTGPlayerCards();
} }
return deck; return deck;
} }