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 getDescription();
|
||||||
string getName();
|
string getName();
|
||||||
string getAvatarFilename();
|
string getAvatarFilename();
|
||||||
|
int getAvatarId(int deckId);
|
||||||
string getStatsSummary();
|
string getStatsSummary();
|
||||||
|
|
||||||
int getDeckId();
|
int getDeckId();
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
#include "DeckMenu.h"
|
#include "DeckMenu.h"
|
||||||
#include "MTGDeck.h"
|
#include "MTGDeck.h"
|
||||||
#include "GameObserver.h"
|
#include "GameObserver.h"
|
||||||
|
#include "TextScroller.h"
|
||||||
|
|
||||||
#define CHOOSE_OPPONENT 7
|
#define CHOOSE_OPPONENT 7
|
||||||
|
|
||||||
@@ -32,6 +33,7 @@ class GameStateDuel: public GameState, public JGuiListener
|
|||||||
DeckMenu * deckmenu;
|
DeckMenu * deckmenu;
|
||||||
DeckMenu * opponentMenu;
|
DeckMenu * opponentMenu;
|
||||||
SimpleMenu * menu;
|
SimpleMenu * menu;
|
||||||
|
TextScroller * scroller;
|
||||||
bool premadeDeck;
|
bool premadeDeck;
|
||||||
int OpponentsDeckid;
|
int OpponentsDeckid;
|
||||||
string musictrack;
|
string musictrack;
|
||||||
@@ -40,7 +42,8 @@ class GameStateDuel: public GameState, public JGuiListener
|
|||||||
bool MusicExist(string FileName);
|
bool MusicExist(string FileName);
|
||||||
void loadPlayer(int playerId, int decknb = 0, int isAI = 0);
|
void loadPlayer(int playerId, int decknb = 0, int isAI = 0);
|
||||||
void ensureOpponentMenu(); //loads the opponentMenu if it doesn't exist
|
void ensureOpponentMenu(); //loads the opponentMenu if it doesn't exist
|
||||||
|
void initScroller();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
GameStateDuel(GameApp* parent);
|
GameStateDuel(GameApp* parent);
|
||||||
virtual ~GameStateDuel();
|
virtual ~GameStateDuel();
|
||||||
|
|||||||
@@ -21,11 +21,13 @@ protected:
|
|||||||
vector<string> strings;
|
vector<string> strings;
|
||||||
unsigned int currentId;
|
unsigned int currentId;
|
||||||
int mRandom;
|
int mRandom;
|
||||||
|
int scrollDirection;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void Add(string text);
|
void Add(string text);
|
||||||
void Reset();
|
void Reset();
|
||||||
void setRandom(int mode = 1);
|
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 Render();
|
||||||
void Update(float dt);
|
void Update(float dt);
|
||||||
virtual ostream& toString(ostream& out) const;
|
virtual ostream& toString(ostream& out) const;
|
||||||
|
|||||||
@@ -34,7 +34,9 @@ void DeckMetaData::loadStatsForPlayer( Player * statsPlayer, string deckStatsFil
|
|||||||
_victories = opponentDeckStats->victories;
|
_victories = opponentDeckStats->victories;
|
||||||
_nbGamesPlayed = opponentDeckStats->nbgames;
|
_nbGamesPlayed = opponentDeckStats->nbgames;
|
||||||
ostringstream oss;
|
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();
|
_avatarFilename = oss.str();
|
||||||
if (_percentVictories < 34)
|
if (_percentVictories < 34)
|
||||||
{
|
{
|
||||||
@@ -52,7 +54,7 @@ void DeckMetaData::loadStatsForPlayer( Player * statsPlayer, string deckStatsFil
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
ostringstream oss;
|
ostringstream oss;
|
||||||
oss << "avatar" << this->getDeckId() << ".jpg";
|
oss << "avatar" << getAvatarId( _deckid ) << ".jpg";
|
||||||
_avatarFilename = oss.str();
|
_avatarFilename = oss.str();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -66,6 +68,16 @@ void DeckMetaData::loadStatsForPlayer( Player * statsPlayer, string deckStatsFil
|
|||||||
}
|
}
|
||||||
stats = NULL;
|
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){
|
void DeckMetaData::load(string filename){
|
||||||
MTGDeck * mtgd = NEW MTGDeck(filename.c_str(),NULL,1);
|
MTGDeck * mtgd = NEW MTGDeck(filename.c_str(),NULL,1);
|
||||||
|
|||||||
@@ -15,6 +15,7 @@
|
|||||||
#include "Credits.h"
|
#include "Credits.h"
|
||||||
#include "Translate.h"
|
#include "Translate.h"
|
||||||
#include "Rules.h"
|
#include "Rules.h"
|
||||||
|
#include "TextScroller.h"
|
||||||
|
|
||||||
#ifdef TESTSUITE
|
#ifdef TESTSUITE
|
||||||
#include "TestSuiteAI.h"
|
#include "TestSuiteAI.h"
|
||||||
@@ -64,10 +65,14 @@ GameStateDuel::GameStateDuel(GameApp* parent): GameState(parent) {
|
|||||||
|
|
||||||
credits = NULL;
|
credits = NULL;
|
||||||
rules = NULL;
|
rules = NULL;
|
||||||
|
|
||||||
|
initScroller();
|
||||||
}
|
}
|
||||||
|
|
||||||
GameStateDuel::~GameStateDuel() {
|
GameStateDuel::~GameStateDuel() {
|
||||||
End();
|
End();
|
||||||
|
SAFE_DELETE(scroller);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void GameStateDuel::Start()
|
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)
|
void GameStateDuel::Update(float dt)
|
||||||
{
|
{
|
||||||
switch (mGamePhase)
|
switch (mGamePhase)
|
||||||
@@ -301,15 +321,15 @@ void GameStateDuel::Update(float dt)
|
|||||||
break;
|
break;
|
||||||
case DUEL_STATE_CHOOSE_DECK2:
|
case DUEL_STATE_CHOOSE_DECK2:
|
||||||
if (mParent->players[1] == PLAYER_TYPE_HUMAN)
|
if (mParent->players[1] == PLAYER_TYPE_HUMAN)
|
||||||
deckmenu->Update(dt);
|
deckmenu->Update(dt);
|
||||||
else{
|
else{
|
||||||
if (mParent->players[0] == PLAYER_TYPE_HUMAN){
|
if (mParent->players[0] == PLAYER_TYPE_HUMAN){
|
||||||
ensureOpponentMenu();
|
ensureOpponentMenu();
|
||||||
opponentMenu->Update(dt);
|
opponentMenu->Update(dt);
|
||||||
}else{
|
}else{
|
||||||
loadPlayer(1);
|
loadPlayer(1);
|
||||||
mGamePhase = DUEL_STATE_PLAY;
|
mGamePhase = DUEL_STATE_PLAY;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case DUEL_STATE_CHOOSE_DECK2_TO_PLAY:
|
case DUEL_STATE_CHOOSE_DECK2_TO_PLAY:
|
||||||
@@ -413,6 +433,7 @@ void GameStateDuel::Update(float dt)
|
|||||||
PlayerData * playerdata = NEW PlayerData(mParent->collection);
|
PlayerData * playerdata = NEW PlayerData(mParent->collection);
|
||||||
playerdata->taskList->passOneDay();
|
playerdata->taskList->passOneDay();
|
||||||
playerdata->taskList->save();
|
playerdata->taskList->save();
|
||||||
|
initScroller();
|
||||||
SAFE_DELETE(playerdata);
|
SAFE_DELETE(playerdata);
|
||||||
SAFE_DELETE(menu);
|
SAFE_DELETE(menu);
|
||||||
}
|
}
|
||||||
@@ -424,6 +445,9 @@ void GameStateDuel::Update(float dt)
|
|||||||
if (JGE_BTN_OK == mEngine->ReadButton())
|
if (JGE_BTN_OK == mEngine->ReadButton())
|
||||||
mParent->SetNextState(GAME_STATE_MENU);
|
mParent->SetNextState(GAME_STATE_MENU);
|
||||||
}
|
}
|
||||||
|
// Update the scroller
|
||||||
|
|
||||||
|
scroller->Update(dt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -435,6 +459,7 @@ void GameStateDuel::Render()
|
|||||||
|
|
||||||
if (game)
|
if (game)
|
||||||
game->Render();
|
game->Render();
|
||||||
|
|
||||||
switch (mGamePhase)
|
switch (mGamePhase)
|
||||||
{
|
{
|
||||||
case DUEL_STATE_END:
|
case DUEL_STATE_END:
|
||||||
@@ -485,6 +510,8 @@ void GameStateDuel::Render()
|
|||||||
opponentMenu->Render();
|
opponentMenu->Render();
|
||||||
else if (deckmenu)
|
else if (deckmenu)
|
||||||
deckmenu->Render();
|
deckmenu->Render();
|
||||||
|
|
||||||
|
scroller->Render();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case DUEL_STATE_ERROR_NO_DECK:
|
case DUEL_STATE_ERROR_NO_DECK:
|
||||||
|
|||||||
@@ -5,7 +5,13 @@
|
|||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
#include "WFont.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;
|
mWidth = width;
|
||||||
mSpeed = speed;
|
mSpeed = speed;
|
||||||
mX = x;
|
mX = x;
|
||||||
@@ -14,6 +20,7 @@ TextScroller::TextScroller(int fontId, float x, float y, float width, float spee
|
|||||||
timer = 0;
|
timer = 0;
|
||||||
currentId = 0;
|
currentId = 0;
|
||||||
mRandom = 0;
|
mRandom = 0;
|
||||||
|
scrollDirection = scrollerType;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TextScroller::setRandom(int mode){
|
void TextScroller::setRandom(int mode){
|
||||||
@@ -36,24 +43,46 @@ void TextScroller::Reset(){
|
|||||||
void TextScroller::Update(float dt){
|
void TextScroller::Update(float dt){
|
||||||
if(!strings.size())
|
if(!strings.size())
|
||||||
return;
|
return;
|
||||||
start+=mSpeed*dt;
|
if ( scrollDirection == HORIZONTAL_SCROLLER )
|
||||||
WFont * mFont = resources.GetWFont(fontId);
|
{
|
||||||
if (start > mFont->GetStringWidth(mText.c_str())){
|
start+=mSpeed*dt;
|
||||||
start = -mWidth;
|
WFont * mFont = resources.GetWFont(fontId);
|
||||||
if (mRandom){
|
if (start > mFont->GetStringWidth(mText.c_str())){
|
||||||
currentId = (rand() % strings.size());
|
start = -mWidth;
|
||||||
}else{
|
if (mRandom){
|
||||||
currentId++;
|
currentId = (rand() % strings.size());
|
||||||
if (currentId > strings.size()-1)currentId = 0;
|
}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(){
|
void TextScroller::Render(){
|
||||||
WFont * mFont = resources.GetWFont(fontId);
|
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
|
ostream& TextScroller::toString(ostream& out) const
|
||||||
|
|||||||
Reference in New Issue
Block a user