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

View File

@@ -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;

View File

@@ -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;
}

View File

@@ -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();
}

View File

@@ -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 = "";

View File

@@ -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()

View File

@@ -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)
{

View File

@@ -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);

View File

@@ -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;
}