added border to extra details popup as per design at

http://wololo.net/forum/viewtopic.php?f=37&t=2380
and
http://wololo.net/forum/viewtopic.php?f=37&t=2382
This commit is contained in:
techdragon.nguyen@gmail.com
2010-11-23 14:02:02 +00:00
parent 8d758d4775
commit e39c94756b
8 changed files with 212 additions and 156 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 73 KiB

After

Width:  |  Height:  |  Size: 59 KiB

View File

@@ -32,7 +32,7 @@ public:
DeckMetaData();
DeckMetaData(string filename, Player * statsPlayer);
void load(string filename);
void loadStatsForPlayer( Player * statsPlayer, string opponentDeckName = "" );
void loadStatsForPlayer( Player * statsPlayer, string deckStatsFileName = "" );
// Accessors
string getFilename();
@@ -52,6 +52,9 @@ public:
};
class DeckMetaDataList {
private:
map<string,DeckMetaData *>values;
public:
void invalidate(string filename);
DeckMetaData * get(string filename, Player * statsPlayer = NULL);
@@ -59,8 +62,6 @@ public:
static DeckMetaDataList * decksMetaData;
private:
map<string,DeckMetaData *>values;
};
#endif

View File

@@ -18,7 +18,7 @@ class SimplePopup: public JGuiController
{
private:
float mHeight, mWidth, mX, mY;
float mWidth, mX, mY;
int mMaxLines;
int mFontId;
DeckMetaData * mDeckInformation;
@@ -28,8 +28,9 @@ private:
bool mClosed;
MTGAllCards * mCollection;
void drawHorzPole(float x, float y, float width);
void drawVertPole(float x, float y, float height);
void drawHorzPole(string imageName, bool flipX, bool flipY, float x, float y, float width);
void drawCorner(string imageName, bool flipX, bool flipY, float x, float y);
void drawVertPole(string imageName, bool flipX, bool flipY, float x, float y, float height);
public:
bool autoTranslate;
@@ -37,7 +38,7 @@ public:
SimplePopup(int id, JGuiListener* listener, const int fontId, const char * _title = "", DeckMetaData* deckInfo = NULL, MTGAllCards * collection = NULL);
~SimplePopup(void);
void drawBoundingBox( float x, float y, float width, float height );
bool isClosed() { return mClosed; }
MTGAllCards* getCollection() { return mCollection; }
void Render();

View File

@@ -15,9 +15,12 @@ namespace
const float kVerticalMargin = 16;
const float kHorizontalMargin = 20;
const float kLineHeight = 20;
const float kDescriptionVerticalBoxPadding = 5;
const float kDescriptionVerticalBoxPadding = 5;
const float kDescriptionHorizontalBoxPadding = 5;
const float kMenuFontScale = 1.0f;
const float kDescriptiveTextFontScale = 0.85f;
const float kDefaultFontScale = 1.0f;
const int DETAILED_INFO_THRESHOLD = 20;
}
@@ -39,16 +42,16 @@ JGuiController(id, listener), fontId(fontId), mShowDetailsScreen( showDetailsOve
backgroundName = "DeckMenuBackdrop";
mAlwaysShowDetailsButton = false;
mSelectedDeck = NULL;
mY = 55;
mY = 50;
mWidth = 176;
mX = 125;
mX = 110;
titleX = 130; // center point in title box
titleY = 28;
titleX = 110; // center point in title box
titleY = 15;
titleWidth = 180; // width of inner box of title
descX = 230 + kDescriptionVerticalBoxPadding;
descY = 65 + kDescriptionHorizontalBoxPadding;
descX = 260 + kDescriptionVerticalBoxPadding;
descY = 100 + kDescriptionHorizontalBoxPadding;
descHeight = 145;
descWidth = 220;
@@ -56,20 +59,20 @@ JGuiController(id, listener), fontId(fontId), mShowDetailsScreen( showDetailsOve
detailedInfoBoxY = 235;
starsOffsetX = 50;
statsX = 280;
statsY = 8;
statsX = 300;
statsY = 15;
statsHeight = 50;
statsWidth = 227;
mSelectedDeckId = startIndex;
avatarX = 230;
avatarY = 8;
avatarX = 232;
avatarY = 11;
menuInitialized = false;
float scrollerWidth = 80;
mScroller = NEW TextScroller(Fonts::MAIN_FONT, 40, 230, scrollerWidth, 100, 1, 1);
float scrollerWidth = 60;
mScroller = NEW TextScroller(Fonts::MAIN_FONT, 20, 235, scrollerWidth, 100, 1, 1);
mAutoTranslate = true;
maxItems = 7;
@@ -189,7 +192,6 @@ void DeckMenu::Render()
mSelectedDeck = currentMenuItem->meta;
WFont *mainFont = resources.GetWFont(Fonts::MAIN_FONT);
// display the "more info" button if special condition is met
if (showDetailsScreen())
{
@@ -212,6 +214,7 @@ void DeckMenu::Render()
}
// fill in the description part of the screen
string text = currentMenuItem->desc;
mainFont->SetScale(kDescriptiveTextFontScale);
mainFont->DrawString(text.c_str(), descX, descY);
mFont->SetColor(ARGB(255,255,255,255));
@@ -229,22 +232,22 @@ void DeckMenu::Render()
{
mFont->SetColor(ARGB(150,255,255,255));
}
mFont->SetScale(kMenuFontScale);
mFont->SetScale(kDefaultFontScale);
currentMenuItem->RenderWithOffset(-kLineHeight * startId);
}
}
RenderBackground();
if (!title.empty())
mFont->SetScale(kDescriptiveTextFontScale);
mScroller->Render();
mFont->SetScale(kDefaultFontScale);
if (!title.empty())
{
mFont->SetColor(ARGB(255,255,255,255));
mFont->SetScale(titleFontScale);
mFont->DrawString(title.c_str(), titleX, titleY, JGETEXT_CENTER);
}
mFont->SetScale(1.0f);
mScroller->Render();
}
void DeckMenu::Update(float dt)

View File

@@ -50,31 +50,31 @@ vector<DeckMetaData *> GameState::getValidDeckMetaData(const string& path, const
std::ostringstream filename;
filename << path << "/deck" << nbDecks << ".txt";
DeckMetaData * meta = metas->get(filename.str(), statsPlayer);
string deckStatsFileName;
if (meta)
{
found = 1;
if (statsPlayer)
{
std::ostringstream smallDeckName;
smallDeckName << smallDeckPrefix << "_deck" << nbDecks;
meta->loadStatsForPlayer(statsPlayer, smallDeckName.str());
std::ostringstream aiStatsDeckName;
aiStatsDeckName << smallDeckPrefix << "_deck" << nbDecks;
deckStatsFileName = aiStatsDeckName.str();
}
else
{
std::ostringstream playerStatsDeckName;
playerStatsDeckName << "stats/player_deck" << nbDecks << ".txt";
string deckstats = options.profileFile(playerStatsDeckName.str());
meta->loadStatsForPlayer(NULL, deckstats);
deckStatsFileName = options.profileFile(playerStatsDeckName.str());
}
meta->loadStatsForPlayer(statsPlayer, deckStatsFileName);
retList.push_back(meta);
nbDecks++;
}
meta = NULL;
}
std::sort(retList.begin(), retList.end(), sortByName);
std::sort(retList.begin(), retList.end(), sortByName);
return retList;
}
@@ -101,7 +101,6 @@ void GameState::renderDeckMenu(DeckMenu * _menu, const vector<DeckMetaData *>& d
DeckMetaData * deckMetaData = *i;
string deckName = deckMetaData -> getName();
string deckDescription = deckMetaData -> getDescription();
//int deckId = deckMetaData -> getDeckId(); //do we need this?
_menu->Add(deckNumber++, deckName.c_str(), deckDescription.c_str(), false, deckMetaData);
}
}

View File

@@ -127,7 +127,6 @@ void GameStateDuel::Start()
deckManager->updateMetaDataList(&playerDeckList, false);
playerDeckList.clear();
DebugTrace("INFO: Player Deck menu has a size of " << sizeof( deckmenu ) );
break;
}
}
@@ -278,7 +277,7 @@ void GameStateDuel::ensureOpponentMenu()
{
if (opponentMenu == NULL)
{
opponentMenu = NEW DeckMenu(DUEL_MENU_CHOOSE_OPPONENT, this, Fonts::OPTION_FONT, "Choose Your Opponent",
opponentMenu = NEW DeckMenu(DUEL_MENU_CHOOSE_OPPONENT, this, Fonts::OPTION_FONT, "Choose Opponent",
GameStateDuel::selectedAIDeckId, true);
opponentMenu->Add(MENUITEM_RANDOM_AI, "Random");
if (options[Options::EVILTWIN_MODE_UNLOCKED].number) opponentMenu->Add(MENUITEM_EVIL_TWIN, "Evil Twin", _(
@@ -690,7 +689,7 @@ void GameStateDuel::ButtonPressed(int controllerId, int controlId)
break;
}
else if (controlId != MENUITEM_EVIL_TWIN && aiDeckSize > 0) // evil twin
deckNumber = deckManager->getAIDeckOrderList()->at(controlId - 1)->getDeckId();
deckNumber = deckManager->getAIDeckOrderList()->at(controlId - 1)->getDeckId();
loadPlayer(1, deckNumber, 1);
OpponentsDeckid = deckNumber;
opponentMenu->Close();
@@ -746,7 +745,8 @@ void GameStateDuel::ButtonPressed(int controllerId, int controlId)
if (mGamePhase == DUEL_STATE_CHOOSE_DECK1)
{
vector<DeckMetaData *> * playerDeck = deckManager->getPlayerDeckOrderList();
if (!premadeDeck && controlId > 0) deckNumber = playerDeck->at(controlId - 1)->getDeckId();
if (!premadeDeck && controlId > 0)
deckNumber = playerDeck->at(controlId - 1)->getDeckId();
loadPlayer(0, deckNumber);
deckmenu->Close();
mGamePhase = DUEL_STATE_CHOOSE_DECK1_TO_2;

View File

@@ -259,7 +259,7 @@ int MTGAllCards::processConfLine(string &s, MTGCard *card, CardPrimitive * primi
}
else
{
primitive->setType(val);
primitive->setType(val);
break;
}
}

View File

@@ -1,115 +1,167 @@
/*
* SimplePopup.cpp
*
* Created on: Nov 18, 2010
* Author: Michael
*/
#include "PrecompiledHeader.h"
#include "SimplePopup.h"
#include "JTypes.h"
#include "GameApp.h"
#include "DeckStats.h"
#include "DeckManager.h"
#include <iomanip>
SimplePopup::SimplePopup(int id, JGuiListener* listener, const int fontId, const char * _title, DeckMetaData* deckMetaData, MTGAllCards * collection) :
JGuiController(id, listener), mFontId(fontId), mCollection(collection)
{
mX = 35;
mY = 50;
mTitle = _title;
mMaxLines = 10;
mTextFont = resources.GetWFont(fontId);
this->mCount = 1;
mStatsWrapper = NULL;
Update(deckMetaData);
}
void SimplePopup::Render()
{
mClosed = false;
JRenderer *r = JRenderer::GetInstance();
string detailedInformation = getDetailedInformation(mDeckInformation->getFilename());
mTextFont->SetScale(0.85f);
const float textWidth = 183.0f;
const float textHeight = mTextFont->GetHeight() * 10;
r->DrawRoundRect(mX, mY, textWidth, textHeight, 2.0f, ARGB( 255, 125, 255, 0) );
r->FillRoundRect(mX, mY, textWidth, textHeight, 2.0f, ARGB( 255, 0, 0, 0 ) );
mTextFont->DrawString(detailedInformation.c_str(), mX + 20 , mY + 10);
}
void SimplePopup::Update(DeckMetaData* selectedDeck)
{
mDeckInformation = selectedDeck;
SAFE_DELETE(mStatsWrapper);
mStatsWrapper = NEW StatsWrapper(mDeckInformation->getDeckId());
mStatsWrapper->updateStats(mDeckInformation->getFilename(), mCollection);
}
string SimplePopup::getDetailedInformation(string filename)
{
ostringstream oss;
oss
<< "------- Deck Summary -----" << endl
<< "Cards: "<< mStatsWrapper->cardCount << endl
<< "Creatures: "<< setw(2) << mStatsWrapper->countCreatures
<< " Enchantments: " << mStatsWrapper->countEnchantments << endl
<< "Instants: " << setw(4) << mStatsWrapper->countInstants
<< " Sorceries: " << setw(2) << mStatsWrapper->countSorceries << endl
<< "Lands: "
<< "A: " << setw(2) << left << mStatsWrapper->countLandsPerColor[ Constants::MTG_COLOR_ARTIFACT ] + mStatsWrapper->countBasicLandsPerColor[ Constants::MTG_COLOR_ARTIFACT ] << " "
<< "G: " << setw(2) << left << mStatsWrapper->countLandsPerColor[ Constants::MTG_COLOR_GREEN ] + mStatsWrapper->countLandsPerColor[ Constants::MTG_COLOR_GREEN ] << " "
<< "R: " << setw(2) << left << mStatsWrapper->countLandsPerColor[ Constants::MTG_COLOR_RED ] + mStatsWrapper->countBasicLandsPerColor[ Constants::MTG_COLOR_RED ] << " "
<< "U: " << setw(2) << left << mStatsWrapper->countLandsPerColor[ Constants::MTG_COLOR_BLUE ] + mStatsWrapper->countBasicLandsPerColor[ Constants::MTG_COLOR_BLUE ] << " "
<< "B: " << setw(2) << left << mStatsWrapper->countLandsPerColor[ Constants::MTG_COLOR_BLACK ] + mStatsWrapper->countBasicLandsPerColor[ Constants::MTG_COLOR_BLACK ] << " "
<< "W: " << setw(2) << left << mStatsWrapper->countLandsPerColor[ Constants::MTG_COLOR_WHITE ] + mStatsWrapper->countBasicLandsPerColor[ Constants::MTG_COLOR_WHITE ] << endl
<< " --- Mana Curve --- " << endl;
for ( int costIdx = 0; costIdx < Constants::STATS_MAX_MANA_COST+1; ++costIdx )
if ( mStatsWrapper->countCardsPerCost[ costIdx ] > 0 )
oss << costIdx << ": " << setw(2) << left << mStatsWrapper->countCardsPerCost[ costIdx ] << " ";
oss << endl;
oss
<< " --- Average Cost --- " << endl
<< "Creature: "<< setprecision(2) << mStatsWrapper->avgCreatureCost << endl
<< "Mana: " << setprecision(2) << mStatsWrapper->avgManaCost << " "
<< "Spell: " << setprecision(2) << mStatsWrapper->avgSpellCost << endl;
return oss.str();
}
void SimplePopup::Update(float dt)
{
JButton key = mEngine->ReadButton();
CheckUserInput(key);
}
void SimplePopup::Close()
{
mClosed = true;
mCount = 0;
}
SimplePopup::~SimplePopup(void)
{
mTextFont = NULL;
mDeckInformation = NULL;
SAFE_DELETE(mStatsWrapper);
}
void SimplePopup::drawHorzPole(float x, float y, float width)
{
}
void SimplePopup::drawVertPole(float x, float y, float height)
{
}
/*
* SimplePopup.cpp
*
* Created on: Nov 18, 2010
* Author: Michael
*/
#include "PrecompiledHeader.h"
#include "SimplePopup.h"
#include "JTypes.h"
#include "GameApp.h"
#include "DeckStats.h"
#include "DeckManager.h"
#include <iomanip>
SimplePopup::SimplePopup(int id, JGuiListener* listener, const int fontId, const char * _title, DeckMetaData* deckMetaData, MTGAllCards * collection) :
JGuiController(id, listener), mFontId(fontId), mCollection(collection)
{
mX = 18;
mY = 66;
mWidth = 180.0f;
mTitle = _title;
mMaxLines = 11;
mTextFont = resources.GetWFont(fontId);
this->mCount = 1; // a hack to ensure the menus do book keeping correctly. Since we aren't adding items to the menu, this is required
mStatsWrapper = NULL;
Update(deckMetaData);
}
void SimplePopup::Render()
{
mClosed = false;
JRenderer *r = JRenderer::GetInstance();
string detailedInformation = getDetailedInformation(mDeckInformation->getFilename());
mTextFont->SetScale(0.85f);
const float textHeight = mTextFont->GetHeight() * mMaxLines;
r->DrawRoundRect(mX, mY, mWidth, textHeight, 2.0f, ARGB( 255, 125, 255, 0) );
r->FillRoundRect(mX, mY, mWidth, textHeight, 2.0f, ARGB( 255, 0, 0, 0 ) );
drawBoundingBox( mX, mY, mWidth, textHeight );
mTextFont->DrawString(detailedInformation.c_str(), mX + 20 , mY + 15);
}
void SimplePopup::drawBoundingBox( float x, float y, float width, float height )
{
JRenderer *r = JRenderer::GetInstance();
//draw the corners
string topCornerImageName = "top_corner.png";
string bottomCornerImageName = "bottom_corner.png";
string verticalBarImageName = "vert_bar.png";
string horizontalBarImageName = "top_bar.png";
const float boxWidth = ( width + 15 ) / 3.0f;
const float boxHeight = ( height + 15 ) / 3.0f;
drawHorzPole( horizontalBarImageName, false, false, x, y, boxWidth );
drawHorzPole( horizontalBarImageName, false, true, x, y + height, boxWidth );
drawVertPole( verticalBarImageName, false, false, x, y, boxHeight );
drawVertPole( verticalBarImageName, true, false, x + width, y, boxHeight );
drawCorner( topCornerImageName, false, false, x, y );
drawCorner( topCornerImageName, true, false, x + width, y );
drawCorner( bottomCornerImageName, false, false, x, y + height );
drawCorner( bottomCornerImageName, true, false, x + width, y + height );
}
void SimplePopup::Update(DeckMetaData* selectedDeck)
{
mDeckInformation = selectedDeck;
SAFE_DELETE(mStatsWrapper);
mStatsWrapper = NEW StatsWrapper(mDeckInformation->getDeckId());
mStatsWrapper->updateStats(mDeckInformation->getFilename(), mCollection);
}
string SimplePopup::getDetailedInformation(string filename)
{
ostringstream oss;
oss
<< "------- Deck Summary -----" << endl
<< "Cards: "<< mStatsWrapper->cardCount << endl
<< "Creatures: "<< setw(2) << mStatsWrapper->countCreatures
<< " Enchantments: " << mStatsWrapper->countEnchantments << endl
<< "Instants: " << setw(4) << mStatsWrapper->countInstants
<< " Sorceries: " << setw(2) << mStatsWrapper->countSorceries << endl
<< "Lands: "
<< "A: " << setw(2) << left << mStatsWrapper->countLandsPerColor[ Constants::MTG_COLOR_ARTIFACT ] + mStatsWrapper->countBasicLandsPerColor[ Constants::MTG_COLOR_ARTIFACT ] << " "
<< "G: " << setw(2) << left << mStatsWrapper->countLandsPerColor[ Constants::MTG_COLOR_GREEN ] + mStatsWrapper->countLandsPerColor[ Constants::MTG_COLOR_GREEN ] << " "
<< "R: " << setw(2) << left << mStatsWrapper->countLandsPerColor[ Constants::MTG_COLOR_RED ] + mStatsWrapper->countBasicLandsPerColor[ Constants::MTG_COLOR_RED ] << " "
<< "U: " << setw(2) << left << mStatsWrapper->countLandsPerColor[ Constants::MTG_COLOR_BLUE ] + mStatsWrapper->countBasicLandsPerColor[ Constants::MTG_COLOR_BLUE ] << " "
<< "B: " << setw(2) << left << mStatsWrapper->countLandsPerColor[ Constants::MTG_COLOR_BLACK ] + mStatsWrapper->countBasicLandsPerColor[ Constants::MTG_COLOR_BLACK ] << " "
<< "W: " << setw(2) << left << mStatsWrapper->countLandsPerColor[ Constants::MTG_COLOR_WHITE ] + mStatsWrapper->countBasicLandsPerColor[ Constants::MTG_COLOR_WHITE ] << endl
<< " --- Mana Curve --- " << endl;
for ( int costIdx = 0; costIdx < Constants::STATS_MAX_MANA_COST+1; ++costIdx )
if ( mStatsWrapper->countCardsPerCost[ costIdx ] > 0 )
oss << costIdx << ": " << setw(2) << left << mStatsWrapper->countCardsPerCost[ costIdx ] << " ";
oss << endl;
oss
<< " --- Average Cost --- " << endl
<< "Creature: "<< setprecision(2) << mStatsWrapper->avgCreatureCost << endl
<< "Mana: " << setprecision(2) << mStatsWrapper->avgManaCost << " "
<< "Spell: " << setprecision(2) << mStatsWrapper->avgSpellCost << endl;
return oss.str();
}
void SimplePopup::Update(float dt)
{
JButton key = mEngine->ReadButton();
CheckUserInput(key);
}
// drawing routines
void SimplePopup::drawCorner(string imageName, bool flipX, bool flipY, float x, float y)
{
JRenderer* r = JRenderer::GetInstance();
JQuad *horizontalBarImage = resources.RetrieveTempQuad( imageName, TEXTURE_SUB_5551);
horizontalBarImage->SetHFlip(flipX);
horizontalBarImage->SetVFlip(flipY);
r->RenderQuad( horizontalBarImage, x, y);
}
void SimplePopup::drawHorzPole(string imageName, bool flipX = false, bool flipY = false, float x = 0, float y = 0, float width = SCREEN_WIDTH_F)
{
JRenderer* r = JRenderer::GetInstance();
JQuad *horizontalBarImage = resources.RetrieveTempQuad( imageName, TEXTURE_SUB_5551);
horizontalBarImage->SetHFlip(flipX);
horizontalBarImage->SetVFlip(flipY);
r->RenderQuad( horizontalBarImage, x, y, 0, width );
}
void SimplePopup::drawVertPole(string imageName, bool flipX = false, bool flipY = false, float x = 0, float y = 0, float height = SCREEN_HEIGHT_F)
{
JRenderer* r = JRenderer::GetInstance();
JQuad *verticalBarImage = resources.RetrieveTempQuad( imageName, TEXTURE_SUB_5551);
verticalBarImage->SetHFlip(flipX);
verticalBarImage->SetVFlip(flipY);
r->RenderQuad( verticalBarImage, x, y, 0, 1.0f, height);
}
void SimplePopup::Close()
{
mClosed = true;
mCount = 0;
}
SimplePopup::~SimplePopup(void)
{
mTextFont = NULL;
mDeckInformation = NULL;
SAFE_DELETE(mStatsWrapper);
}