fixed avatar image issue when selecting ai decks outside of the default 100 ai decks.
installed a horizontal text scroller for the deck selection screens in normal play TODO:-> Need to make it smoother transition. It currently just replaces the text with the new text.
This commit is contained in:
@@ -39,6 +39,7 @@ public:
|
||||
string getDescription();
|
||||
string getName();
|
||||
string getAvatarFilename();
|
||||
int getAvatarId(int deckId);
|
||||
string getStatsSummary();
|
||||
|
||||
int getDeckId();
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
#include "DeckMenu.h"
|
||||
#include "MTGDeck.h"
|
||||
#include "GameObserver.h"
|
||||
#include "TextScroller.h"
|
||||
|
||||
#define CHOOSE_OPPONENT 7
|
||||
|
||||
@@ -32,6 +33,7 @@ class GameStateDuel: public GameState, public JGuiListener
|
||||
DeckMenu * deckmenu;
|
||||
DeckMenu * opponentMenu;
|
||||
SimpleMenu * menu;
|
||||
TextScroller * scroller;
|
||||
bool premadeDeck;
|
||||
int OpponentsDeckid;
|
||||
string musictrack;
|
||||
@@ -40,7 +42,8 @@ class GameStateDuel: public GameState, public JGuiListener
|
||||
bool MusicExist(string FileName);
|
||||
void loadPlayer(int playerId, int decknb = 0, int isAI = 0);
|
||||
void ensureOpponentMenu(); //loads the opponentMenu if it doesn't exist
|
||||
|
||||
void initScroller();
|
||||
|
||||
public:
|
||||
GameStateDuel(GameApp* parent);
|
||||
virtual ~GameStateDuel();
|
||||
|
||||
@@ -21,11 +21,13 @@ protected:
|
||||
vector<string> strings;
|
||||
unsigned int currentId;
|
||||
int mRandom;
|
||||
int scrollDirection;
|
||||
|
||||
public:
|
||||
void Add(string text);
|
||||
void Reset();
|
||||
void setRandom(int mode = 1);
|
||||
TextScroller(int fontId, float x, float y, float width, float speed = 30);
|
||||
TextScroller(int fontId, float x, float y, float width, float speed = 30, int scrollerType = 0);
|
||||
void Render();
|
||||
void Update(float dt);
|
||||
virtual ostream& toString(ostream& out) const;
|
||||
|
||||
@@ -34,7 +34,9 @@ void DeckMetaData::loadStatsForPlayer( Player * statsPlayer, string deckStatsFil
|
||||
_victories = opponentDeckStats->victories;
|
||||
_nbGamesPlayed = opponentDeckStats->nbgames;
|
||||
ostringstream oss;
|
||||
oss << "avatar" << deckStatsFileName.substr( deckStatsFileName.find("deck") + 4, deckStatsFileName.find_last_of(".") -1 ) << ".jpg";
|
||||
int oppDeckId = atoi ( deckStatsFileName.substr( deckStatsFileName.find("deck") + 4, deckStatsFileName.find_last_of(".") ).c_str() );
|
||||
int avatarId = getAvatarId( oppDeckId );
|
||||
oss << "avatar" << avatarId << ".jpg";
|
||||
_avatarFilename = oss.str();
|
||||
if (_percentVictories < 34)
|
||||
{
|
||||
@@ -52,7 +54,7 @@ void DeckMetaData::loadStatsForPlayer( Player * statsPlayer, string deckStatsFil
|
||||
else
|
||||
{
|
||||
ostringstream oss;
|
||||
oss << "avatar" << this->getDeckId() << ".jpg";
|
||||
oss << "avatar" << getAvatarId( _deckid ) << ".jpg";
|
||||
_avatarFilename = oss.str();
|
||||
}
|
||||
}
|
||||
@@ -66,6 +68,16 @@ void DeckMetaData::loadStatsForPlayer( Player * statsPlayer, string deckStatsFil
|
||||
}
|
||||
stats = NULL;
|
||||
}
|
||||
|
||||
// since we only have 100 stock avatar images, we need to recylce the images for deck numbers > 99
|
||||
int DeckMetaData::getAvatarId( int deckId )
|
||||
{
|
||||
int avatarId = deckId % 100;
|
||||
if ( deckId >= 100 && avatarId == 0)
|
||||
return 100;
|
||||
|
||||
return avatarId;
|
||||
}
|
||||
|
||||
void DeckMetaData::load(string filename){
|
||||
MTGDeck * mtgd = NEW MTGDeck(filename.c_str(),NULL,1);
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
#include "Credits.h"
|
||||
#include "Translate.h"
|
||||
#include "Rules.h"
|
||||
#include "TextScroller.h"
|
||||
|
||||
#ifdef TESTSUITE
|
||||
#include "TestSuiteAI.h"
|
||||
@@ -64,10 +65,14 @@ GameStateDuel::GameStateDuel(GameApp* parent): GameState(parent) {
|
||||
|
||||
credits = NULL;
|
||||
rules = NULL;
|
||||
|
||||
initScroller();
|
||||
}
|
||||
|
||||
GameStateDuel::~GameStateDuel() {
|
||||
End();
|
||||
SAFE_DELETE(scroller);
|
||||
|
||||
}
|
||||
|
||||
void GameStateDuel::Start()
|
||||
@@ -249,6 +254,21 @@ void GameStateDuel::ensureOpponentMenu(){
|
||||
}
|
||||
}
|
||||
|
||||
void GameStateDuel::initScroller()
|
||||
{
|
||||
scroller = NEW TextScroller(Fonts::MAIN_FONT, 40 , 230, 400, 100, 1);
|
||||
// add all the items from the Tasks db.
|
||||
TaskList *taskList = NEW TaskList();
|
||||
scroller->Reset();
|
||||
for (vector<Task*>::iterator it = taskList->tasks.begin(); it!=taskList->tasks.end(); it++)
|
||||
{
|
||||
ostringstream taskDescription;
|
||||
taskDescription << (*it)->getDesc() <<endl;
|
||||
scroller->Add( taskDescription.str() );
|
||||
}
|
||||
SAFE_DELETE(taskList);
|
||||
}
|
||||
|
||||
void GameStateDuel::Update(float dt)
|
||||
{
|
||||
switch (mGamePhase)
|
||||
@@ -301,15 +321,15 @@ void GameStateDuel::Update(float dt)
|
||||
break;
|
||||
case DUEL_STATE_CHOOSE_DECK2:
|
||||
if (mParent->players[1] == PLAYER_TYPE_HUMAN)
|
||||
deckmenu->Update(dt);
|
||||
deckmenu->Update(dt);
|
||||
else{
|
||||
if (mParent->players[0] == PLAYER_TYPE_HUMAN){
|
||||
ensureOpponentMenu();
|
||||
opponentMenu->Update(dt);
|
||||
}else{
|
||||
loadPlayer(1);
|
||||
mGamePhase = DUEL_STATE_PLAY;
|
||||
}
|
||||
if (mParent->players[0] == PLAYER_TYPE_HUMAN){
|
||||
ensureOpponentMenu();
|
||||
opponentMenu->Update(dt);
|
||||
}else{
|
||||
loadPlayer(1);
|
||||
mGamePhase = DUEL_STATE_PLAY;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case DUEL_STATE_CHOOSE_DECK2_TO_PLAY:
|
||||
@@ -413,6 +433,7 @@ void GameStateDuel::Update(float dt)
|
||||
PlayerData * playerdata = NEW PlayerData(mParent->collection);
|
||||
playerdata->taskList->passOneDay();
|
||||
playerdata->taskList->save();
|
||||
initScroller();
|
||||
SAFE_DELETE(playerdata);
|
||||
SAFE_DELETE(menu);
|
||||
}
|
||||
@@ -424,6 +445,9 @@ void GameStateDuel::Update(float dt)
|
||||
if (JGE_BTN_OK == mEngine->ReadButton())
|
||||
mParent->SetNextState(GAME_STATE_MENU);
|
||||
}
|
||||
// Update the scroller
|
||||
|
||||
scroller->Update(dt);
|
||||
}
|
||||
|
||||
|
||||
@@ -435,6 +459,7 @@ void GameStateDuel::Render()
|
||||
|
||||
if (game)
|
||||
game->Render();
|
||||
|
||||
switch (mGamePhase)
|
||||
{
|
||||
case DUEL_STATE_END:
|
||||
@@ -485,6 +510,8 @@ void GameStateDuel::Render()
|
||||
opponentMenu->Render();
|
||||
else if (deckmenu)
|
||||
deckmenu->Render();
|
||||
|
||||
scroller->Render();
|
||||
}
|
||||
break;
|
||||
case DUEL_STATE_ERROR_NO_DECK:
|
||||
|
||||
@@ -5,7 +5,13 @@
|
||||
#include "utils.h"
|
||||
#include "WFont.h"
|
||||
|
||||
TextScroller::TextScroller(int fontId, float x, float y, float width, float speed):JGuiObject(0),fontId(fontId){
|
||||
enum {
|
||||
HORIZONTAL_SCROLLER = 0,
|
||||
VERTICAL_SCROLLER = 1
|
||||
};
|
||||
|
||||
|
||||
TextScroller::TextScroller(int fontId, float x, float y, float width, float speed, int scrollerType ): JGuiObject(0), fontId(fontId){
|
||||
mWidth = width;
|
||||
mSpeed = speed;
|
||||
mX = x;
|
||||
@@ -14,6 +20,7 @@ TextScroller::TextScroller(int fontId, float x, float y, float width, float spee
|
||||
timer = 0;
|
||||
currentId = 0;
|
||||
mRandom = 0;
|
||||
scrollDirection = scrollerType;
|
||||
}
|
||||
|
||||
void TextScroller::setRandom(int mode){
|
||||
@@ -36,24 +43,46 @@ void TextScroller::Reset(){
|
||||
void TextScroller::Update(float dt){
|
||||
if(!strings.size())
|
||||
return;
|
||||
start+=mSpeed*dt;
|
||||
WFont * mFont = resources.GetWFont(fontId);
|
||||
if (start > mFont->GetStringWidth(mText.c_str())){
|
||||
start = -mWidth;
|
||||
if (mRandom){
|
||||
currentId = (rand() % strings.size());
|
||||
}else{
|
||||
currentId++;
|
||||
if (currentId > strings.size()-1)currentId = 0;
|
||||
if ( scrollDirection == HORIZONTAL_SCROLLER )
|
||||
{
|
||||
start+=mSpeed*dt;
|
||||
WFont * mFont = resources.GetWFont(fontId);
|
||||
if (start > mFont->GetStringWidth(mText.c_str())){
|
||||
start = -mWidth;
|
||||
if (mRandom){
|
||||
currentId = (rand() % strings.size());
|
||||
}else{
|
||||
currentId++;
|
||||
if (currentId > strings.size()-1)currentId = 0;
|
||||
}
|
||||
mText = strings[currentId];
|
||||
}
|
||||
mText = strings[currentId];
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
// we want to display 3 at a time
|
||||
ostringstream scrollerText;
|
||||
if ( timer == 0 )
|
||||
{
|
||||
for ( int idx = 0; idx < 2; idx ++ )
|
||||
{
|
||||
scrollerText << strings[currentId + idx];
|
||||
}
|
||||
currentId++;
|
||||
if ( currentId >= (strings.size()-1) )
|
||||
currentId = 0;
|
||||
mText = scrollerText.str();
|
||||
}
|
||||
timer = ++timer % ((int) mSpeed);
|
||||
}
|
||||
}
|
||||
|
||||
void TextScroller::Render(){
|
||||
WFont * mFont = resources.GetWFont(fontId);
|
||||
mFont->DrawString(mText.c_str(),mX,mY,JGETEXT_LEFT,start,mWidth);
|
||||
if ( scrollDirection == HORIZONTAL_SCROLLER )
|
||||
mFont->DrawString(mText.c_str(),mX,mY,JGETEXT_LEFT,start,mWidth);
|
||||
else
|
||||
mFont->DrawString(mText.c_str(), mX, mY );
|
||||
}
|
||||
|
||||
ostream& TextScroller::toString(ostream& out) const
|
||||
|
||||
Reference in New Issue
Block a user