initializespatch fix for issue 459. This patch encapsulates the metadata object more and initializes the stat values.
This commit is contained in:
@@ -16,21 +16,33 @@ enum DECK_DIFFICULTY
|
|||||||
};
|
};
|
||||||
|
|
||||||
class DeckMetaData {
|
class DeckMetaData {
|
||||||
|
private:
|
||||||
|
string _filename;
|
||||||
|
|
||||||
|
string _desc;
|
||||||
|
string _name;
|
||||||
|
int _deckid;
|
||||||
|
|
||||||
|
// statistical information
|
||||||
|
|
||||||
|
int _nbGamesPlayed, _victories, _percentVictories, _difficulty;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
DeckMetaData();
|
DeckMetaData();
|
||||||
DeckMetaData(string filename, Player * statsPlayer);
|
DeckMetaData(string filename, Player * statsPlayer);
|
||||||
void load(string filename);
|
void load(string filename);
|
||||||
void loadStatsForPlayer( Player * statsPlayer, string opponentDeckName = "" );
|
void loadStatsForPlayer( Player * statsPlayer, string opponentDeckName = "" );
|
||||||
|
|
||||||
|
// Accessors
|
||||||
|
string getFilename();
|
||||||
string getDescription();
|
string getDescription();
|
||||||
|
string getName();
|
||||||
string desc;
|
int getDeckId();
|
||||||
string name;
|
int getGamesPlayed();
|
||||||
int deckid;
|
int getVictories();
|
||||||
|
int getVictoryPercentage();
|
||||||
|
int getDifficulty();
|
||||||
|
|
||||||
// statistical information
|
|
||||||
|
|
||||||
int nbGamesPlayed, victories, percentVictories, difficulty;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class DeckMetaDataList {
|
class DeckMetaDataList {
|
||||||
|
|||||||
@@ -22,64 +22,50 @@ DeckMetaData::DeckMetaData(string filename, Player * statsPlayer){
|
|||||||
|
|
||||||
void DeckMetaData::loadStatsForPlayer( Player * statsPlayer, string deckStatsFileName )
|
void DeckMetaData::loadStatsForPlayer( Player * statsPlayer, string deckStatsFileName )
|
||||||
{
|
{
|
||||||
DeckStats * stats = DeckStats::GetInstance();
|
DeckStats * stats = DeckStats::GetInstance();
|
||||||
if ( statsPlayer )
|
if ( statsPlayer )
|
||||||
|
{
|
||||||
|
stats->load(statsPlayer);
|
||||||
|
DeckStat * opponentDeckStats = stats->getDeckStat(deckStatsFileName);
|
||||||
|
if ( opponentDeckStats )
|
||||||
{
|
{
|
||||||
stats->load(statsPlayer);
|
_percentVictories = stats->percentVictories(deckStatsFileName);
|
||||||
DeckStat * opponentDeckStats = stats->getDeckStat(deckStatsFileName);
|
_victories = opponentDeckStats->victories;
|
||||||
if ( opponentDeckStats )
|
_nbGamesPlayed = opponentDeckStats->nbgames;
|
||||||
|
if (_percentVictories < 34)
|
||||||
{
|
{
|
||||||
percentVictories = stats->percentVictories(deckStatsFileName);
|
_difficulty = HARD;
|
||||||
victories = opponentDeckStats->victories;
|
}
|
||||||
nbGamesPlayed = opponentDeckStats->nbgames;
|
else if (_percentVictories < 67)
|
||||||
if (percentVictories < 34){
|
{
|
||||||
difficulty = HARD;
|
_difficulty = NORMAL;
|
||||||
}else if (percentVictories < 67){
|
}
|
||||||
difficulty = NORMAL;
|
else
|
||||||
}else{
|
{
|
||||||
difficulty = EASY;
|
_difficulty = EASY;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
}
|
||||||
{
|
else
|
||||||
if(fileExists(deckStatsFileName.c_str())){
|
{
|
||||||
stats->load(deckStatsFileName.c_str());
|
if(fileExists(deckStatsFileName.c_str())){
|
||||||
nbGamesPlayed = stats->nbGames();
|
stats->load(deckStatsFileName.c_str());
|
||||||
percentVictories = stats->percentVictories();
|
_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){
|
void DeckMetaData::load(string filename){
|
||||||
MTGDeck * mtgd = NEW MTGDeck(filename.c_str(),NULL,1);
|
MTGDeck * mtgd = NEW MTGDeck(filename.c_str(),NULL,1);
|
||||||
name = trim( mtgd->meta_name );
|
_name = trim( mtgd->meta_name );
|
||||||
desc = trim( mtgd->meta_desc );
|
_desc = trim( mtgd->meta_desc );
|
||||||
deckid = atoi( (filename.substr( filename.find("deck") + 4, filename.find(".txt") )).c_str() );
|
_deckid = atoi( (filename.substr( filename.find("deck") + 4, filename.find(".txt") )).c_str() );
|
||||||
|
_percentVictories = 0;
|
||||||
|
_nbGamesPlayed = 0;
|
||||||
|
_filename = filename;
|
||||||
|
_victories = 0;
|
||||||
delete(mtgd);
|
delete(mtgd);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -99,7 +85,6 @@ void DeckMetaDataList::invalidate(string filename){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
DeckMetaData * DeckMetaDataList::get(string filename, Player * statsPlayer){
|
DeckMetaData * DeckMetaDataList::get(string filename, Player * statsPlayer){
|
||||||
map<string,DeckMetaData *>::iterator it = values.find(filename);
|
map<string,DeckMetaData *>::iterator it = values.find(filename);
|
||||||
if (it ==values.end()){
|
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
|
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;
|
||||||
|
}
|
||||||
|
|||||||
@@ -35,11 +35,12 @@ vector<DeckMetaData *> GameState::getValidDeckMetaData( string path, string smal
|
|||||||
char smallDeckName[512];
|
char smallDeckName[512];
|
||||||
char deckDesc[512];
|
char deckDesc[512];
|
||||||
sprintf(buffer, "%s/deck%i.txt",path.c_str(),nbDecks);
|
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;
|
found = 1;
|
||||||
sprintf(smallDeckName, "%s_deck%i",smallDeckPrefix.c_str(),nbDecks);
|
sprintf(smallDeckName, "%s_deck%i",smallDeckPrefix.c_str(),nbDecks);
|
||||||
sprintf(deckDesc, "%s",meta->name.c_str());
|
|
||||||
|
|
||||||
if (statsPlayer){
|
if (statsPlayer){
|
||||||
string smallDeckNameStr = string(smallDeckName);
|
string smallDeckNameStr = string(smallDeckName);
|
||||||
meta->loadStatsForPlayer( statsPlayer, smallDeckNameStr );
|
meta->loadStatsForPlayer( statsPlayer, smallDeckNameStr );
|
||||||
@@ -47,16 +48,17 @@ vector<DeckMetaData *> GameState::getValidDeckMetaData( string path, string smal
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
char playerStatsDeckName[512];
|
char playerStatsDeckName[512];
|
||||||
|
|
||||||
sprintf(playerStatsDeckName, "stats/player_deck%i.txt", nbDecks);
|
sprintf(playerStatsDeckName, "stats/player_deck%i.txt", nbDecks);
|
||||||
string deckstats = options.profileFile(playerStatsDeckName);
|
string deckstats = options.profileFile(playerStatsDeckName);
|
||||||
meta->loadStatsForPlayer( NULL, deckstats );
|
meta->loadStatsForPlayer( NULL, deckstats );
|
||||||
}
|
}
|
||||||
|
|
||||||
deckDesc[16] = 0;
|
deckDesc[16] = 0;
|
||||||
retList.push_back( meta );
|
retList.push_back( meta );
|
||||||
nbDecks++;
|
nbDecks++;
|
||||||
}
|
}
|
||||||
|
meta = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::sort( retList.begin(), retList.end(), sortByName);
|
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++)
|
for (vector<DeckMetaData *>::iterator i = deckMetaDataList.begin(); i != deckMetaDataList.end(); i++)
|
||||||
{
|
{
|
||||||
DeckMetaData * deckMetaData = *i;
|
DeckMetaData * deckMetaData = *i;
|
||||||
string deckName = deckMetaData -> name;
|
string deckName = deckMetaData -> getName();
|
||||||
string deckDescription = deckMetaData -> getDescription();
|
string deckDescription = deckMetaData -> getDescription();
|
||||||
//translate decks desc
|
//translate decks desc
|
||||||
it = t->deckValues.find(deckName);
|
it = t->deckValues.find(deckName);
|
||||||
@@ -90,7 +92,7 @@ void GameState::renderDeckMenu ( SimpleMenu * _menu, vector<DeckMetaData *> deck
|
|||||||
// deck sorting routines
|
// deck sorting routines
|
||||||
bool sortByName( DeckMetaData * d1, DeckMetaData * d2 )
|
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;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1475,7 +1475,7 @@ void GameStateDeckViewer::ButtonPressed(int controllerId, int controlId)
|
|||||||
if (controlId == MENU_ITEM_NEW_DECK) // new deck option selected
|
if (controlId == MENU_ITEM_NEW_DECK) // new deck option selected
|
||||||
deckIdNumber = deckList->size() + 1;
|
deckIdNumber = deckList->size() + 1;
|
||||||
else if (deckListSize > 0 && controlId <= deckListSize)
|
else if (deckListSize > 0 && controlId <= deckListSize)
|
||||||
deckIdNumber = deckList->at(controlId - 1)->deckid;
|
deckIdNumber = deckList->at(controlId - 1)-> getDeckId();
|
||||||
else
|
else
|
||||||
deckIdNumber = controlId;
|
deckIdNumber = controlId;
|
||||||
|
|
||||||
|
|||||||
@@ -527,7 +527,7 @@ void GameStateDuel::ButtonPressed(int controllerId, int controlId) {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else if ( controlId != MENUITEM_EVIL_TWIN && aiDeckSize > 0) // evil twin
|
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);
|
loadPlayer(1,deckNumber,1);
|
||||||
OpponentsDeckid=deckNumber;
|
OpponentsDeckid=deckNumber;
|
||||||
@@ -542,7 +542,7 @@ void GameStateDuel::ButtonPressed(int controllerId, int controlId) {
|
|||||||
if ( controlId == MENUITEM_RANDOM_PLAYER ) // Random Player Deck Selection
|
if ( controlId == MENUITEM_RANDOM_PLAYER ) // Random Player Deck Selection
|
||||||
{
|
{
|
||||||
vector<DeckMetaData *> * playerDeckList = deckManager->getPlayerDeckOrderList();
|
vector<DeckMetaData *> * playerDeckList = deckManager->getPlayerDeckOrderList();
|
||||||
deckNumber = playerDeckList->at(WRand() * 1001 % (playerDeckList->size()) )->deckid;
|
deckNumber = playerDeckList->at(WRand() * 1001 % (playerDeckList->size()) )->getDeckId();
|
||||||
loadPlayer( 0, deckNumber );
|
loadPlayer( 0, deckNumber );
|
||||||
deckmenu->Close();
|
deckmenu->Close();
|
||||||
mGamePhase = DUEL_STATE_CHOOSE_DECK2_TO_PLAY;
|
mGamePhase = DUEL_STATE_CHOOSE_DECK2_TO_PLAY;
|
||||||
@@ -562,7 +562,7 @@ void GameStateDuel::ButtonPressed(int controllerId, int controlId) {
|
|||||||
if (mGamePhase == DUEL_STATE_CHOOSE_DECK1){
|
if (mGamePhase == DUEL_STATE_CHOOSE_DECK1){
|
||||||
vector<DeckMetaData *> * playerDeck = deckManager->getPlayerDeckOrderList();
|
vector<DeckMetaData *> * playerDeck = deckManager->getPlayerDeckOrderList();
|
||||||
if ( !premadeDeck && controlId > 0 )
|
if ( !premadeDeck && controlId > 0 )
|
||||||
deckNumber = playerDeck->at( controlId - 1 )->deckid;
|
deckNumber = playerDeck->at( controlId - 1 )->getDeckId();
|
||||||
loadPlayer(0,deckNumber);
|
loadPlayer(0,deckNumber);
|
||||||
deckmenu->Close();
|
deckmenu->Close();
|
||||||
mGamePhase = DUEL_STATE_CHOOSE_DECK1_TO_2;
|
mGamePhase = DUEL_STATE_CHOOSE_DECK1_TO_2;
|
||||||
|
|||||||
Reference in New Issue
Block a user