6c1497bbd5
TODO:
change literals to use constants,
refactor the rendering code for the menu to have be leaner.
add text scroller to list all the tasks.
* 1st implementation will list all the tasks.dat
* 2nd round will try to get the scroller to only display relevant tasks to ai
Special thanks to wololo and MootPoint for helping me hammer this out. To abrasax, for the initial design of the layout.
135 lines
4.3 KiB
C++
135 lines
4.3 KiB
C++
#include "PrecompiledHeader.h"
|
|
|
|
#include "Translate.h"
|
|
#include "GameState.h"
|
|
#include "Player.h"
|
|
#include "SimpleMenu.h"
|
|
#include "DeckStats.h"
|
|
#include "DeckMetaData.h"
|
|
#include "Player.h"
|
|
|
|
// The purpose of this method is to create a listing of decks to be used for the input menu
|
|
// by default, the list will be sorted by name
|
|
// TODO: revise sorting strategy to allow other types of sorting. Currently, it is hardwired to use
|
|
// sortByName to do the sorting. This was done since the menu item display is done in insertion order.
|
|
|
|
vector<DeckMetaData *> GameState::fillDeckMenu( SimpleMenu * _menu, string path, string smallDeckPrefix, Player * statsPlayer){
|
|
bool translate = _menu->autoTranslate;
|
|
_menu->autoTranslate = false;
|
|
vector<DeckMetaData *> deckMetaDataVector = getValidDeckMetaData( path, smallDeckPrefix, statsPlayer );
|
|
renderDeckMenu( _menu, deckMetaDataVector);
|
|
_menu->autoTranslate = translate;
|
|
|
|
return deckMetaDataVector;
|
|
}
|
|
|
|
vector<DeckMetaData *> GameState::fillDeckMenu( DeckMenu * _menu, string path, string smallDeckPrefix, Player * statsPlayer){
|
|
bool translate = _menu->autoTranslate;
|
|
_menu->autoTranslate = false;
|
|
vector<DeckMetaData *> deckMetaDataVector = getValidDeckMetaData( path, smallDeckPrefix, statsPlayer );
|
|
renderDeckMenu( _menu, deckMetaDataVector);
|
|
_menu->autoTranslate = translate;
|
|
|
|
return deckMetaDataVector;
|
|
}
|
|
|
|
|
|
vector<DeckMetaData *> GameState::getValidDeckMetaData( string path, string smallDeckPrefix, Player * statsPlayer)
|
|
{
|
|
vector<DeckMetaData*> retList;
|
|
|
|
DeckMetaDataList * metas = DeckMetaDataList::decksMetaData;
|
|
int found = 1;
|
|
int nbDecks = 1;
|
|
while (found){
|
|
found = 0;
|
|
char buffer[512];
|
|
char smallDeckName[512];
|
|
char deckDesc[512];
|
|
sprintf(buffer, "%s/deck%i.txt",path.c_str(),nbDecks);
|
|
|
|
DeckMetaData * meta = metas->get(buffer, statsPlayer);
|
|
if (meta)
|
|
{
|
|
found = 1;
|
|
sprintf(smallDeckName, "%s_deck%i",smallDeckPrefix.c_str(),nbDecks);
|
|
if (statsPlayer){
|
|
string smallDeckNameStr = string(smallDeckName);
|
|
meta->loadStatsForPlayer( statsPlayer, smallDeckNameStr );
|
|
}
|
|
else
|
|
{
|
|
char playerStatsDeckName[512];
|
|
|
|
sprintf(playerStatsDeckName, "stats/player_deck%i.txt", nbDecks);
|
|
string deckstats = options.profileFile(playerStatsDeckName);
|
|
meta->loadStatsForPlayer( NULL, deckstats );
|
|
}
|
|
|
|
deckDesc[16] = 0;
|
|
retList.push_back( meta );
|
|
nbDecks++;
|
|
}
|
|
meta = NULL;
|
|
}
|
|
|
|
std::sort( retList.begin(), retList.end(), sortByName);
|
|
|
|
return retList;
|
|
|
|
}
|
|
|
|
|
|
// build a menu with the given deck list and return a vector of the deck ids created.
|
|
void GameState::renderDeckMenu ( SimpleMenu * _menu, vector<DeckMetaData *> deckMetaDataList )
|
|
{
|
|
int deckNumber = 1;
|
|
Translator * t = Translator::GetInstance();
|
|
map<string,string>::iterator it;
|
|
for (vector<DeckMetaData *>::iterator i = deckMetaDataList.begin(); i != deckMetaDataList.end(); i++)
|
|
{
|
|
DeckMetaData * deckMetaData = *i;
|
|
string deckName = deckMetaData -> getName();
|
|
string deckDescription = deckMetaData -> getDescription();
|
|
//translate decks desc
|
|
it = t->deckValues.find(deckName);
|
|
if (it != t->deckValues.end())
|
|
_menu->Add(deckNumber++, deckName.c_str(), it->second);
|
|
else
|
|
_menu->Add( deckNumber++ ,deckName.c_str(), deckDescription.c_str());
|
|
}
|
|
}
|
|
|
|
|
|
// build a menu with the given deck list and return a vector of the deck ids created.
|
|
void GameState::renderDeckMenu ( DeckMenu * _menu, vector<DeckMetaData *> deckMetaDataList )
|
|
{
|
|
int deckNumber = 1;
|
|
Translator * t = Translator::GetInstance();
|
|
map<string,string>::iterator it;
|
|
for (vector<DeckMetaData *>::iterator i = deckMetaDataList.begin(); i != deckMetaDataList.end(); i++)
|
|
{
|
|
DeckMetaData * deckMetaData = *i;
|
|
string deckName = deckMetaData -> getName();
|
|
string deckDescription = deckMetaData -> getDescription();
|
|
int deckId = deckMetaData -> getDeckId();
|
|
//translate decks desc
|
|
it = t->deckValues.find(deckName);
|
|
if (it != t->deckValues.end())
|
|
_menu->Add(deckNumber++, deckName.c_str(), it->second, false, deckMetaData);
|
|
else
|
|
_menu->Add( deckNumber++ ,deckName.c_str(), deckDescription.c_str(), false, deckMetaData);
|
|
}
|
|
}
|
|
|
|
|
|
// deck sorting routines
|
|
bool sortByName( DeckMetaData * d1, DeckMetaData * d2 )
|
|
{
|
|
return strcmp( d1->getName().c_str(), d2->getName().c_str()) < 0;
|
|
|
|
}
|
|
|
|
|
|
//end deck sorting routine
|