- cache system for Deck Meta Data. let's improve it as needs arise
This commit is contained in:
wagic.the.homebrew@gmail.com
2010-01-15 12:19:47 +00:00
parent 9e4e7fe1ae
commit 26f96c3443
7 changed files with 89 additions and 12 deletions
+45
View File
@@ -0,0 +1,45 @@
#include "../include/DeckMetaData.h"
#include "../include/MTGDeck.h"
#include "../include/config.h"
//Possible improvements:
//Merge this with DeckStats
//Have this class handle all the Meta Data rather than relying on MTGDeck. Then MTGDeck would have a MetaData object...
DeckMetaDataList * DeckMetaDataList::decksMetaData = NEW DeckMetaDataList();
DeckMetaData::DeckMetaData(string filename){
load(filename);
}
void DeckMetaData::load(string filename){
MTGDeck * mtgd = NEW MTGDeck(filename.c_str(),NULL,1);
name = mtgd->meta_name;
desc = mtgd->meta_desc;
delete(mtgd);
}
DeckMetaDataList::~DeckMetaDataList(){
for(map<string,DeckMetaData *>::iterator it = values.begin(); it != values.end(); ++it){
SAFE_DELETE(it->second);
}
values.clear();
}
void DeckMetaDataList::invalidate(string filename){
map<string,DeckMetaData *>::iterator it = values.find(filename);
if (it !=values.end()){
SAFE_DELETE(it->second);
values.erase(it);
}
}
DeckMetaData * DeckMetaDataList::get(string filename){
map<string,DeckMetaData *>::iterator it = values.find(filename);
if (it ==values.end()){
if (fileExists(filename.c_str())) {
values[filename] = NEW DeckMetaData(filename);
}
}
return values[filename]; //this creates a NULL entry if the file does not exist
}
+2
View File
@@ -17,6 +17,7 @@
#include "../include/GameStateShop.h"
#include "../include/GameStateAwards.h"
#include "../include/DeckStats.h"
#include "../include/DeckMetaData.h"
#include "../include/Translate.h"
hgeParticleSystem* GameApp::Particles[] = {NULL,NULL,NULL,NULL,NULL,NULL};
@@ -222,6 +223,7 @@ void GameApp::Destroy()
delete(DeckStats::GetInstance());
SAFE_DELETE(Subtypes::subtypesList);
SAFE_DELETE(DeckMetaDataList::decksMetaData);
SAFE_DELETE(music);
Translator::EndInstance();
+6 -6
View File
@@ -4,9 +4,11 @@
#include "../include/Player.h"
#include "../include/SimpleMenu.h"
#include "../include/DeckStats.h"
#include "../include/DeckMetaData.h"
int GameState::fillDeckMenu(SimpleMenu * _menu, string path, string smallDeckPrefix, Player * statsPlayer){
DeckMetaDataList * metas = DeckMetaDataList::decksMetaData;
int found = 1;
int nbDecks = 0;
_menu->autoTranslate = false;
@@ -16,8 +18,7 @@ int GameState::fillDeckMenu(SimpleMenu * _menu, string path, string smallDeckPre
char smallDeckName[512];
char deckDesc[512];
sprintf(buffer, "%s/deck%i.txt",path.c_str(),nbDecks+1);
if(fileExists(buffer)){
MTGDeck * mtgd = NEW MTGDeck(buffer,NULL,1);
if(DeckMetaData * meta = metas->get(buffer)){
found = 1;
nbDecks++;
sprintf(smallDeckName, "%s_deck%i",smallDeckPrefix.c_str(),nbDecks);
@@ -34,13 +35,12 @@ int GameState::fillDeckMenu(SimpleMenu * _menu, string path, string smallDeckPre
}else{
difficulty = "(easy)";
}
sprintf(deckDesc, "%s %s",mtgd->meta_name.c_str(), _(difficulty).c_str());
sprintf(deckDesc, "%s %s",meta->name.c_str(), _(difficulty).c_str());
}else{
sprintf(deckDesc, "%s",mtgd->meta_name.c_str());
sprintf(deckDesc, "%s",meta->name.c_str());
}
deckDesc[16] = 0;
_menu->Add(nbDecks,deckDesc,mtgd->meta_desc);
delete mtgd;
_menu->Add(nbDecks,deckDesc,meta->desc);
}
}
return nbDecks;
-5
View File
@@ -331,7 +331,6 @@ void GameStateDuel::Update(float dt)
}
//end of music code
}
// mParent->effect->UpdateSmall(dt);
game->Update(dt);
if (game->gameOver){
credits->compute(game->players[0],game->players[1], mParent);
@@ -357,17 +356,14 @@ void GameStateDuel::Update(float dt)
}
break;
case DUEL_STATE_MENU:
// mParent->effect->UpdateSmall(dt);
menu->Update(dt);
break;
case DUEL_STATE_CANCEL:
// mParent->effect->UpdateSmall(dt);
menu->Update(dt);
if (menu->closed)
mGamePhase = DUEL_STATE_PLAY;
break;
case DUEL_STATE_BACK_TO_MAIN_MENU:
// mParent->effect->UpdateSmall(dt);
menu->Update(dt);
if (menu->closed) {
PlayerData * playerdata = NEW PlayerData(mParent->collection);
@@ -388,7 +384,6 @@ void GameStateDuel::Update(float dt)
void GameStateDuel::Render()
{
JLBFont * mFont = resources.GetJLBFont(Constants::MAIN_FONT);
//Erase
LOG("Start Render\n");
JRenderer::GetInstance()->ClearScreen(ARGB(0,0,0,0));