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;
|
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;
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 = "";
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user