void DeckStats::saveStats(Player *player, Player *opponent, GameObserver * game) { int victory = 1; if (!game->didWin()) { if (player->life == opponent->life) return; if (player->life < opponent->life) victory = 0; } else if (!game->didWin(player)) { victory = 0; } load(currentDeck); map<string, DeckStat *> *stats = &masterDeckStats[currentDeck]; map<string, DeckStat *>::iterator it = stats->find(opponent->deckFileSmall); string manaColorIndex = ""; DeckManager *deckManager = DeckManager::GetInstance(); DeckMetaData *aiDeckMeta = deckManager->getDeckMetaDataByFilename( opponent->deckFile, true); StatsWrapper *stw = deckManager->getExtendedDeckStats( aiDeckMeta, MTGAllCards::getInstance(), true); manaColorIndex = stw->getManaColorIndex(); if (it == stats->end()) { stats->insert( make_pair( opponent->deckFileSmall, NEW DeckStat(1, victory, manaColorIndex) )); } else { it->second->victories += victory; it->second->nbgames += 1; if ( it->second->manaColorIndex == "" ) { it->second->manaColorIndex = manaColorIndex; } } save(currentDeck); DeckMetaData* playerMeta = DeckManager::GetInstance()->getDeckMetaDataByFilename(player->deckFile, false); // metadata caches its internal data (number of games, victories, etc) // tell it to refresh when stats are updated if (playerMeta) playerMeta->Invalidate(); DeckMetaData* aiMeta = DeckManager::GetInstance()->getDeckMetaDataByFilename(opponent->deckFile, true); if (aiMeta) aiMeta->Invalidate(); }
void DeckStats::save(const std::string& filename) { std::ofstream file; if (JFileSystem::GetInstance()->openForWrite(file, filename)) { char writer[512]; map<string, DeckStat *> stats = masterDeckStats[currentDeck]; map<string, DeckStat *>::iterator it; string manaColorIndex = ""; int deckId = atoi(filename.substr(filename.find("_deck") + 5, filename.find(".txt")).c_str()); char buffer[512]; sprintf(buffer, "deck%i.txt", deckId); string playerDeckFilePath= options.profileFile( buffer); DeckManager *deckManager = DeckManager::GetInstance(); DeckMetaData *playerDeckMeta = deckManager->getDeckMetaDataByFilename(playerDeckFilePath, false); if (playerDeckMeta && playerDeckMeta->getColorIndex() == "" ) { StatsWrapper *stw = deckManager->getExtendedDeckStats( playerDeckMeta, MTGAllCards::getInstance(), false); manaColorIndex = stw->getManaColorIndex(); playerDeckMeta->setColorIndex( manaColorIndex ); } file << "MANA:" << manaColorIndex << endl; if(file) for (it = stats.begin(); it != stats.end(); it++) { sprintf(writer, "%s\n", it->first.c_str()); file << writer; sprintf(writer, "%i\n", it->second->nbgames); file << writer; sprintf(writer, "%i\n", it->second->victories); file << writer; file << "MANA:" << it->second->manaColorIndex <<endl; } file.close(); if(playerDeckMeta) playerDeckMeta->Invalidate(); } }