* Added new options parameter. "SaveDetailedDeckInfo". This will force the system to save all

deck files in long format.  This is not configurable from the game.  It must be set manually
     inside options.txt.
     ie.  saveDetailedDeckInfo=1

* added extra debug information (line number inside text file) when card parser fails to recognize a line.
    - modified return value from "processConfLine()" to return 0 only when a true error occurs and print out
         "MTGDeck: Bad Line:
         [<line no>]: <line with error>"
    - processConfLine will now return 1 for lines starting with "#".  Previously it returned 0 which is incorrect
         as comments should not be considered as errors.

* removed DeckMetaDataList class from code.  This was duplicating the DeckMetaData storage in DeckManager
* new feature for deck selection screens.
   - player decks will now have an indication of what mana color it consists of.
   - Ai decks will show symbols once the player has played against the AI deck at least once.
   -- This is made possible with a new meta data inside each deck file.
        MANA:<string representing color switches - 0/1 >
This commit is contained in:
techdragon.nguyen@gmail.com
2011-01-31 10:04:18 +00:00
parent 2973158a62
commit 8af5870d48
13 changed files with 174 additions and 76 deletions

View File

@@ -51,7 +51,19 @@ DeckMetaData* DeckManager::getDeckMetaDataById( int deckId, bool isAI )
{
deck = *pos;
}
else
{
ostringstream deckFilename;
string filepath;
if ( isAI )
filepath = options.profileFile( "ai/baka/");
else
filepath = options.profileFile( "" );
deckFilename << filepath << "/deck" << deckId << ".txt";
AddMetaData( deckFilename.str(), isAI );
deck = deckList.back();
}
return deck;
}
@@ -82,10 +94,54 @@ DeckMetaData* DeckManager::getDeckMetaDataByFilename(const string& filename, boo
{
deck = *pos;
}
else
{
if ( FileExists( filename) )
{
AddMetaData( filename, isAI );
deck = deckList.back();
}
}
return deck;
}
void DeckManager::saveDeck( MTGDeck *deck, int deckId, MTGAllCards *collection )
{
if ( deck->meta_deck_colors == "" )
{
bool isAI = deck->getFilename().find("baka") != string::npos;
StatsWrapper *stats = getExtendedStatsForDeckId( deckId, collection, isAI );
ostringstream manaColorIndex;
for (int i = Constants::MTG_COLOR_ARTIFACT; i < Constants::MTG_COLOR_LAND; ++i)
{
if (stats->totalCostPerColor[i] != 0)
manaColorIndex << "1";
else
manaColorIndex <<"0";
}
deck->meta_deck_colors = manaColorIndex.str();
// save the deck to disk
deck->save( deck->getFilename(), true, deck->meta_name, deck->meta_desc );
// update DeckMetaData object
DeckMetaData *meta = getDeckMetaDataByFilename(deck->getFilename(), isAI);
meta->setColorIndex( deck->meta_deck_colors );
}
}
void DeckManager::AddMetaData( const string& filename, bool isAI )
{
if (isAI)
{
aiDeckOrderList.push_back ( NEW DeckMetaData( filename ) );
aiDeckStatsMap.insert( make_pair( filename.c_str(), new StatsWrapper( aiDeckOrderList.back()->getDeckId()) ));
}
else
{
playerDeckOrderList.push_back ( NEW DeckMetaData( filename ) );
playerDeckStatsMap.insert( make_pair( filename.c_str(), new StatsWrapper( playerDeckOrderList.back()->getDeckId()) ));
}
}
StatsWrapper * DeckManager::getExtendedStatsForDeckId( int deckId, MTGAllCards *collection, bool isAI )
{
@@ -111,7 +167,7 @@ StatsWrapper * DeckManager::getExtendedDeckStats( DeckMetaData *selectedDeck, MT
int deckId = selectedDeck->getDeckId();
map<string, StatsWrapper*>* statsMap = isAI ? &aiDeckStatsMap : &playerDeckStatsMap;
if (statsMap->find(deckName) == statsMap->end())
if ( statsMap->find(deckName) == statsMap->end())
{
stats = NEW StatsWrapper(deckId);
stats->updateStats( deckName, collection);
@@ -120,8 +176,9 @@ StatsWrapper * DeckManager::getExtendedDeckStats( DeckMetaData *selectedDeck, MT
else
{
stats = statsMap->find(deckName)->second;
if ( stats->needUpdate )
stats->updateStats( deckName, collection );
}
return stats;
}
@@ -133,15 +190,27 @@ void DeckManager::EndInstance()
{
if (mInstance)
{
mInstance->aiDeckOrderList.clear();
mInstance->playerDeckOrderList.clear();
map<string, StatsWrapper *>::iterator it;
vector<DeckMetaData *>::iterator metaDataIter;
for (it = mInstance->aiDeckStatsMap.begin(); it != mInstance->aiDeckStatsMap.end(); it++){
SAFE_DELETE(it->second);
}
for (it = mInstance->playerDeckStatsMap.begin(); it != mInstance->playerDeckStatsMap.end(); it++){
SAFE_DELETE(it->second);
}
for( metaDataIter = mInstance->aiDeckOrderList.begin(); metaDataIter != mInstance->aiDeckOrderList.end(); ++metaDataIter)
{
SAFE_DELETE( *metaDataIter );
}
for( metaDataIter = mInstance->playerDeckOrderList.begin(); metaDataIter != mInstance->playerDeckOrderList.end(); ++metaDataIter)
{
SAFE_DELETE( *metaDataIter );
}
mInstance->aiDeckOrderList.clear();
mInstance->playerDeckOrderList.clear();
mInstance->aiDeckStatsMap.clear();
mInstance->playerDeckStatsMap.clear();
SAFE_DELETE( mInstance );
@@ -163,10 +232,7 @@ DeckManager* DeckManager::GetInstance()
// p2 is the opponent
int DeckManager::getDifficultyRating(Player *statsPlayer, Player *player)
{
DeckMetaDataList * metas = DeckMetaDataList::decksMetaData;
DeckMetaData *meta = metas->get(player->deckFile);
DeckMetaData *meta = DeckManager::GetInstance()->getDeckMetaDataByFilename(player->deckFile, (player->isAI() == 1) );
return meta->getDifficulty();
}