Added HTR18, HT19, AFR and AFC sets, added/fixed old primitives, improved Android dowloader, fixed it lang file, fixed IMA rarities, fixed order index of some old sets, added all features from D&D such as Dungeon Cards and Dice (d20,d10, adn so on).

This commit is contained in:
Vittorio Alfieri
2021-07-17 02:33:08 +02:00
parent d98956a1b8
commit 31ab9edc81
43 changed files with 9693 additions and 1740 deletions
+161 -25
View File
@@ -39,6 +39,7 @@ GameStateDeckViewer::GameStateDeckViewer(GameApp* parent) :
myDeck = NULL;
mySideboard = NULL;
myCommandZone = NULL;
myDungeonZone = NULL;
filterMenu = NULL;
source = NULL;
hudAlpha = 0;
@@ -50,7 +51,7 @@ GameStateDeckViewer::GameStateDeckViewer(GameApp* parent) :
statsPrevButton = NEW InteractiveButton(NULL, kPrevStatsButtonId, Fonts::MAIN_FONT, "Stats", SCREEN_WIDTH_F - 35, SCREEN_HEIGHT_F - 20, JGE_BTN_PREV);
toggleDeckButton = NEW InteractiveButton(NULL, kToggleDeckActionId, Fonts::MAIN_FONT, "View Deck", 10, SCREEN_HEIGHT_F - 20, JGE_BTN_PRI);
sellCardButton = NEW InteractiveButton(NULL, kSellCardActionId, Fonts::MAIN_FONT, "Sell Card", (SCREEN_WIDTH_F/ 2) - 125, SCREEN_HEIGHT_F - 20, JGE_BTN_SEC);
sb_cmd_Button = NEW InteractiveButton(NULL, kSBActionId, Fonts::MAIN_FONT, "View SB/CMD", (SCREEN_WIDTH_F/ 2) - 35, SCREEN_HEIGHT_F - 20, JGE_BTN_SOUND);
sb_cmd_dng_Button = NEW InteractiveButton(NULL, kSBActionId, Fonts::MAIN_FONT, "View SB", (SCREEN_WIDTH_F/ 2) - 35, SCREEN_HEIGHT_F - 20, JGE_BTN_SOUND);
filterButton = NEW InteractiveButton(NULL, kFilterButtonId, Fonts::MAIN_FONT, "Filter", (SCREEN_WIDTH_F - 116), SCREEN_HEIGHT_F - 20, JGE_BTN_CTRL);
//TODO: Check if that button is available:
toggleViewButton = NEW InteractiveButton(NULL, kSwitchViewButton, Fonts::MAIN_FONT, "Grid", (SCREEN_WIDTH_F/ 2) + 50, SCREEN_HEIGHT_F - 20, JGE_BTN_MAX);
@@ -65,7 +66,7 @@ GameStateDeckViewer::~GameStateDeckViewer()
SAFE_DELETE(bgMusic);
SAFE_DELETE(toggleDeckButton);
SAFE_DELETE(sellCardButton);
SAFE_DELETE(sb_cmd_Button);
SAFE_DELETE(sb_cmd_dng_Button);
SAFE_DELETE(statsPrevButton);
SAFE_DELETE(filterButton);
SAFE_DELETE(toggleViewButton);
@@ -90,6 +91,11 @@ GameStateDeckViewer::~GameStateDeckViewer()
SAFE_DELETE(myCommandZone->parent);
SAFE_DELETE(myCommandZone);
}
if (myDungeonZone)
{
SAFE_DELETE(myDungeonZone->parent);
SAFE_DELETE(myDungeonZone);
}
if (myCollection)
{
SAFE_DELETE(myCollection->parent);
@@ -125,7 +131,7 @@ void GameStateDeckViewer::updateFilters()
void GameStateDeckViewer::toggleCollection()
{
if(mView->deck() == mySideboard || mView->deck() == myCommandZone)
if(mView->deck() == mySideboard || mView->deck() == myCommandZone || mView->deck() == myDungeonZone)
return;
if (mView->deck() == myCollection)
@@ -142,7 +148,7 @@ void GameStateDeckViewer::toggleCollection()
updateFilters();
}
void GameStateDeckViewer::toggleSB_CMD()
void GameStateDeckViewer::toggleSB_CMD_DNG()
{
if(mView->deck() == myDeck)
return;
@@ -150,17 +156,22 @@ void GameStateDeckViewer::toggleSB_CMD()
if (mView->deck() == myCollection)
{
mView->SetDeck(mySideboard);
sb_cmd_Button->setText("View CMD");
sb_cmd_dng_Button->setText("View CMD");
}
else if (mView->deck() == mySideboard)
{
mView->SetDeck(myCommandZone);
sb_cmd_Button->setText("View Coll.");
sb_cmd_dng_Button->setText("View DNG");
}
else if (mView->deck() == myCommandZone)
{
mView->SetDeck(myDungeonZone);
sb_cmd_dng_Button->setText("View Coll.");
}
else
{
mView->SetDeck(myCollection);
sb_cmd_Button->setText("View SB/CMD");
sb_cmd_dng_Button->setText("View SB");
}
//source->swapSrc();
//updateFilters();
@@ -210,6 +221,7 @@ void GameStateDeckViewer::Start()
myDeck = NULL;
mySideboard = NULL;
myCommandZone = NULL;
myDungeonZone = NULL;
mStage = STAGE_WELCOME;
last_user_activity = NO_USER_ACTIVITY_HELP_DELAY + 1;
@@ -282,6 +294,11 @@ void GameStateDeckViewer::End()
SAFE_DELETE(myCommandZone->parent);
SAFE_DELETE(myCommandZone);
}
if (myDungeonZone)
{
SAFE_DELETE(myDungeonZone->parent);
SAFE_DELETE(myDungeonZone);
}
SAFE_DELETE(pricelist);
SAFE_DELETE(playerdata);
SAFE_DELETE(filterMenu);
@@ -354,6 +371,28 @@ void GameStateDeckViewer::CMDaddRemove(MTGCard * card)
mView->reloadIndexes();
}
void GameStateDeckViewer::DNGaddRemove(MTGCard * card)
{
if (!card) return;
if ((card->getRarity() != Constants::RARITY_T) || (card->getId() < 1)) return;
if (mView->deck()->Remove(card, 1, (mView->deck() == myDungeonZone)))
{
if (mView->deck() == myCollection)
{
myDungeonZone->Add(card);
myDungeonZone->Sort(WSrcCards::SORT_ALPHA);
}
else
{
myCollection->Add(card);
}
}
myCollection->validate();
myDungeonZone->validate();
mStatsWrapper->needUpdate = true;
mView->reloadIndexes();
}
void GameStateDeckViewer::choiceAddRemove(MTGCard * card)
{
if (!card) return;
@@ -366,19 +405,37 @@ void GameStateDeckViewer::choiceAddRemove(MTGCard * card)
if (mView->deck() == myCollection)
{
sbMenu = NEW SimpleMenu(JGE::GetInstance(), WResourceManager::Instance(), SBMENU_CHOICE, this, Fonts::MAIN_FONT, menuXOffset, menuYOffset, "Add/Remove Cards");
sbMenu->Add(SBMENU_ADD_NORMAL, "Add to Deck");
sbMenu->Add(SBMENU_ADD_SB, "Add to Sideboard");
if(card->data->hasType("Legendary") && (card->data->hasType("Creature") || card->data->basicAbilities[Constants::CANBECOMMANDER]))
sbMenu->Add(SBMENU_ADD_CMD, "Choose as Commander");
if(!card->data->hasType("Dungeon")){
sbMenu->Add(SBMENU_ADD_NORMAL, "Add to Deck");
sbMenu->Add(SBMENU_ADD_SB, "Add to Sideboard");
if(card->data->hasType("Legendary") && (card->data->hasType("Creature") || card->data->basicAbilities[Constants::CANBECOMMANDER]))
sbMenu->Add(SBMENU_ADD_CMD, "Choose as Commander");
} else
sbMenu->Add(SBMENU_ADD_DNG, "Add to Dungeons");
sbMenu->Add(SBMENU_ADD_CANCEL, "Cancel");
}
else
else if (mView->deck() == myCommandZone)
{
sbMenu = NEW SimpleMenu(JGE::GetInstance(), WResourceManager::Instance(), SBMENU_CHOICE, this, Fonts::MAIN_FONT, menuXOffset, menuYOffset, "Add/Remove Cards");
sbMenu->Add(SBMENU_ADD_CMD, "Remove as Commander");
sbMenu->Add(SBMENU_ADD_CANCEL, "Cancel");
}
else if (mView->deck() == mySideboard)
{
sbMenu = NEW SimpleMenu(JGE::GetInstance(), WResourceManager::Instance(), SBMENU_CHOICE, this, Fonts::MAIN_FONT, menuXOffset, menuYOffset, "Add/Remove Cards");
sbMenu->Add(SBMENU_ADD_SB, "Remove from Sideboard");
sbMenu->Add(SBMENU_ADD_CANCEL, "Cancel");
}
else if (mView->deck() == myDungeonZone)
{
sbMenu = NEW SimpleMenu(JGE::GetInstance(), WResourceManager::Instance(), SBMENU_CHOICE, this, Fonts::MAIN_FONT, menuXOffset, menuYOffset, "Add/Remove Cards");
sbMenu->Add(SBMENU_ADD_DNG, "Remove from Dungeons");
sbMenu->Add(SBMENU_ADD_CANCEL, "Cancel");
}
else if (mView->deck() == myDeck)
{
sbMenu = NEW SimpleMenu(JGE::GetInstance(), WResourceManager::Instance(), SBMENU_CHOICE, this, Fonts::MAIN_FONT, menuXOffset, menuYOffset, "Add/Remove Cards");
sbMenu->Add(SBMENU_ADD_NORMAL, "Remove Card");
//sbMenu->Add(SBMENU_ADD_SB, "Add to Sideboard");
if(card->data->hasType("Legendary") && (card->data->hasType("Creature") || card->data->basicAbilities[Constants::CANBECOMMANDER]))
sbMenu->Add(SBMENU_ADD_CMD, "Choose as Commander");
sbMenu->Add(SBMENU_ADD_CANCEL, "Cancel");
}
}
@@ -425,6 +482,26 @@ void GameStateDeckViewer::insertCommandZone()
}
}
void GameStateDeckViewer::insertDungeonZone()
{
if(myDungeonZone->getCount())
{
vector<string> newDNG;
for (int i = 0; i < myDungeonZone->Size(true); i++)
{
MTGCard * current = myDungeonZone->getCard(i, true);
int howmanyinDeck = myDungeonZone->count(current);
for (int i = 0; i < howmanyinDeck; i++)
{
stringstream cid;
cid << current->getMTGId();
newDNG.push_back(cid.str());
}
}
myDeck->parent->replaceDNG(newDNG);
}
}
void GameStateDeckViewer::saveDeck()
{
//update the corresponding meta data object
@@ -436,6 +513,8 @@ void GameStateDeckViewer::saveDeck()
insertSideBoard();
//insert commanders to mydeck parents
insertCommandZone();
//insert dungeons to mydeck parents
insertDungeonZone();
//save deck
myDeck->save();
playerdata->save();
@@ -491,7 +570,7 @@ bool GameStateDeckViewer::userPressedButton()
{
return ((toggleDeckButton->ButtonPressed())
|| (sellCardButton->ButtonPressed())
|| (sb_cmd_Button->ButtonPressed())
|| (sb_cmd_dng_Button->ButtonPressed())
|| (statsPrevButton->ButtonPressed())
|| (filterButton->ButtonPressed())
|| (toggleViewButton->ButtonPressed())
@@ -506,7 +585,7 @@ void GameStateDeckViewer::setButtonState(bool state)
{
toggleDeckButton->setIsSelectionValid(state);
sellCardButton->setIsSelectionValid(state);
sb_cmd_Button->setIsSelectionValid(state);
sb_cmd_dng_Button->setIsSelectionValid(state);
statsPrevButton->setIsSelectionValid(state);
filterButton->setIsSelectionValid(state);
toggleViewButton->setIsSelectionValid(state);
@@ -518,12 +597,12 @@ void GameStateDeckViewer::setButtonState(bool state)
void GameStateDeckViewer::RenderButtons()
{
if(mView->deck() != mySideboard && mView->deck() != myCommandZone)
if(mView->deck() != mySideboard && mView->deck() != myCommandZone && mView->deck() != myDungeonZone)
toggleDeckButton->Render();
sellCardButton->Render();
if(mView->deck() != myDeck)
sb_cmd_Button->Render();
if(mView->deck() != mySideboard && mView->deck() != myCommandZone)
sb_cmd_dng_Button->Render();
if(mView->deck() != mySideboard && mView->deck() != myCommandZone && mView->deck() != myDungeonZone)
filterButton->Render();
statsPrevButton->Render();
toggleViewButton->Render();
@@ -631,7 +710,7 @@ void GameStateDeckViewer::Update(float dt)
if (last_user_activity > 0.2)
{
last_user_activity = 0;
toggleSB_CMD();
toggleSB_CMD_DNG();
}
break;
case JGE_BTN_PRI:
@@ -685,9 +764,9 @@ void GameStateDeckViewer::Update(float dt)
break;
case JGE_BTN_MENU:
if(mView->deck() == mySideboard || mView->deck() == myCommandZone)
if(mView->deck() == mySideboard || mView->deck() == myCommandZone || mView->deck() == myDungeonZone)
{
toggleSB_CMD();
toggleSB_CMD_DNG();
}
else
{
@@ -696,7 +775,7 @@ void GameStateDeckViewer::Update(float dt)
}
break;
case JGE_BTN_CTRL:
if (mView->deck() == mySideboard || mView->deck() == myCommandZone)
if (mView->deck() == mySideboard || mView->deck() == myCommandZone || mView->deck() == myDungeonZone)
break;//SB is for viewing add or remove only
else if(!mView->ButtonPressed(JGE_BTN_CTRL))
{
@@ -985,7 +1064,8 @@ void GameStateDeckViewer::renderOnScreenMenu()
int value = myDeck->getCount(WSrcDeck::UNFILTERED_COPIES);
int sb_value = mySideboard->getCount(WSrcDeck::UNFILTERED_COPIES);
int cmd_value = myCommandZone->getCount(WSrcDeck::UNFILTERED_COPIES);
sprintf(buffer, _("Your Deck: %i cards.\nSideboard: %i cards.\nCommanders: %i cards").c_str(), value, sb_value,cmd_value);
int dng_value = myDungeonZone->getCount(WSrcDeck::UNFILTERED_COPIES);
sprintf(buffer, _("Your Deck: %i cards.\nSideboard: %i cards.\nCommanders: %i cards.\nDungeons: %i cards").c_str(), value, sb_value,cmd_value,dng_value);
font->DrawString(buffer, SCREEN_WIDTH - 200 + rightTransition, SCREEN_HEIGHT / 2 + 15);
for (int j = 0; j < Constants::NB_Colors; j++)
@@ -1625,6 +1705,12 @@ int GameStateDeckViewer::loadDeck(int deckid)
SAFE_DELETE(myCommandZone->parent);
SAFE_DELETE(myCommandZone);
}
//dng
if (myDungeonZone)
{
SAFE_DELETE(myDungeonZone->parent);
SAFE_DELETE(myDungeonZone);
}
//temp deck for sb?
MTGDeck * sbtempDeck = NEW MTGDeck(MTGCollection());
if(myDeck->parent)
@@ -1707,10 +1793,52 @@ int GameStateDeckViewer::loadDeck(int deckid)
myCollection->validate();
}
//endcmd
//temp deck for dng?
MTGDeck * dngtempDeck = NEW MTGDeck(MTGCollection());
if(myDeck->parent)
{//add cards from commanders lists
if(myDeck->parent->DungeonZone.size())
{
for(unsigned int j = 0; j < myDeck->parent->DungeonZone.size(); j++)
{
string cardID = myDeck->parent->DungeonZone[j];
dngtempDeck->add(atoi(cardID.c_str()));
}
}
}
myDungeonZone = NEW DeckDataWrapper(dngtempDeck);
for (int i = 0; i < myDungeonZone->Size(true); i++)
{
MTGCard * current = myDungeonZone->getCard(i, true);
int howmanyinDeck = myDungeonZone->count(current);
for (int i = myCollection->count(current); i < howmanyinDeck; i++)
{
cPure = false;
if (cheatmode)
{ //Are we cheating?
playerdata->collection->add(current); //Yup, add it to collection permanently.
myCollection->Add(current);
}
else
{
myDungeonZone->Remove(current,howmanyinDeck-i); //Nope. Remove it from sb.
break;
}
}
myCollection->Remove(current, myDungeonZone->count(current));
}
if (!cPure)
{
myDungeonZone->validate();
myCollection->validate();
}
//enddng
myDeck->Sort(WSrcCards::SORT_ALPHA);
mySideboard->Sort(WSrcCards::SORT_ALPHA);
myCommandZone->Sort(WSrcCards::SORT_ALPHA);
myDungeonZone->Sort(WSrcCards::SORT_ALPHA);
SAFE_DELETE(filterMenu);
rebuildFilters();
mView->reloadIndexes();
@@ -1877,6 +2005,14 @@ void GameStateDeckViewer::ButtonPressed(int controllerId, int controlId)
sbMenu->Close();
break;
}
case SBMENU_ADD_DNG:
{
MTGCard * card = mView->getActiveCard();
if (card)
DNGaddRemove(card);
sbMenu->Close();
break;
}
case SBMENU_ADD_CANCEL:
sbMenu->Close();
break;