From dd163c88073e880fb5d832c80eb836ad7639701c Mon Sep 17 00:00:00 2001 From: "techdragon.nguyen@gmail.com" Date: Wed, 3 Nov 2010 16:49:39 +0000 Subject: [PATCH] ***Note*** please copy "DeckEditorMenuBackdrop.png" into your PSP folder. Otherwise you will have a crash when you start up! ChangesLog: minor refactoring of DeckMenu added a new DeckEditorMenu which is derived from DeckMenu. This customizes the deck editor menus with the exception of the confirmation screens (yes/no) Still more work to be done to round out some font issues. TODO: put more information text in bottom row of menu. reorganize statistical data to allow more info to be shown. --- projects/mtg/Makefile | 2 +- .../Res/graphics/DeckEditorMenuBackdrop.png | Bin 0 -> 52049 bytes projects/mtg/include/DeckEditorMenu.h | 11 +++ projects/mtg/include/DeckMenu.h | 14 +-- projects/mtg/include/GameStateDeckViewer.h | 6 +- projects/mtg/src/DeckEditorMenu.cpp | 46 ++++++++++ projects/mtg/src/DeckMenu.cpp | 80 +++++++++--------- projects/mtg/src/GameApp.cpp | 4 +- projects/mtg/src/GameStateDeckViewer.cpp | 43 +++++----- projects/mtg/template.vcproj | 8 ++ 10 files changed, 140 insertions(+), 74 deletions(-) create mode 100644 projects/mtg/bin/Res/graphics/DeckEditorMenuBackdrop.png create mode 100644 projects/mtg/include/DeckEditorMenu.h create mode 100644 projects/mtg/src/DeckEditorMenu.cpp diff --git a/projects/mtg/Makefile b/projects/mtg/Makefile index 7d17eb833..9222bd351 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/CardGui.o objs/CardDescriptor.o objs/CardDisplay.o objs/CardEffect.o objs/CardPrimitive.o objs/CardSelector.o objs/CardSelectorSingleton.o objs/Counters.o objs/Credits.o objs/Damage.o objs/DamagerDamaged.o objs/DeckDataWrapper.o objs/DeckMenu.o objs/DeckMenuItem.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/DeckManager.o objs/GameStateMenu.o objs/GameStateOptions.o objs/GameStateShop.o objs/GameStateStory.o objs/GameStateTransitions.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/MTGPack.o objs/MTGRules.o objs/Navigator.o objs/OptionItem.o objs/PhaseRing.o objs/Player.o objs/PlayerData.o objs/PlayGuiObjectController.o objs/PlayGuiObject.o objs/Pos.o objs/PrecompiledHeader.o objs/PriceList.o objs/ReplacementEffects.o objs/Rules.o objs/SimpleMenu.o objs/SimpleMenuItem.o objs/SimplePad.o objs/StoryFlow.o objs/StyleManager.o objs/Subtypes.o objs/TargetChooser.o objs/TargetsList.o objs/TextScroller.o objs/ThisDescriptor.o objs/Token.o objs/Translate.o objs/TranslateKeys.o objs/Trash.o objs/utils.o objs/WEvent.o objs/WResourceManager.o objs/WCachedResource.o objs/WDataSrc.o objs/WGui.o objs/WFilter.o objs/Tasks.o objs/WFont.o objs/AllAbilities.o +OBJS = objs/ActionElement.o objs/ActionLayer.o objs/ActionStack.o objs/AIMomirPlayer.o objs/AIPlayer.o objs/AIStats.o objs/AllAbilities.o objs/CardGui.o objs/CardDescriptor.o objs/CardDisplay.o objs/CardEffect.o objs/CardPrimitive.o objs/CardSelector.o objs/CardSelectorSingleton.o objs/Counters.o objs/Credits.o objs/Damage.o objs/DamagerDamaged.o objs/DeckDataWrapper.o objs/DeckEditorMenu.o objs/DeckMenu.o objs/DeckMenuItem.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/DeckManager.o objs/GameStateMenu.o objs/GameStateOptions.o objs/GameStateShop.o objs/GameStateStory.o objs/GameStateTransitions.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/MTGPack.o objs/MTGRules.o objs/Navigator.o objs/OptionItem.o objs/PhaseRing.o objs/Player.o objs/PlayerData.o objs/PlayGuiObjectController.o objs/PlayGuiObject.o objs/Pos.o objs/PrecompiledHeader.o objs/PriceList.o objs/ReplacementEffects.o objs/Rules.o objs/SimpleMenu.o objs/SimpleMenuItem.o objs/SimplePad.o objs/StoryFlow.o objs/StyleManager.o objs/Subtypes.o objs/TargetChooser.o objs/TargetsList.o objs/TextScroller.o objs/ThisDescriptor.o objs/Token.o objs/Translate.o objs/TranslateKeys.o objs/Trash.o objs/utils.o objs/WEvent.o objs/WResourceManager.o objs/WCachedResource.o objs/WDataSrc.o objs/WGui.o objs/WFilter.o objs/Tasks.o objs/WFont.o DEPS = $(patsubst objs/%.o, deps/%.d, $(OBJS)) RESULT = $(shell psp-config --psp-prefix 2> Makefile.cache) diff --git a/projects/mtg/bin/Res/graphics/DeckEditorMenuBackdrop.png b/projects/mtg/bin/Res/graphics/DeckEditorMenuBackdrop.png new file mode 100644 index 0000000000000000000000000000000000000000..576a3c461fda34219d4e9d961fda740fc9aa3365 GIT binary patch literal 52049 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

>Se)cIJ+4 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 #include "GameState.h" +#include "DeckEditorMenu.h" #include "SimpleMenu.h" -#include "DeckMenu.h" #include "WResourceManager.h" #include "CardGui.h" #include "GameOptions.h" @@ -146,9 +146,9 @@ private: WGuiFilters * filterMenu; WSrcDeckViewer * source; - SimpleMenu * welcome_menu; + DeckEditorMenu * welcome_menu; SimpleMenu * subMenu; - SimpleMenu * menu; + DeckEditorMenu * menu; PriceList* pricelist; PlayerData * playerdata; int price; diff --git a/projects/mtg/src/DeckEditorMenu.cpp b/projects/mtg/src/DeckEditorMenu.cpp new file mode 100644 index 000000000..c7eee7bfd --- /dev/null +++ b/projects/mtg/src/DeckEditorMenu.cpp @@ -0,0 +1,46 @@ +#include "PrecompiledHeader.h" +#include "DeckEditorMenu.h" +#include "JTypes.h" + +DeckEditorMenu::DeckEditorMenu(int id, JGuiListener* listener, int fontId, const char * _title) +: DeckMenu( id, listener, fontId, _title ) +{ + backgroundName = "DeckEditorMenuBackdrop"; + + mX = 120; + mY = 70; + + titleX = 110; // center point in title box + titleY = 34; + titleWidth = 180; // width of inner box of title + + descX = 275; + descY = 80; + descHeight = 154; + descWidth = 175; + + statsX = 282; + statsY = 12; + statsHeight = 40; + statsWidth = 180; + + avatarX = 222; + avatarY = 8; + + int scrollerWidth = 80; + SAFE_DELETE(scroller); // need to delete the scroller init in the base class + scroller = NEW TextScroller(Fonts::MAIN_FONT, 40 , 230, scrollerWidth, 100, 1, 1); + +} + +void DeckEditorMenu::Render() +{ + JRenderer *r = JRenderer::GetInstance(); + r->FillRect(0,0,SCREEN_WIDTH,SCREEN_HEIGHT,ARGB(200,0,0,0)); + DeckMenu::Render(); +} + +DeckEditorMenu::~DeckEditorMenu() +{ + SAFE_DELETE( scroller ); +} diff --git a/projects/mtg/src/DeckMenu.cpp b/projects/mtg/src/DeckMenu.cpp index 7234d7705..fc58e6d9c 100644 --- a/projects/mtg/src/DeckMenu.cpp +++ b/projects/mtg/src/DeckMenu.cpp @@ -18,9 +18,7 @@ namespace const signed int kDescriptionHorizontalBoxPadding = 5; } -WFont* DeckMenu::titleFont = NULL; -hgeParticleSystem* DeckMenu::stars = NULL; -unsigned int DeckMenu::refCount = 0; +hgeParticleSystem* DeckMenu::stars = NULL; // Here comes the magic of jewel graphics PIXEL_TYPE DeckMenu::jewelGraphics[9] = {0x3FFFFFFF,0x63645AEA,0x610D0D98, 0x63645AEA,0xFF635AD5,0xFF110F67, @@ -39,8 +37,9 @@ DeckMenu::DeckMenu(int id, JGuiListener* listener, int fontId, const string _tit : JGuiController(id, listener), fontId(fontId) { - - mX = 120; + backgroundName = "DeckMenuBackdrop"; + + mX = 125; mY = 55; titleX = 125; // center point in title box @@ -74,11 +73,11 @@ fontId(fontId) { // we want to cap the deck titles to 15 characters to avoid overflowing deck names title = _(_title); + titleFont = resources.GetWFont(Fonts::MAGIC_FONT); startId = 0; selectionT = 0; timeOpen = 0; closed = false; - ++refCount; selectionTargetY = selectionY = kVerticalMargin; @@ -90,48 +89,51 @@ fontId(fontId) { } // TODO: Make this configurable, perhaps by user as part of the theme options. -JQuad* getBackground() +JQuad* DeckMenu::getBackground() { - resources.RetrieveTexture("DeckMenuBackdrop.png", RETRIEVE_MANAGE ); - return resources.RetrieveQuad("DeckMenuBackdrop.png", 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, "DualPaneBG" ); + ostringstream bgFilename; + bgFilename << backgroundName << ".png"; + resources.RetrieveTexture( bgFilename.str(), RETRIEVE_MANAGE ); + return resources.RetrieveQuad(bgFilename.str(), 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, backgroundName ); } +void DeckMenu::initMenuItems() +{ + float sY = mY + kVerticalMargin; + for (int i = startId; i < startId + mCount; ++i) { + DeckMenuItem *menuItem = static_cast (mObjects[i]); + int width = menuItem->GetWidth(); + if (mWidth < width) mWidth = width; + } + titleWidth = titleFont->GetStringWidth(title.c_str()); + if ((!title.empty()) && (mWidth < titleWidth)) + mWidth = titleWidth; + + mWidth += 2*kHorizontalMargin; + for (int i = startId; i < startId + mCount; ++i) { + float y = mY + kVerticalMargin + i * kLineHeight; + DeckMenuItem * currentMenuItem = static_cast(mObjects[i]); + currentMenuItem->Relocate( mX, y); + if (currentMenuItem->hasFocus()) + sY = y; + } + selectionTargetY = selectionY = sY; +} void DeckMenu::Render() { JRenderer * renderer = JRenderer::GetInstance(); - - WFont * titleFont = resources.GetWFont(Fonts::MAGIC_FONT); WFont * mFont = resources.GetWFont(fontId); + float height = mHeight; // figure out where to place the stars initially if (0 == mWidth) { - float sY = mY + kVerticalMargin; - for (int i = startId; i < startId + mCount; ++i) { - DeckMenuItem *menuItem = static_cast (mObjects[i]); - int width = menuItem->GetWidth(); - if (mWidth < width) mWidth = width; - } - if ((!title.empty()) && (mWidth < titleFont->GetStringWidth(title.c_str()))) - mWidth = titleFont->GetStringWidth(title.c_str()); - mWidth += 2*kHorizontalMargin; - for (int i = startId; i < startId + mCount; ++i) { - float y = mY + kVerticalMargin + i * kLineHeight; - DeckMenuItem * currentMenuItem = static_cast(mObjects[i]); - currentMenuItem->Relocate( mX, y); - - if (currentMenuItem->hasFocus()) sY = y; - } + initMenuItems(); stars->Fire(); - selectionTargetY = selectionY = sY; timeOpen = 0; } - - renderer->RenderQuad(getBackground(), 0, 0 ); - - float height = mHeight; if (timeOpen < 1) height *= timeOpen > 0 ? timeOpen : -timeOpen; renderer->SetTexBlend(BLEND_SRC_ALPHA, BLEND_ONE); @@ -149,9 +151,8 @@ void DeckMenu::Render() if ( currentMenuItem->imageFilename.size() > 0 ) { JQuad * quad = resources.RetrieveTempQuad( currentMenuItem->imageFilename, TEXTURE_SUB_AVATAR ); - if (quad) { - renderer->RenderQuad(quad, avatarX, avatarY); - } + if (quad) + renderer->RenderQuad(quad, avatarX, avatarY); } // fill in the description part of the screen string text = currentMenuItem->desc; @@ -174,13 +175,13 @@ void DeckMenu::Render() } currentMenuItem->RenderWithOffset(-kLineHeight*startId); } + + renderer->RenderQuad(getBackground(), 0, 0 ); + if (!title.empty()) titleFont->DrawString(title.c_str(), titleX, titleY, JGETEXT_CENTER); scroller->Render(); - renderer->RenderQuad(getBackground(), 0, 0 ); - - } } @@ -243,9 +244,10 @@ void DeckMenu::Close() void DeckMenu::destroy(){ SAFE_DELETE(DeckMenu::stars); -} + } DeckMenu::~DeckMenu() { SAFE_DELETE(scroller); + } \ No newline at end of file diff --git a/projects/mtg/src/GameApp.cpp b/projects/mtg/src/GameApp.cpp index 12b53b1ec..c114c6841 100644 --- a/projects/mtg/src/GameApp.cpp +++ b/projects/mtg/src/GameApp.cpp @@ -243,6 +243,7 @@ void GameApp::Destroy() WCFilterFactory::Destroy(); SimpleMenu::destroy(); DeckMenu::destroy(); + DeckEditorMenu::destroy(); options.theGame = NULL; LOG("==Destroying GameApp Successful=="); @@ -314,9 +315,6 @@ void GameApp::Update() mCurrentState->Start(); mNextState = NULL; } - - - } diff --git a/projects/mtg/src/GameStateDeckViewer.cpp b/projects/mtg/src/GameStateDeckViewer.cpp index 3b9ebe7de..141cb9735 100644 --- a/projects/mtg/src/GameStateDeckViewer.cpp +++ b/projects/mtg/src/GameStateDeckViewer.cpp @@ -16,7 +16,8 @@ #include "MTGCardInstance.h" #include "WFilter.h" #include "WDataSrc.h" - +#include "DeckEditorMenu.h" +#include "SimpleMenu.h" //!! helper function; this is probably handled somewhere in the code already. @@ -135,7 +136,7 @@ void GameStateDeckViewer::switchDisplay(){ void GameStateDeckViewer::updateDecks(){ SAFE_DELETE(welcome_menu); - welcome_menu = NEW SimpleMenu( MENU_DECK_SELECTION, this, Fonts::MENU_FONT, 20, 20); + welcome_menu = NEW DeckEditorMenu( MENU_DECK_SELECTION, this, Fonts::MAGIC_FONT, "Choose Deck To Edit"); DeckManager * deckManager = DeckManager::GetInstance(); vector playerDeckList = fillDeckMenu( welcome_menu,options.profileFile()); @@ -160,7 +161,6 @@ void GameStateDeckViewer::buildEditorMenu() if ( myDeck ) { aiDeckMsg - << "**** All changes are final ****" << endl << endl << "------- Deck Summary -----" << endl << "# Cards: "<< myDeck->getCount() << endl << "# Lands: "<< myDeck->getCount(Constants::MTG_COLOR_LAND ) << endl @@ -185,17 +185,17 @@ void GameStateDeckViewer::buildEditorMenu() if ( menu ) SAFE_DELETE( menu ); //Build menu. - - menu = NEW SimpleMenu( MENU_DECK_BUILDER, this, Fonts::MENU_FONT, 20, 40, "Deck Editor"); + JRenderer::GetInstance()->FillRoundRect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, 100, ARGB(0, 0, 0, 0) ); + menu = NEW DeckEditorMenu( MENU_DECK_BUILDER, this, Fonts::MAGIC_FONT, "Deck Editor"); menu->Add( MENU_ITEM_FILTER_BY, "Filter By...", "Narrow down the list of cards. "); - menu->Add( MENU_ITEM_SWITCH_DECKS_NO_SAVE, "Switch Decks", "Do not make any changes\nView another deck."); + menu->Add( MENU_ITEM_SWITCH_DECKS_NO_SAVE, "Switch Decks", "Do not make any changes.\nView another deck."); menu->Add( MENU_ITEM_SAVE_RENAME, "Rename Deck", "Change the name of the deck"); - menu->Add( MENU_ITEM_SAVE_RETURN_MAIN_MENU, "Save & Quit Editor", "Save the changes and return to the main menu"); + menu->Add( MENU_ITEM_SAVE_RETURN_MAIN_MENU, "Save & Quit Editor", "Save changes.\nReturn to the main menu"); menu->Add( MENU_ITEM_SAVE_AS_AI_DECK, "Save As AI Deck", aiDeckMsg.str() ); - menu->Add( MENU_ITEM_MAIN_MENU, "Main Menu", "Go back to the main menu.\nDo not make any changes to deck"); - menu->Add( MENU_ITEM_EDITOR_CANCEL, "Cancel"); - + menu->Add( MENU_ITEM_MAIN_MENU, "Quit Editor", "Do not make any changes to deck.\nReturn to the main menu."); + menu->Add( MENU_ITEM_EDITOR_CANCEL, "Cancel", "Close menu."); + } void GameStateDeckViewer::Start() @@ -220,9 +220,7 @@ void GameStateDeckViewer::Start() myCollection->Sort(WSrcCards::SORT_ALPHA); displayed_deck = myCollection; - buildEditorMenu(); - - //Icons + //Icons mIcons[Constants::MTG_COLOR_ARTIFACT] = resources.GetQuad("c_artifact"); mIcons[Constants::MTG_COLOR_LAND] = resources.GetQuad("c_land"); mIcons[Constants::MTG_COLOR_WHITE] = resources.GetQuad("c_white"); @@ -254,7 +252,7 @@ void GameStateDeckViewer::Start() loadIndexes(); mEngine->ResetInput(); JRenderer::GetInstance()->EnableVSync(true); -} + } void GameStateDeckViewer::End() @@ -413,7 +411,7 @@ void GameStateDeckViewer::Update(float dt) if (card && displayed_deck->count(card)){ price = pricelist->getSellPrice(card->getMTGId()); sprintf(buffer,"%s : %i %s",_(card->data->getName()).c_str(),price,_("credits").c_str()); - subMenu = NEW SimpleMenu( MENU_CARD_PURCHASE, this, Fonts::MAIN_FONT,SCREEN_WIDTH-300,SCREEN_HEIGHT/2,buffer); + subMenu = NEW SimpleMenu( MENU_CARD_PURCHASE, this, Fonts::MAIN_FONT, SCREEN_WIDTH-300, SCREEN_HEIGHT/2, buffer); subMenu->Add( MENU_ITEM_YES,"Yes"); subMenu->Add( MENU_ITEM_NO,"No","",true); } @@ -534,12 +532,11 @@ void GameStateDeckViewer::Update(float dt) } } } - - } void GameStateDeckViewer::renderOnScreenBasicInfo(){ + JRenderer *renderer = JRenderer::GetInstance(); WFont * mFont = resources.GetWFont(Fonts::MAIN_FONT); char buffer[256]; int myD = (displayed_deck == myDeck); @@ -555,10 +552,11 @@ void GameStateDeckViewer::renderOnScreenBasicInfo(){ else sprintf(buffer, "%s%i cards (%i unique)", (displayed_deck == myDeck) ? "DECK: " : " " , allCopies, displayed_deck->getCount(WSrcDeck::UNFILTERED_UNIQUE)); float w = mFont->GetStringWidth(buffer); - JRenderer::GetInstance()->FillRoundRect(SCREEN_WIDTH-(w+27),y-5,w+10,15,5,ARGB(128,0,0,0)); - mFont->DrawString(buffer, SCREEN_WIDTH-22, y+5,JGETEXT_RIGHT); + renderer->FillRoundRect(SCREEN_WIDTH-(w+27),y+5,w+10,15,5,ARGB(128,0,0,0)); + + mFont->DrawString(buffer, SCREEN_WIDTH-22, y+15, JGETEXT_RIGHT); if (useFilter != 0) - JRenderer::GetInstance()->RenderQuad(mIcons[useFilter-1], SCREEN_WIDTH-10 , y + 10 , 0.0f,0.5,0.5); + renderer->RenderQuad(mIcons[useFilter-1], SCREEN_WIDTH-10 , y + 15, 0.0f,0.5,0.5); } //returns position of the current card (cusor) in the currently viewed color/filter @@ -600,7 +598,7 @@ void GameStateDeckViewer::renderSlideBar(){ } sprintf(buffer,"%s - %i/%i", deckname.c_str(),currentPos, total); mFont->SetColor(ARGB(hudAlpha,255,255,255)); - mFont->DrawString(buffer,SCREEN_WIDTH/2, y+5,JGETEXT_CENTER); + mFont->DrawString(buffer, SCREEN_WIDTH/2, y, JGETEXT_CENTER); mFont->SetColor(ARGB(255,255,255,255)); @@ -1388,7 +1386,7 @@ void GameStateDeckViewer::Render() { JRenderer * r = JRenderer::GetInstance(); r->ClearScreen(ARGB(0,0,0,0)); - if(displayed_deck == myDeck) + if(displayed_deck == myDeck && mStage != STAGE_MENU) renderDeckBackground(); int order[3] = {1,2,3}; if (mRotation < 0.5 && mRotation > -0.5){ @@ -1416,7 +1414,6 @@ void GameStateDeckViewer::Render() { if (mStage == STAGE_ONSCREEN_MENU){ renderOnScreenMenu(); }else if (mStage == STAGE_WELCOME){ - r->FillRect(0,0,SCREEN_WIDTH,SCREEN_HEIGHT,ARGB(200,0,0,0)); welcome_menu->Render(); }else{ renderOnScreenBasicInfo(); diff --git a/projects/mtg/template.vcproj b/projects/mtg/template.vcproj index 74109e24f..8cae902cf 100644 --- a/projects/mtg/template.vcproj +++ b/projects/mtg/template.vcproj @@ -493,6 +493,10 @@ RelativePath=".\src\DeckDataWrapper.cpp" > + + @@ -1026,6 +1030,10 @@ RelativePath=".\include\DeckDataWrapper.h" > + +