diff --git a/projects/mtg/include/DeckManager.h b/projects/mtg/include/DeckManager.h index dc1f6fc38..ef00ea99b 100644 --- a/projects/mtg/include/DeckManager.h +++ b/projects/mtg/include/DeckManager.h @@ -7,8 +7,13 @@ using namespace std; class DeckManager { -protected: - static DeckManager * mInstance; +private: + static bool instanceFlag; + static DeckManager *mInstance; + DeckManager() + { + //private constructor + } public: @@ -23,6 +28,10 @@ public: static DeckManager * GetInstance(); static void EndInstance(); - DeckManager(); - ~DeckManager(); + + ~DeckManager() + { + instanceFlag = false; + } + }; diff --git a/projects/mtg/src/DeckManager.cpp b/projects/mtg/src/DeckManager.cpp index 4b0eb60a2..723feb7c7 100644 --- a/projects/mtg/src/DeckManager.cpp +++ b/projects/mtg/src/DeckManager.cpp @@ -1,21 +1,13 @@ #include "../include/DeckManager.h" #include -DeckManager::DeckManager() -{ -} - -DeckManager::~DeckManager() -{ -} - void DeckManager::updateMetaDataList( vector * refList, bool isAI ) { if (refList) { vector * inputList = isAI? &aiDeckOrderList : &playerDeckOrderList; inputList->clear(); - inputList->assign( refList->begin(), refList->end()); + inputList->assign( refList->begin(), refList -> end() ); } } @@ -32,16 +24,26 @@ vector * DeckManager::getAIDeckOrderList() DeckManager * DeckManager::mInstance = NULL; +bool DeckManager::instanceFlag = false; + +void DeckManager::EndInstance() +{ + if (mInstance) + { + mInstance->aiDeckOrderList.clear(); + mInstance->playerDeckOrderList.clear(); + SAFE_DELETE( mInstance ); + } +} DeckManager* DeckManager::GetInstance() { - if ( mInstance == NULL ) + if ( !instanceFlag ) + { mInstance = new DeckManager(); + instanceFlag = true; + } + return mInstance; } - -void DeckManager::EndInstance() -{ - SAFE_DELETE(mInstance); -} diff --git a/projects/mtg/src/GameStateDuel.cpp b/projects/mtg/src/GameStateDuel.cpp index fbbe8d0cd..4f70cd819 100644 --- a/projects/mtg/src/GameStateDuel.cpp +++ b/projects/mtg/src/GameStateDuel.cpp @@ -201,6 +201,7 @@ void GameStateDuel::End() JRenderer::GetInstance()->EnableVSync(false); if (mPlayers[0] && mPlayers[1]) mPlayers[0]->End(); GameObserver::EndInstance(); + DeckManager::EndInstance(); game = NULL; premadeDeck = false; @@ -243,6 +244,7 @@ void GameStateDuel::ensureOpponentMenu(){ vector opponentDeckList = fillDeckMenu( opponentMenu, RESPATH"/ai/baka", "ai_baka", mPlayers[0]); deckManager->updateMetaDataList(&opponentDeckList, true); opponentMenu->Add( MENUITEM_CANCEL, "Cancel", "Choose a different player deck"); + opponentDeckList.clear(); } }