diff --git a/projects/mtg/Makefile b/projects/mtg/Makefile index ba8dc9960..038370287 100644 --- a/projects/mtg/Makefile +++ b/projects/mtg/Makefile @@ -1,4 +1,4 @@ -OBJS = objs/ActionElement.o objs/ActionLayer.o objs/ActionStack.o objs/AIMomirPlayer.o objs/AIPlayer.o objs/AIStats.o objs/Blocker.o objs/CardGui.o objs/CardDescriptor.o objs/CardDisplay.o objs/CardEffect.o objs/CardPrimitive.o objs/CardSelector.o objs/ConstraintResolver.o objs/Counters.o objs/Credits.o objs/Damage.o objs/DamagerDamaged.o objs/DeckDataWrapper.o objs/DeckStats.o objs/DuelLayers.o objs/Effects.o objs/ExtraCost.o objs/GameApp.o objs/GameLauncher.o objs/GameObserver.o objs/GameOptions.o objs/GameState.o objs/GameStateAwards.o objs/GameStateDeckViewer.o objs/GameStateDuel.o objs/GameStateMenu.o objs/GameStateOptions.o objs/GameStateShop.o objs/GuiAvatars.o objs/GuiBackground.o objs/GuiCardsController.o objs/GuiCombat.o objs/GuiFrame.o objs/GuiHand.o objs/GuiLayers.o objs/GuiMana.o objs/GuiPhaseBar.o objs/GuiPlay.o objs/GuiStatic.o objs/Logger.o objs/ManaCost.o objs/ManaCostHybrid.o objs/MenuItem.o objs/MTGAbility.o objs/MTGCardInstance.o objs/MTGCard.o objs/MTGDeck.o objs/MTGDefinitions.o objs/MTGGamePhase.o objs/MTGGameZones.o objs/MTGRules.o objs/OptionItem.o objs/PhaseRing.o objs/Player.o objs/PlayerData.o objs/PlayGuiObjectController.o objs/PlayGuiObject.o objs/Pos.o objs/PriceList.o objs/ReplacementEffects.o objs/Rules.o objs/ShopItem.o objs/SimpleMenu.o objs/SimpleMenuItem.o objs/SimplePad.o objs/Subtypes.o objs/TargetChooser.o objs/TargetsList.o objs/TextScroller.o objs/Token.o objs/Translate.o objs/Trash.o objs/utils.o objs/WEvent.o objs/WResourceManager.o objs/WCachedResource.o objs/Tasks.o +OBJS = objs/ActionElement.o objs/ActionLayer.o objs/ActionStack.o objs/AIMomirPlayer.o objs/AIPlayer.o objs/AIStats.o objs/Blocker.o objs/CardGui.o objs/CardDescriptor.o objs/CardDisplay.o objs/CardEffect.o objs/CardPrimitive.o objs/CardSelector.o objs/ConstraintResolver.o objs/Counters.o objs/Credits.o objs/Damage.o objs/DamagerDamaged.o objs/DeckDataWrapper.o objs/DeckMetaData.o objs/DeckStats.o objs/DuelLayers.o objs/Effects.o objs/ExtraCost.o objs/GameApp.o objs/GameLauncher.o objs/GameObserver.o objs/GameOptions.o objs/GameState.o objs/GameStateAwards.o objs/GameStateDeckViewer.o objs/GameStateDuel.o objs/GameStateMenu.o objs/GameStateOptions.o objs/GameStateShop.o objs/GuiAvatars.o objs/GuiBackground.o objs/GuiCardsController.o objs/GuiCombat.o objs/GuiFrame.o objs/GuiHand.o objs/GuiLayers.o objs/GuiMana.o objs/GuiPhaseBar.o objs/GuiPlay.o objs/GuiStatic.o objs/Logger.o objs/ManaCost.o objs/ManaCostHybrid.o objs/MenuItem.o objs/MTGAbility.o objs/MTGCardInstance.o objs/MTGCard.o objs/MTGDeck.o objs/MTGDefinitions.o objs/MTGGamePhase.o objs/MTGGameZones.o objs/MTGRules.o objs/OptionItem.o objs/PhaseRing.o objs/Player.o objs/PlayerData.o objs/PlayGuiObjectController.o objs/PlayGuiObject.o objs/Pos.o objs/PriceList.o objs/ReplacementEffects.o objs/Rules.o objs/ShopItem.o objs/SimpleMenu.o objs/SimpleMenuItem.o objs/SimplePad.o objs/Subtypes.o objs/TargetChooser.o objs/TargetsList.o objs/TextScroller.o objs/Token.o objs/Translate.o objs/Trash.o objs/utils.o objs/WEvent.o objs/WResourceManager.o objs/WCachedResource.o objs/Tasks.o DEPS = $(patsubst objs/%.o, deps/%.d, $(OBJS)) RESULT = $(shell psp-config --psp-prefix 2> Makefile.cache) diff --git a/projects/mtg/include/DeckMetaData.h b/projects/mtg/include/DeckMetaData.h new file mode 100644 index 000000000..199dac83c --- /dev/null +++ b/projects/mtg/include/DeckMetaData.h @@ -0,0 +1,27 @@ +#ifndef _DECKMETADATA_H_ +#define _DECKMETADATA_H_ + +#include +#include + +using namespace std; + +class DeckMetaData { +public: + DeckMetaData(string filename); + void load(string filename); + string desc; + string name; +}; + +class DeckMetaDataList { +public: + void invalidate(string filename); + DeckMetaData * get(string filename); + ~DeckMetaDataList(); + static DeckMetaDataList * decksMetaData; +private: + mapvalues; +}; + +#endif \ No newline at end of file diff --git a/projects/mtg/src/DeckMetaData.cpp b/projects/mtg/src/DeckMetaData.cpp new file mode 100644 index 000000000..79b42d69a --- /dev/null +++ b/projects/mtg/src/DeckMetaData.cpp @@ -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::iterator it = values.begin(); it != values.end(); ++it){ + SAFE_DELETE(it->second); + } + values.clear(); +} + +void DeckMetaDataList::invalidate(string filename){ + map::iterator it = values.find(filename); + if (it !=values.end()){ + SAFE_DELETE(it->second); + values.erase(it); + } +} + +DeckMetaData * DeckMetaDataList::get(string filename){ + map::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 +} \ No newline at end of file diff --git a/projects/mtg/src/GameApp.cpp b/projects/mtg/src/GameApp.cpp index 86d4acf03..db0472798 100644 --- a/projects/mtg/src/GameApp.cpp +++ b/projects/mtg/src/GameApp.cpp @@ -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(); diff --git a/projects/mtg/src/GameState.cpp b/projects/mtg/src/GameState.cpp index a05738d63..41f1b95e0 100644 --- a/projects/mtg/src/GameState.cpp +++ b/projects/mtg/src/GameState.cpp @@ -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; diff --git a/projects/mtg/src/GameStateDuel.cpp b/projects/mtg/src/GameStateDuel.cpp index 33c2303b8..105059462 100644 --- a/projects/mtg/src/GameStateDuel.cpp +++ b/projects/mtg/src/GameStateDuel.cpp @@ -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)); diff --git a/projects/mtg/template.vcproj b/projects/mtg/template.vcproj index cfd1715ed..ef83b2e8a 100644 --- a/projects/mtg/template.vcproj +++ b/projects/mtg/template.vcproj @@ -386,6 +386,10 @@ RelativePath=".\src\DeckDataWrapper.cpp" > + + @@ -801,6 +805,10 @@ RelativePath=".\include\DeckDataWrapper.h" > + +