From f1ee227b8450ab7bd96d4e2178c38baf3c1b76ff Mon Sep 17 00:00:00 2001 From: Vittorio Alfieri Date: Fri, 5 Feb 2021 11:25:04 +0100 Subject: [PATCH] Fixed deck selection in Deck Editor Menu (now it shows both Classical Decks and Commander Decks using a CMD suffix) and fixed deck selection in Demo Mode (now it filters decks according to game mode as it happens in normal game mode). --- projects/mtg/include/GameState.h | 6 +++--- projects/mtg/src/DeckMenu.cpp | 5 ++++- projects/mtg/src/GameState.cpp | 8 ++++---- projects/mtg/src/GameStateDeckViewer.cpp | 2 +- projects/mtg/src/GameStateDuel.cpp | 6 +++--- 5 files changed, 15 insertions(+), 12 deletions(-) diff --git a/projects/mtg/include/GameState.h b/projects/mtg/include/GameState.h index 12fe48024..4187ba456 100644 --- a/projects/mtg/include/GameState.h +++ b/projects/mtg/include/GameState.h @@ -73,11 +73,11 @@ public: // it makes it easier to manipulate the deck information menus. // generate the Deck Meta Data and build the menu items of the menu given - // Will display up to maxDecks if maxDecks is non 0,all decks in path otherwise and it will show or not commander decks according to the current game type - static vector fillDeckMenu(DeckMenu * _menu, const string& path, const string& smallDeckPrefix = "", Player * statsPlayer = NULL, int maxDecks = 0, GameType type = GAME_TYPE_CLASSIC); + // Will display up to maxDecks if maxDecks is non 0, all decks in path otherwise and it will show or not commander decks according to the current game type or according to "showall" option (e.g. DeckEditorMenu) + static vector fillDeckMenu(DeckMenu * _menu, const string& path, const string& smallDeckPrefix = "", Player * statsPlayer = NULL, int maxDecks = 0, GameType type = GAME_TYPE_CLASSIC, bool showall = false); // build a vector of decks with the information passsed in. - static vector BuildDeckList(const string& path, const string& smallDeckPrefix = "", Player * statsPlayer = NULL, int maxDecks = 0, GameType type = GAME_TYPE_CLASSIC); + static vector BuildDeckList(const string& path, const string& smallDeckPrefix = "", Player * statsPlayer = NULL, int maxDecks = 0, GameType type = GAME_TYPE_CLASSIC, bool showall = false); // build menu items based on the vector static void renderDeckMenu(SimpleMenu * _menu, const vector& deckMetaDataList); diff --git a/projects/mtg/src/DeckMenu.cpp b/projects/mtg/src/DeckMenu.cpp index 44a343ee5..ea92111f8 100644 --- a/projects/mtg/src/DeckMenu.cpp +++ b/projects/mtg/src/DeckMenu.cpp @@ -445,7 +445,10 @@ void DeckMenu::Add(int id, const string& text, const string& desc, bool forceFoc deckDescription = it->second; else deckDescription = deckMetaData ? deckMetaData->getDescription() : desc; - + + if(deckMetaData && deckMetaData->isCommanderDeck) + deckDescription = deckDescription + " (" + _("CMD") + ")"; // It will show a CMD suffix for Commander Decks. + menuItem->setDescription(deckDescription); JGuiController::Add(menuItem); diff --git a/projects/mtg/src/GameState.cpp b/projects/mtg/src/GameState.cpp index 1a82a18fc..42fae9c94 100644 --- a/projects/mtg/src/GameState.cpp +++ b/projects/mtg/src/GameState.cpp @@ -15,16 +15,16 @@ // sortByName to do the sorting. This was done since the menu item display is done in insertion order. vector GameState::fillDeckMenu(DeckMenu * _menu, const string& path, const string& smallDeckPrefix, - Player * statsPlayer, int maxDecks, GameType type) + Player * statsPlayer, int maxDecks, GameType type, bool showall) { - vector deckMetaDataVector = BuildDeckList(path, smallDeckPrefix, statsPlayer, maxDecks, type); + vector deckMetaDataVector = BuildDeckList(path, smallDeckPrefix, statsPlayer, maxDecks, type, showall); renderDeckMenu(_menu, deckMetaDataVector); return deckMetaDataVector; } -vector GameState::BuildDeckList(const string& path, const string& smallDeckPrefix, Player * statsPlayer, int maxDecks, GameType type) +vector GameState::BuildDeckList(const string& path, const string& smallDeckPrefix, Player * statsPlayer, int maxDecks, GameType type, bool showall) { vector retList; @@ -42,7 +42,7 @@ vector GameState::BuildDeckList(const string& path, const string if (meta) { found = 1; - if((meta->isCommanderDeck && type != GAME_TYPE_COMMANDER) || (!meta->isCommanderDeck && type == GAME_TYPE_COMMANDER)){ + if(!showall && ((meta->isCommanderDeck && type != GAME_TYPE_COMMANDER) || (!meta->isCommanderDeck && type == GAME_TYPE_COMMANDER))){ meta = NULL; // It will show commander decks only in commander mode and it will hide them in other modes. nbDecks++; continue; diff --git a/projects/mtg/src/GameStateDeckViewer.cpp b/projects/mtg/src/GameStateDeckViewer.cpp index 7f7e85d5d..3d3a4456d 100644 --- a/projects/mtg/src/GameStateDeckViewer.cpp +++ b/projects/mtg/src/GameStateDeckViewer.cpp @@ -172,7 +172,7 @@ void GameStateDeckViewer::updateDecks() { SAFE_DELETE(welcome_menu); welcome_menu = NEW DeckEditorMenu(MENU_DECK_SELECTION, this, Fonts::OPTION_FONT, "Choose Deck To Edit"); - vector playerDeckList = fillDeckMenu(welcome_menu, options.profileFile()); + vector playerDeckList = fillDeckMenu(welcome_menu, options.profileFile(), "", NULL, 0, GAME_TYPE_CLASSIC, true); // Show all decks in deck editor menu... newDeckname = ""; welcome_menu->Add(MENU_ITEM_NEW_DECK, "--NEW--"); diff --git a/projects/mtg/src/GameStateDuel.cpp b/projects/mtg/src/GameStateDuel.cpp index 04415e9ac..9b2d0af8e 100644 --- a/projects/mtg/src/GameStateDuel.cpp +++ b/projects/mtg/src/GameStateDuel.cpp @@ -274,7 +274,7 @@ void GameStateDuel::Start() deckmenu->Add(MENUITEM_NEW_DECK, _("Create your Deck!").c_str(), desc); } premadeDeck = true; - fillDeckMenu(deckmenu, _("player/premade").c_str()); + fillDeckMenu(deckmenu, _("player/premade").c_str(), "", NULL, 0, mParent->gameType); } else if (gModRules.general.hasDeckEditor()) { @@ -299,9 +299,9 @@ void GameStateDuel::Start() DeckManager *deckManager = DeckManager::GetInstance(); vector playerDeckList; - playerDeckList = fillDeckMenu(deckmenu, "ai/baka","ai_baka",NULL,nmbDecks); + playerDeckList = fillDeckMenu(deckmenu, "ai/baka", "ai_baka", NULL, nmbDecks, mParent->gameType); //printf("nmbDecks %i\n",playerDeckList.size()); - renderDeckMenu(deckmenu, playerDeckList); + //renderDeckMenu(deckmenu, playerDeckList); // save the changes to the player deck list maintained in DeckManager deckManager->updateMetaDataList(&playerDeckList, true); //save the real number of available decks