From 2fdc80aee1bba9db69212b4e5d50df8abb7d8e99 Mon Sep 17 00:00:00 2001 From: "techdragon.nguyen@gmail.com" Date: Wed, 20 Apr 2011 17:51:40 +0000 Subject: [PATCH] Synchronized avatar images to be loaded correctly on first display of the opponent selection. * changed how the avatar images are assigned since how they were before was incorrect. They are now assigned upon instantiation of the meta file. Not when the stats are calculated. * Added new image for "Evil Twin". This is a horizontally flipped image of the original player avatar with a red background. Please feel free to edit the image. * removed display of avatar image on menu items in deck selection that are not deck related. (ie "Cancel", "Back to Main Menu", etc) "New Deck" also does not have an image since no deck really exists yet so no avatar. Issue: 622 --- .../mtg/bin/Res/graphics/avatar_evil_twin.jpg | Bin 0 -> 3849 bytes projects/mtg/include/DeckMetaData.h | 4 +- projects/mtg/include/GameStateDuel.h | 6 +-- projects/mtg/src/DeckManager.cpp | 4 +- projects/mtg/src/DeckMenu.cpp | 1 + projects/mtg/src/DeckMenuItem.cpp | 25 +++++++++++-- projects/mtg/src/DeckMetaData.cpp | 35 +++++++++--------- 7 files changed, 48 insertions(+), 27 deletions(-) create mode 100644 projects/mtg/bin/Res/graphics/avatar_evil_twin.jpg diff --git a/projects/mtg/bin/Res/graphics/avatar_evil_twin.jpg b/projects/mtg/bin/Res/graphics/avatar_evil_twin.jpg new file mode 100644 index 0000000000000000000000000000000000000000..50ed6e2e216b96d5a44d9ca6762e5cde6257aac6 GIT binary patch literal 3849 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 literal 0 HcmV?d00001 diff --git a/projects/mtg/include/DeckMetaData.h b/projects/mtg/include/DeckMetaData.h index f26ca2282..75ef81b2c 100644 --- a/projects/mtg/include/DeckMetaData.h +++ b/projects/mtg/include/DeckMetaData.h @@ -26,13 +26,14 @@ private: // statistical information int mGamesPlayed, mVictories, mPercentVictories, mDifficulty; + int getAvatarId(); DeckMetaData(); public: - DeckMetaData(const string& filename); + DeckMetaData(const string& filename, bool isAI = false); void LoadDeck(); void LoadStats(); @@ -42,7 +43,6 @@ public: string getName(); string getAvatarFilename(); string getColorIndex(); - int getAvatarId(int deckId); string getStatsSummary(); int getDeckId(); diff --git a/projects/mtg/include/GameStateDuel.h b/projects/mtg/include/GameStateDuel.h index 935b27e0c..e76a80720 100644 --- a/projects/mtg/include/GameStateDuel.h +++ b/projects/mtg/include/GameStateDuel.h @@ -65,10 +65,10 @@ public: { MENUITEM_CANCEL = kCancelMenuID, MENUITEM_NEW_DECK = -10, - MENUITEM_RANDOM_PLAYER = -11, - MENUITEM_RANDOM_AI = -12, + MENUITEM_RANDOM_PLAYER = kRandomPlayerMenuID, + MENUITEM_RANDOM_AI = kRandomAIPlayerMenuID, MENUITEM_MAIN_MENU = -13, - MENUITEM_EVIL_TWIN = -14, + MENUITEM_EVIL_TWIN = kEvilTwinMenuID, MENUITEM_MULLIGAN = -15, #ifdef NETWORK_SUPPORT MENUITEM_REMOTE_CLIENT = -16, diff --git a/projects/mtg/src/DeckManager.cpp b/projects/mtg/src/DeckManager.cpp index 041c4a026..d0cd5c29d 100644 --- a/projects/mtg/src/DeckManager.cpp +++ b/projects/mtg/src/DeckManager.cpp @@ -109,12 +109,12 @@ void DeckManager::AddMetaData( const string& filename, bool isAI ) { if (isAI) { - aiDeckOrderList.push_back ( NEW DeckMetaData( filename ) ); + aiDeckOrderList.push_back ( NEW DeckMetaData( filename, isAI ) ); aiDeckStatsMap.insert( make_pair( filename.c_str(), new StatsWrapper( aiDeckOrderList.back()->getDeckId()) )); } else { - playerDeckOrderList.push_back ( NEW DeckMetaData( filename ) ); + playerDeckOrderList.push_back ( NEW DeckMetaData( filename, isAI ) ); playerDeckStatsMap.insert( make_pair( filename.c_str(), new StatsWrapper( playerDeckOrderList.back()->getDeckId()) )); } } diff --git a/projects/mtg/src/DeckMenu.cpp b/projects/mtg/src/DeckMenu.cpp index 505dd0e51..8e5b64ce5 100644 --- a/projects/mtg/src/DeckMenu.cpp +++ b/projects/mtg/src/DeckMenu.cpp @@ -247,6 +247,7 @@ void DeckMenu::Render() if (quad.get()) renderer->RenderQuad(quad.get(), avatarX, avatarY); } + // fill in the description part of the screen string text = wordWrap(_(currentMenuItem->desc), descWidth, mainFont->mFontID ); mainFont->DrawString(text.c_str(), descX, descY); diff --git a/projects/mtg/src/DeckMenuItem.cpp b/projects/mtg/src/DeckMenuItem.cpp index d921ae3dc..cd902440d 100644 --- a/projects/mtg/src/DeckMenuItem.cpp +++ b/projects/mtg/src/DeckMenuItem.cpp @@ -41,9 +41,28 @@ DeckMenuItem::DeckMenuItem(DeckMenu* _parent, int id, int fontId, string text, f if (meta && meta->getAvatarFilename().size() > 0) this->imageFilename = meta->getAvatarFilename(); - else - this->imageFilename = "avatar.jpg"; - + else + { + // this is a non-deck menu item (ie "Random", "Cancel", etc + switch(id) + { + case kRandomPlayerMenuID: + this->imageFilename = "avatar.jpg"; + break; + case kRandomAIPlayerMenuID: + this->imageFilename = "avatar.jpg"; + break; + case kEvilTwinMenuID: + this->imageFilename = "avatar_evil_twin.jpg"; + break; + default: + // do nothing. + break; + } + + } + + mDisplayInitialized = false; } diff --git a/projects/mtg/src/DeckMetaData.cpp b/projects/mtg/src/DeckMetaData.cpp index ccb72ae66..d61c9e839 100644 --- a/projects/mtg/src/DeckMetaData.cpp +++ b/projects/mtg/src/DeckMetaData.cpp @@ -10,9 +10,9 @@ //Merge this with DeckStats //Have this class handle all the Meta Data rather than relying on MTGDeck. Then MTGDeck would have a MetaData object... -DeckMetaData::DeckMetaData(const string& filename) +DeckMetaData::DeckMetaData(const string& filename, bool isAI) : mFilename(filename), mGamesPlayed(0), mVictories(0), mPercentVictories(0), mDifficulty(0), - mDeckLoaded(false), mStatsLoaded(false) + mDeckLoaded(false), mStatsLoaded(false), mIsAI(isAI) { // TODO, figure out how we can defer this to later - currently, // there's a catch 22, as we sort the deck list alphabetically, so we need to open the deck file @@ -36,12 +36,7 @@ void DeckMetaData::LoadStats() mVictories = opponentDeckStats->victories; mGamesPlayed = opponentDeckStats->nbgames; mColorIndex = opponentDeckStats->manaColorIndex; - ostringstream oss; - int deckFilenameOffset = mStatsFilename.find("deck") + 4; - int oppDeckId = atoi(mStatsFilename.substr(deckFilenameOffset, mStatsFilename.find_last_of(".")).c_str()); - int avatarId = getAvatarId(oppDeckId); - oss << "avatar" << avatarId << ".jpg"; - mAvatarFilename = oss.str(); + if (mPercentVictories < 34) { mDifficulty = HARD; @@ -55,12 +50,6 @@ void DeckMetaData::LoadStats() mDifficulty = EASY; } } - else - { - ostringstream oss; - oss << "avatar" << getAvatarId(mDeckId) << ".jpg"; - mAvatarFilename = oss.str(); - } } else { @@ -79,10 +68,14 @@ void DeckMetaData::LoadStats() } // since we only have 100 stock avatar images, we need to recycle the images for deck numbers > 99 -int DeckMetaData::getAvatarId(int deckId) +int DeckMetaData::getAvatarId() { - int avatarId = deckId % 100; - if (deckId >= 100 && avatarId == 0) + if ( mDeckId < 101 ) + return mDeckId; + + int avatarId = mDeckId % 100; + + if (avatarId == 0) return 100; return avatarId; @@ -97,6 +90,14 @@ void DeckMetaData::LoadDeck() mDescription = trim(deck.meta_desc); mDeckId = atoi((mFilename.substr(mFilename.find("deck") + 4, mFilename.find(".txt"))).c_str()); mDeckLoaded = true; + if (!mIsAI) + mAvatarFilename = "avatar.jpg"; + else + { + ostringstream avatarFilename; + avatarFilename << "avatar" << getAvatarId() << ".jpg"; + mAvatarFilename = avatarFilename.str(); + } }