initializespatch fix for issue 459. This patch encapsulates the metadata object more and initializes the stat values.

This commit is contained in:
techdragon.nguyen
2010-09-24 11:27:34 +00:00
parent f7d2b774e3
commit 5eab87345a
5 changed files with 128 additions and 69 deletions
+96 -51
View File
@@ -22,64 +22,50 @@ DeckMetaData::DeckMetaData(string filename, Player * statsPlayer){
void DeckMetaData::loadStatsForPlayer( Player * statsPlayer, string deckStatsFileName )
{
DeckStats * stats = DeckStats::GetInstance();
if ( statsPlayer )
DeckStats * stats = DeckStats::GetInstance();
if ( statsPlayer )
{
stats->load(statsPlayer);
DeckStat * opponentDeckStats = stats->getDeckStat(deckStatsFileName);
if ( opponentDeckStats )
{
stats->load(statsPlayer);
DeckStat * opponentDeckStats = stats->getDeckStat(deckStatsFileName);
if ( opponentDeckStats )
_percentVictories = stats->percentVictories(deckStatsFileName);
_victories = opponentDeckStats->victories;
_nbGamesPlayed = opponentDeckStats->nbgames;
if (_percentVictories < 34)
{
percentVictories = stats->percentVictories(deckStatsFileName);
victories = opponentDeckStats->victories;
nbGamesPlayed = opponentDeckStats->nbgames;
if (percentVictories < 34){
difficulty = HARD;
}else if (percentVictories < 67){
difficulty = NORMAL;
}else{
difficulty = EASY;
}
_difficulty = HARD;
}
else if (_percentVictories < 67)
{
_difficulty = NORMAL;
}
else
{
_difficulty = EASY;
}
}
else
{
if(fileExists(deckStatsFileName.c_str())){
stats->load(deckStatsFileName.c_str());
nbGamesPlayed = stats->nbGames();
percentVictories = stats->percentVictories();
}
}
else
{
if(fileExists(deckStatsFileName.c_str())){
stats->load(deckStatsFileName.c_str());
_nbGamesPlayed = stats->nbGames();
_percentVictories = stats->percentVictories();
}
}
stats = NULL;
}
string DeckMetaData::getDescription()
{
char deckDesc[512];
string difficultyString = "";
switch( difficulty )
{
case HARD:
difficultyString = "Hard";
break;
case EASY:
difficultyString = "Easy";
break;
}
if ( nbGamesPlayed > 0 && difficultyString != "")
sprintf(deckDesc, "Difficulty: %s\nVictory %%: %i\nGames Played: %i\n\n%s", difficultyString.c_str(), percentVictories, nbGamesPlayed, desc.c_str() );
else if ( nbGamesPlayed > 0 )
sprintf(deckDesc, "Victory %%: %i\nGames Played: %i\n\n%s", percentVictories, nbGamesPlayed, desc.c_str() );
else
return desc.c_str();
return deckDesc;
}
void DeckMetaData::load(string filename){
MTGDeck * mtgd = NEW MTGDeck(filename.c_str(),NULL,1);
name = trim( mtgd->meta_name );
desc = trim( mtgd->meta_desc );
deckid = atoi( (filename.substr( filename.find("deck") + 4, filename.find(".txt") )).c_str() );
_name = trim( mtgd->meta_name );
_desc = trim( mtgd->meta_desc );
_deckid = atoi( (filename.substr( filename.find("deck") + 4, filename.find(".txt") )).c_str() );
_percentVictories = 0;
_nbGamesPlayed = 0;
_filename = filename;
_victories = 0;
delete(mtgd);
}
@@ -99,7 +85,6 @@ void DeckMetaDataList::invalidate(string filename){
}
}
DeckMetaData * DeckMetaDataList::get(string filename, Player * statsPlayer){
map<string,DeckMetaData *>::iterator it = values.find(filename);
if (it ==values.end()){
@@ -111,4 +96,64 @@ DeckMetaData * DeckMetaDataList::get(string filename, Player * statsPlayer){
return values[filename]; //this creates a NULL entry if the file does not exist
}
//Accessors
string DeckMetaData::getFilename()
{
return _filename;
}
string DeckMetaData::getName()
{
return _name;
}
int DeckMetaData::getDeckId()
{
return _deckid;
}
int DeckMetaData::getGamesPlayed()
{
return _nbGamesPlayed;
}
int DeckMetaData::getVictories()
{
return _victories;
}
int DeckMetaData::getVictoryPercentage()
{
return _percentVictories;
}
int DeckMetaData::getDifficulty()
{
return _difficulty;
}
string DeckMetaData::getDescription()
{
char deckDesc[512];
string difficultyString = "";
switch( _difficulty )
{
case HARD:
difficultyString = "Hard";
break;
case EASY:
difficultyString = "Easy";
break;
}
if ( _nbGamesPlayed > 0 && difficultyString != "")
sprintf(deckDesc, "Deck: %s\nDifficulty: %s\nVictory %%: %i\nGames Played: %i\n\n%s", _name.c_str(), difficultyString.c_str(), _percentVictories, _nbGamesPlayed, _desc.c_str() );
else if ( _nbGamesPlayed > 0 )
sprintf(deckDesc, "Deck: %s\nVictory %%: %i\nGames Played: %i\n\n%s", _name.c_str(), _percentVictories, _nbGamesPlayed, _desc.c_str() );
else
sprintf(deckDesc, "Deck: %s\n\n%s", _name.c_str(), _desc.c_str() );
return deckDesc;
}
+9 -7
View File
@@ -35,11 +35,12 @@ vector<DeckMetaData *> GameState::getValidDeckMetaData( string path, string smal
char smallDeckName[512];
char deckDesc[512];
sprintf(buffer, "%s/deck%i.txt",path.c_str(),nbDecks);
if(DeckMetaData * meta = metas->get(buffer, statsPlayer)){
DeckMetaData * meta = metas->get(buffer, statsPlayer);
if (meta)
{
found = 1;
sprintf(smallDeckName, "%s_deck%i",smallDeckPrefix.c_str(),nbDecks);
sprintf(deckDesc, "%s",meta->name.c_str());
if (statsPlayer){
string smallDeckNameStr = string(smallDeckName);
meta->loadStatsForPlayer( statsPlayer, smallDeckNameStr );
@@ -47,16 +48,17 @@ vector<DeckMetaData *> GameState::getValidDeckMetaData( string path, string smal
else
{
char playerStatsDeckName[512];
sprintf(playerStatsDeckName, "stats/player_deck%i.txt", nbDecks);
string deckstats = options.profileFile(playerStatsDeckName);
meta->loadStatsForPlayer( NULL, deckstats );
}
deckDesc[16] = 0;
retList.push_back( meta );
nbDecks++;
}
meta = NULL;
}
std::sort( retList.begin(), retList.end(), sortByName);
@@ -75,7 +77,7 @@ void GameState::renderDeckMenu ( SimpleMenu * _menu, vector<DeckMetaData *> deck
for (vector<DeckMetaData *>::iterator i = deckMetaDataList.begin(); i != deckMetaDataList.end(); i++)
{
DeckMetaData * deckMetaData = *i;
string deckName = deckMetaData -> name;
string deckName = deckMetaData -> getName();
string deckDescription = deckMetaData -> getDescription();
//translate decks desc
it = t->deckValues.find(deckName);
@@ -90,7 +92,7 @@ void GameState::renderDeckMenu ( SimpleMenu * _menu, vector<DeckMetaData *> deck
// deck sorting routines
bool sortByName( DeckMetaData * d1, DeckMetaData * d2 )
{
return strcmp( d1->name.c_str(), d2->name.c_str()) < 0;
return strcmp( d1->getName().c_str(), d2->getName().c_str()) < 0;
}
+1 -1
View File
@@ -1475,7 +1475,7 @@ void GameStateDeckViewer::ButtonPressed(int controllerId, int controlId)
if (controlId == MENU_ITEM_NEW_DECK) // new deck option selected
deckIdNumber = deckList->size() + 1;
else if (deckListSize > 0 && controlId <= deckListSize)
deckIdNumber = deckList->at(controlId - 1)->deckid;
deckIdNumber = deckList->at(controlId - 1)-> getDeckId();
else
deckIdNumber = controlId;
+3 -3
View File
@@ -527,7 +527,7 @@ void GameStateDuel::ButtonPressed(int controllerId, int controlId) {
break;
}
else if ( controlId != MENUITEM_EVIL_TWIN && aiDeckSize > 0) // evil twin
deckNumber = deckManager->getAIDeckOrderList()->at( controlId - 1 )->deckid;
deckNumber = deckManager->getAIDeckOrderList()->at( controlId - 1 )->getDeckId();
loadPlayer(1,deckNumber,1);
OpponentsDeckid=deckNumber;
@@ -542,7 +542,7 @@ void GameStateDuel::ButtonPressed(int controllerId, int controlId) {
if ( controlId == MENUITEM_RANDOM_PLAYER ) // Random Player Deck Selection
{
vector<DeckMetaData *> * playerDeckList = deckManager->getPlayerDeckOrderList();
deckNumber = playerDeckList->at(WRand() * 1001 % (playerDeckList->size()) )->deckid;
deckNumber = playerDeckList->at(WRand() * 1001 % (playerDeckList->size()) )->getDeckId();
loadPlayer( 0, deckNumber );
deckmenu->Close();
mGamePhase = DUEL_STATE_CHOOSE_DECK2_TO_PLAY;
@@ -562,7 +562,7 @@ void GameStateDuel::ButtonPressed(int controllerId, int controlId) {
if (mGamePhase == DUEL_STATE_CHOOSE_DECK1){
vector<DeckMetaData *> * playerDeck = deckManager->getPlayerDeckOrderList();
if ( !premadeDeck && controlId > 0 )
deckNumber = playerDeck->at( controlId - 1 )->deckid;
deckNumber = playerDeck->at( controlId - 1 )->getDeckId();
loadPlayer(0,deckNumber);
deckmenu->Close();
mGamePhase = DUEL_STATE_CHOOSE_DECK1_TO_2;