diff --git a/projects/mtg/include/DeckMetaData.h b/projects/mtg/include/DeckMetaData.h index 9baf96b3d..d583afd23 100644 --- a/projects/mtg/include/DeckMetaData.h +++ b/projects/mtg/include/DeckMetaData.h @@ -16,21 +16,33 @@ enum DECK_DIFFICULTY }; class DeckMetaData { +private: + string _filename; + + string _desc; + string _name; + int _deckid; + + // statistical information + + int _nbGamesPlayed, _victories, _percentVictories, _difficulty; + public: DeckMetaData(); DeckMetaData(string filename, Player * statsPlayer); void load(string filename); void loadStatsForPlayer( Player * statsPlayer, string opponentDeckName = "" ); + // Accessors + string getFilename(); string getDescription(); - - string desc; - string name; - int deckid; + string getName(); + int getDeckId(); + int getGamesPlayed(); + int getVictories(); + int getVictoryPercentage(); + int getDifficulty(); - // statistical information - - int nbGamesPlayed, victories, percentVictories, difficulty; }; class DeckMetaDataList { diff --git a/projects/mtg/src/DeckMetaData.cpp b/projects/mtg/src/DeckMetaData.cpp index e69525f44..9c4086d95 100644 --- a/projects/mtg/src/DeckMetaData.cpp +++ b/projects/mtg/src/DeckMetaData.cpp @@ -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::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; +} diff --git a/projects/mtg/src/GameState.cpp b/projects/mtg/src/GameState.cpp index 2e0b57403..bd6efa806 100644 --- a/projects/mtg/src/GameState.cpp +++ b/projects/mtg/src/GameState.cpp @@ -35,11 +35,12 @@ vector 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 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 deck for (vector::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 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; } diff --git a/projects/mtg/src/GameStateDeckViewer.cpp b/projects/mtg/src/GameStateDeckViewer.cpp index 52cee1b4a..ae1f659c1 100644 --- a/projects/mtg/src/GameStateDeckViewer.cpp +++ b/projects/mtg/src/GameStateDeckViewer.cpp @@ -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; diff --git a/projects/mtg/src/GameStateDuel.cpp b/projects/mtg/src/GameStateDuel.cpp index 4f70cd819..7896b094d 100644 --- a/projects/mtg/src/GameStateDuel.cpp +++ b/projects/mtg/src/GameStateDuel.cpp @@ -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 * 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 * 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;