- updates to mod menu for better user experience

This commit is contained in:
Mark Vejvoda 2011-03-25 18:42:08 +00:00
parent 9096449919
commit 1a783b3bba
4 changed files with 246 additions and 84 deletions

View File

@ -1289,7 +1289,7 @@ void Renderer::renderLabel(const GraphicLabel *label,const Vec4f *color) {
glPopAttrib(); glPopAttrib();
} }
void Renderer::renderButton(const GraphicButton *button, const Vec4f *fontColorOverride) { void Renderer::renderButton(const GraphicButton *button, const Vec4f *fontColorOverride, bool *lightedOverride) {
if(button->getVisible() == false) { if(button->getVisible() == false) {
return; return;
} }
@ -1360,7 +1360,11 @@ void Renderer::renderButton(const GraphicButton *button, const Vec4f *fontColorO
float anim= GraphicComponent::getAnim(); float anim= GraphicComponent::getAnim();
if(anim>0.5f) anim= 1.f-anim; if(anim>0.5f) anim= 1.f-anim;
if(button->getLighted() && button->getEditable()){ bool renderLighted = (button->getLighted() && button->getEditable());
if(lightedOverride != NULL) {
renderLighted = *lightedOverride;
}
if(renderLighted) {
const int lightSize= 0; const int lightSize= 0;
const Vec4f color1= Vec4f(color.x, color.y, color.z, 0.1f+anim*0.5f); const Vec4f color1= Vec4f(color.x, color.y, color.z, 0.1f+anim*0.5f);
const Vec4f color2= Vec4f(color.x, color.y, color.z, 0.3f+anim); const Vec4f color2= Vec4f(color.x, color.y, color.z, 0.3f+anim);

View File

@ -354,7 +354,7 @@ public:
void renderLabel(const GraphicLabel *label); void renderLabel(const GraphicLabel *label);
void renderLabel(const GraphicLabel *label,const Vec3f *color); void renderLabel(const GraphicLabel *label,const Vec3f *color);
void renderLabel(const GraphicLabel *label,const Vec4f *color); void renderLabel(const GraphicLabel *label,const Vec4f *color);
void renderButton(const GraphicButton *button,const Vec4f *fontColorOverride=NULL); void renderButton(const GraphicButton *button,const Vec4f *fontColorOverride=NULL,bool *lightedOverride=NULL);
void renderCheckBox(const GraphicCheckBox *box); void renderCheckBox(const GraphicCheckBox *box);
void renderLine(const GraphicLine *line); void renderLine(const GraphicLine *line);
void renderScrollBar(const GraphicScrollBar *sb); void renderScrollBar(const GraphicScrollBar *sb);

View File

@ -26,8 +26,6 @@
namespace Glest{ namespace Game{ namespace Glest{ namespace Game{
static const string ITEM_MISSING = "***missing***";
using namespace Shared::Util; using namespace Shared::Util;
struct FormatString { struct FormatString {
@ -66,22 +64,27 @@ MenuStateMods::MenuStateMods(Program *program, MainMenu *mainMenu) :
keyTechScrollBarTitle1.registerGraphicComponent(containerName,"keyTechScrollBarTitle1"); keyTechScrollBarTitle1.registerGraphicComponent(containerName,"keyTechScrollBarTitle1");
keyTechScrollBarTitle1.init(techInfoXPos,scrollListsYPos + 20,labelWidth,20); keyTechScrollBarTitle1.init(techInfoXPos,scrollListsYPos + 20,labelWidth,20);
keyTechScrollBarTitle1.setText(lang.get("TechTitle1")); keyTechScrollBarTitle1.setText(lang.get("TechTitle1"));
keyTechScrollBarTitle1.setFont(CoreData::getInstance().getMenuFontBig());
keyTechScrollBarTitle2.registerGraphicComponent(containerName,"keyTechScrollBarTitle2"); keyTechScrollBarTitle2.registerGraphicComponent(containerName,"keyTechScrollBarTitle2");
keyTechScrollBarTitle2.init(techInfoXPos + 200,scrollListsYPos + 20,labelWidth,20); keyTechScrollBarTitle2.init(techInfoXPos + 200,scrollListsYPos + 20,labelWidth,20);
keyTechScrollBarTitle2.setText(lang.get("TechTitle2")); keyTechScrollBarTitle2.setText(lang.get("TechTitle2"));
keyTechScrollBarTitle2.setFont(CoreData::getInstance().getMenuFontBig());
int mapInfoXPos = 270; int mapInfoXPos = 270;
keyMapScrollBarTitle1.registerGraphicComponent(containerName,"keyMapScrollBarTitle1"); keyMapScrollBarTitle1.registerGraphicComponent(containerName,"keyMapScrollBarTitle1");
keyMapScrollBarTitle1.init(mapInfoXPos,scrollListsYPos + 20,labelWidth,20); keyMapScrollBarTitle1.init(mapInfoXPos,scrollListsYPos + 20,labelWidth,20);
keyMapScrollBarTitle1.setText(lang.get("MapTitle1")); keyMapScrollBarTitle1.setText(lang.get("MapTitle1"));
keyMapScrollBarTitle1.setFont(CoreData::getInstance().getMenuFontBig());
keyMapScrollBarTitle2.registerGraphicComponent(containerName,"keyMapScrollBarTitle2"); keyMapScrollBarTitle2.registerGraphicComponent(containerName,"keyMapScrollBarTitle2");
keyMapScrollBarTitle2.init(mapInfoXPos + 200,scrollListsYPos + 20,labelWidth,20); keyMapScrollBarTitle2.init(mapInfoXPos + 200,scrollListsYPos + 20,labelWidth,20);
keyMapScrollBarTitle2.setText(lang.get("MapTitle2")); keyMapScrollBarTitle2.setText(lang.get("MapTitle2"));
keyMapScrollBarTitle2.setFont(CoreData::getInstance().getMenuFontBig());
int tilesetInfoXPos = 530; int tilesetInfoXPos = 530;
keyTilesetScrollBarTitle1.registerGraphicComponent(containerName,"keyTilesetScrollBarTitle1"); keyTilesetScrollBarTitle1.registerGraphicComponent(containerName,"keyTilesetScrollBarTitle1");
keyTilesetScrollBarTitle1.init(tilesetInfoXPos,scrollListsYPos + 20,labelWidth,20); keyTilesetScrollBarTitle1.init(tilesetInfoXPos,scrollListsYPos + 20,labelWidth,20);
keyTilesetScrollBarTitle1.setText(lang.get("TilesetTitle1")); keyTilesetScrollBarTitle1.setText(lang.get("TilesetTitle1"));
keyTilesetScrollBarTitle1.setFont(CoreData::getInstance().getMenuFontBig());
mainMessageBoxState = ftpmsg_None; mainMessageBoxState = ftpmsg_None;
mainMessageBox.registerGraphicComponent(containerName,"mainMessageBox"); mainMessageBox.registerGraphicComponent(containerName,"mainMessageBox");
@ -136,7 +139,7 @@ MenuStateMods::MenuStateMods(Program *program, MainMenu *mainMenu) :
Tokenize(tilesetsMetaData,tilesetListRemote,"\n"); Tokenize(tilesetsMetaData,tilesetListRemote,"\n");
getTilesetsLocalList(); getTilesetsLocalList();
for(int i=0; i < tilesetListRemote.size(); i++) { for(unsigned int i=0; i < tilesetListRemote.size(); i++) {
string tilesetInfo = tilesetListRemote[i]; string tilesetInfo = tilesetListRemote[i];
std::vector<std::string> tilesetInfoList; std::vector<std::string> tilesetInfoList;
Tokenize(tilesetInfo,tilesetInfoList,"|"); Tokenize(tilesetInfo,tilesetInfoList,"|");
@ -162,12 +165,24 @@ MenuStateMods::MenuStateMods(Program *program, MainMenu *mainMenu) :
keyTilesetButtons.push_back(button); keyTilesetButtons.push_back(button);
} }
} }
for(unsigned int i=0; i < tilesetFilesUserData.size(); i++) {
string tilesetName = tilesetFilesUserData[i];
bool alreadyHasTileset = (tilesetCacheList.find(tilesetName) != tilesetCacheList.end());
if(alreadyHasTileset == false) {
GraphicButton *button=new GraphicButton();
button->init(tilesetInfoXPos, keyButtonsYBase, keyButtonsWidth,keyButtonsHeight);
button->setText(tilesetName);
button->setUseCustomTexture(true);
button->setCustomTexture(CoreData::getInstance().getCustomTexture());
keyTilesetButtons.push_back(button);
}
}
techListRemote.clear(); techListRemote.clear();
Tokenize(techsMetaData,techListRemote,"\n"); Tokenize(techsMetaData,techListRemote,"\n");
getTechsLocalList(); getTechsLocalList();
for(int i=0; i < techListRemote.size(); i++) { for(unsigned int i=0; i < techListRemote.size(); i++) {
string techInfo = techListRemote[i]; string techInfo = techListRemote[i];
std::vector<std::string> techInfoList; std::vector<std::string> techInfoList;
Tokenize(techInfo,techInfoList,"|"); Tokenize(techInfo,techInfoList,"|");
@ -198,12 +213,36 @@ MenuStateMods::MenuStateMods(Program *program, MainMenu *mainMenu) :
labelsTech.push_back(label); labelsTech.push_back(label);
} }
} }
for(unsigned int i=0; i < techTreeFilesUserData.size(); i++) {
string techName = techTreeFilesUserData[i];
bool alreadyHasTech = (techCacheList.find(techName) != techCacheList.end());
if(alreadyHasTech == false) {
vector<string> techPaths = config.getPathListForType(ptTechs);
string &techPath = techPaths[1];
endPathWithSlash(techPath);
vector<string> factions;
findAll(techPath + techName + "/factions/*.", factions, false, false);
GraphicButton *button=new GraphicButton();
button->init(techInfoXPos, keyButtonsYBase, keyButtonsWidth,keyButtonsHeight);
button->setText(techName);
button->setUseCustomTexture(true);
button->setCustomTexture(CoreData::getInstance().getCustomTexture());
keyTechButtons.push_back(button);
int techFactionCount = factions.size();
GraphicLabel *label=new GraphicLabel();
label->init(techInfoXPos + keyButtonsWidth+10,keyButtonsYBase,labelWidth,20);
label->setText(intToStr(techFactionCount));
labelsTech.push_back(label);
}
}
mapListRemote.clear(); mapListRemote.clear();
Tokenize(mapsMetaData,mapListRemote,"\n"); Tokenize(mapsMetaData,mapListRemote,"\n");
getMapsLocalList(); getMapsLocalList();
for(int i=0; i < mapListRemote.size(); i++) { for(unsigned int i=0; i < mapListRemote.size(); i++) {
string mapInfo = mapListRemote[i]; string mapInfo = mapListRemote[i];
std::vector<std::string> mapInfoList; std::vector<std::string> mapInfoList;
Tokenize(mapInfo,mapInfoList,"|"); Tokenize(mapInfo,mapInfoList,"|");
@ -223,17 +262,38 @@ MenuStateMods::MenuStateMods(Program *program, MainMenu *mainMenu) :
button->setText(mapName); button->setText(mapName);
button->setUseCustomTexture(true); button->setUseCustomTexture(true);
button->setCustomTexture(CoreData::getInstance().getCustomTexture()); button->setCustomTexture(CoreData::getInstance().getCustomTexture());
//if(alreadyHasMap == true) {
// button->setEnabled(false);
//}
keyMapButtons.push_back(button); keyMapButtons.push_back(button);
GraphicLabel *label=new GraphicLabel(); GraphicLabel *label=new GraphicLabel();
label->init(mapInfoXPos + keyButtonsWidth + 10,keyButtonsYBase,labelWidth,20); label->init(mapInfoXPos + keyButtonsWidth + 10,keyButtonsYBase,labelWidth,20);
label->setText(mapPlayerCount); label->setText(mapPlayerCount);
labelsMap.push_back(label); labelsMap.push_back(label);
} }
} }
for(unsigned int i=0; i < mapFilesUserData.size(); i++) {
string mapName = mapFilesUserData[i];
bool alreadyHasMap = (mapCacheList.find(mapName) != mapCacheList.end());
if(alreadyHasMap == false) {
vector<string> mapPaths = config.getPathListForType(ptMaps);
string &mapPath = mapPaths[1];
endPathWithSlash(mapPath);
mapPath += mapName;
MapInfo mapInfo = loadMapInfo(mapPath);
GraphicButton *button=new GraphicButton();
button->init(mapInfoXPos, keyButtonsYBase, keyButtonsWidth,keyButtonsHeight);
button->setText(mapName);
button->setUseCustomTexture(true);
button->setCustomTexture(CoreData::getInstance().getCustomTexture());
keyMapButtons.push_back(button);
int mapPlayerCount = mapInfo.players;
GraphicLabel *label=new GraphicLabel();
label->init(mapInfoXPos + keyButtonsWidth + 10,keyButtonsYBase,labelWidth,20);
label->setText(intToStr(mapPlayerCount));
labelsMap.push_back(label);
}
}
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__); SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
@ -300,11 +360,48 @@ MenuStateMods::MenuStateMods(Program *program, MainMenu *mainMenu) :
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line %d]\n",__FILE__,__FUNCTION__,__LINE__); SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line %d]\n",__FILE__,__FUNCTION__,__LINE__);
} }
MapInfo MenuStateMods::loadMapInfo(string file) {
Lang &lang= Lang::getInstance();
MapInfo mapInfo;
//memset(&mapInfo,0,sizeof(mapInfo));
try{
FILE *f= fopen(file.c_str(), "rb");
if(f != NULL) {
MapFileHeader header;
size_t readBytes = fread(&header, sizeof(MapFileHeader), 1, f);
mapInfo.size.x= header.width;
mapInfo.size.y= header.height;
mapInfo.players= header.maxFactions;
mapInfo.desc= lang.get("MaxPlayers")+": "+intToStr(mapInfo.players)+"\n";
mapInfo.desc+=lang.get("Size")+": "+intToStr(mapInfo.size.x) + " x " + intToStr(mapInfo.size.y);
fclose(f);
}
}
catch(exception &e) {
SystemFlags::OutputDebug(SystemFlags::debugError,"In [%s::%s Line: %d] Error [%s] loading map [%s]\n",__FILE__,__FUNCTION__,__LINE__,e.what(),file.c_str());
throw runtime_error("Error loading map file: [" + file + "] msg: " + e.what());
}
return mapInfo;
}
void MenuStateMods::getTechsLocalList() { void MenuStateMods::getTechsLocalList() {
Config &config = Config::getInstance(); Config &config = Config::getInstance();
vector<string> results; vector<string> results;
findDirs(config.getPathListForType(ptTechs), results); findDirs(config.getPathListForType(ptTechs), results);
techTreeFiles = results; techTreeFiles = results;
techTreeFilesUserData.clear();
if(config.getPathListForType(ptTechs).size() > 1) {
string path = config.getPathListForType(ptTechs)[1];
endPathWithSlash(path);
findDirs(path, techTreeFilesUserData, false, false);
}
} }
void MenuStateMods::refreshTechs() { void MenuStateMods::refreshTechs() {
@ -335,6 +432,13 @@ void MenuStateMods::getTilesetsLocalList() {
vector<string> results; vector<string> results;
findDirs(config.getPathListForType(ptTilesets), results); findDirs(config.getPathListForType(ptTilesets), results);
tilesetFiles = results; tilesetFiles = results;
tilesetFilesUserData.clear();
if(config.getPathListForType(ptTilesets).size() > 1) {
string path = config.getPathListForType(ptTilesets)[1];
endPathWithSlash(path);
findDirs(path, tilesetFilesUserData, false, false);
}
} }
void MenuStateMods::refreshTilesets() { void MenuStateMods::refreshTilesets() {
@ -372,6 +476,28 @@ void MenuStateMods::getMapsLocalList() {
copy(allMaps.begin(), allMaps.end(), std::back_inserter(results)); copy(allMaps.begin(), allMaps.end(), std::back_inserter(results));
mapFiles = results; mapFiles = results;
mapFilesUserData.clear();
if(config.getPathListForType(ptMaps).size() > 1) {
string path = config.getPathListForType(ptMaps)[1];
endPathWithSlash(path);
vector<string> results2;
set<string> allMaps2;
findAll(path + "*.gbm", results2, false, false);
copy(results2.begin(), results2.end(), std::inserter(allMaps2, allMaps2.begin()));
results2.clear();
findAll(path + "*.mgm", results2, false, false);
copy(results2.begin(), results2.end(), std::inserter(allMaps2, allMaps2.begin()));
results2.clear();
copy(allMaps2.begin(), allMaps2.end(), std::back_inserter(results2));
mapFilesUserData = results2;
printf("\n\nMap path [%s] mapFilesUserData.size() = %d\n\n\n",path.c_str(),mapFilesUserData.size());
}
} }
void MenuStateMods::refreshMaps() { void MenuStateMods::refreshMaps() {
@ -482,6 +608,21 @@ void MenuStateMods::mouseClick(int x, int y, MouseButton mouseButton) {
if(SystemFlags::VERBOSE_MODE_ENABLED) printf("Removing Map [%s]\n",removeMap.c_str()); if(SystemFlags::VERBOSE_MODE_ENABLED) printf("Removing Map [%s]\n",removeMap.c_str());
removeFile(removeMap); removeFile(removeMap);
bool remoteHasMap = (mapCacheList.find(selectedMapName) != mapCacheList.end());
if(remoteHasMap == false) {
for(unsigned int i = 0; i < keyMapButtons.size(); ++i) {
GraphicButton *button = keyMapButtons[i];
if(button != NULL && button->getText() == selectedMapName) {
delete button;
keyMapButtons.erase(keyMapButtons.begin() + i);
labelsMap.erase(labelsMap.begin() + i);
keyMapScrollBar.setElementCount(keyMapButtons.size());
break;
}
}
}
selectedMapName = ""; selectedMapName = "";
refreshMaps(); refreshMaps();
Checksum::clearFileCache(); Checksum::clearFileCache();
@ -500,6 +641,18 @@ void MenuStateMods::mouseClick(int x, int y, MouseButton mouseButton) {
if(SystemFlags::VERBOSE_MODE_ENABLED) printf("Removing Tileset [%s]\n",removeTileset.c_str()); if(SystemFlags::VERBOSE_MODE_ENABLED) printf("Removing Tileset [%s]\n",removeTileset.c_str());
removeFolder(removeTileset); removeFolder(removeTileset);
bool remoteHasTileset = (tilesetCacheList.find(selectedTilesetName) != tilesetCacheList.end());
if(remoteHasTileset == false) {
for(unsigned int i = 0; i < keyTilesetButtons.size(); ++i) {
GraphicButton *button = keyTilesetButtons[i];
if(button != NULL && button->getText() == selectedTilesetName) {
delete button;
keyTilesetButtons.erase(keyTilesetButtons.begin() + i);
keyTilesetScrollBar.setElementCount(keyTilesetButtons.size());
break;
}
}
}
MutexSafeWrapper safeMutexFTPProgress((ftpClientThread != NULL ? ftpClientThread->getProgressMutex() : NULL),string(__FILE__) + "_" + intToStr(__LINE__)); MutexSafeWrapper safeMutexFTPProgress((ftpClientThread != NULL ? ftpClientThread->getProgressMutex() : NULL),string(__FILE__) + "_" + intToStr(__LINE__));
safeMutexFTPProgress.Lock(); safeMutexFTPProgress.Lock();
Checksum::clearFileCache(); Checksum::clearFileCache();
@ -527,6 +680,20 @@ void MenuStateMods::mouseClick(int x, int y, MouseButton mouseButton) {
if(SystemFlags::VERBOSE_MODE_ENABLED) printf("Removing Techtree [%s]\n",removeTech.c_str()); if(SystemFlags::VERBOSE_MODE_ENABLED) printf("Removing Techtree [%s]\n",removeTech.c_str());
removeFolder(removeTech); removeFolder(removeTech);
bool remoteHasTech = (techCacheList.find(selectedTechName) != techCacheList.end());
if(remoteHasTech == false) {
for(unsigned int i = 0; i < keyTechButtons.size(); ++i) {
GraphicButton *button = keyTechButtons[i];
if(button != NULL && button->getText() == selectedTechName) {
delete button;
keyTechButtons.erase(keyTechButtons.begin() + i);
labelsTech.erase(labelsTech.begin() + i);
keyTechScrollBar.setElementCount(keyTechButtons.size());
break;
}
}
}
MutexSafeWrapper safeMutexFTPProgress((ftpClientThread != NULL ? ftpClientThread->getProgressMutex() : NULL),string(__FILE__) + "_" + intToStr(__LINE__)); MutexSafeWrapper safeMutexFTPProgress((ftpClientThread != NULL ? ftpClientThread->getProgressMutex() : NULL),string(__FILE__) + "_" + intToStr(__LINE__));
// Clear the CRC file Cache // Clear the CRC file Cache
safeMutexFTPProgress.Lock(); safeMutexFTPProgress.Lock();
@ -697,63 +864,36 @@ void MenuStateMods::mouseClick(int x, int y, MouseButton mouseButton) {
} }
else { else {
if(keyMapScrollBar.getElementCount() != 0) { if(keyMapScrollBar.getElementCount() != 0) {
for (int i = keyMapScrollBar.getVisibleStart(); i for (int i = keyMapScrollBar.getVisibleStart();
<= keyMapScrollBar.getVisibleEnd(); ++i) { i <= keyMapScrollBar.getVisibleEnd(); ++i) {
if(keyMapButtons[i]->mouseClick(x, y) && keyMapButtons[i]->getEnabled()) { if(keyMapButtons[i]->mouseClick(x, y) && keyMapButtons[i]->getEnabled()) {
string mapName = keyMapButtons[i]->getText(); string mapName = keyMapButtons[i]->getText();
if(mapName != "") { if(mapName != "") {
//string mapURL = mapCacheList[mapName];
//ftpClientThread->addMapToRequests(mapName,mapURL);
//MutexSafeWrapper safeMutexFTPProgress((ftpClientThread != NULL ? ftpClientThread->getProgressMutex() : NULL),string(__FILE__) + "_" + intToStr(__LINE__));
//fileFTPProgressList[mapName] = pair<int,string>(0,"");
//safeMutexFTPProgress.ReleaseLock();
selectedMapName = mapName; selectedMapName = mapName;
//bool alreadyHasMap = (std::find(mapFiles.begin(),mapFiles.end(),selectedMapName) != mapFiles.end());
//buttonInstallMap.setEnabled(alreadyHasMap == false);
//buttonRemoveMap.setEnabled(alreadyHasMap);
} }
break; break;
} }
} }
} }
if(keyTechScrollBar.getElementCount() != 0) { if(keyTechScrollBar.getElementCount() != 0) {
for (int i = keyTechScrollBar.getVisibleStart(); i for (int i = keyTechScrollBar.getVisibleStart();
<= keyTechScrollBar.getVisibleEnd(); ++i) { i <= keyTechScrollBar.getVisibleEnd(); ++i) {
if(keyTechButtons[i]->mouseClick(x, y) && keyTechButtons[i]->getEnabled()) { if(keyTechButtons[i]->mouseClick(x, y) && keyTechButtons[i]->getEnabled()) {
string techName = keyTechButtons[i]->getText(); string techName = keyTechButtons[i]->getText();
if(techName != "") { if(techName != "") {
//string techURL = techCacheList[techName];
//ftpClientThread->addTechtreeToRequests(techName,techURL);
//MutexSafeWrapper safeMutexFTPProgress((ftpClientThread != NULL ? ftpClientThread->getProgressMutex() : NULL),string(__FILE__) + "_" + intToStr(__LINE__));
//fileFTPProgressList[techName] = pair<int,string>(0,"");
//safeMutexFTPProgress.ReleaseLock();
selectedTechName = techName; selectedTechName = techName;
//bool alreadyHasTech = (std::find(techTreeFiles.begin(),techTreeFiles.end(),selectedTechName) != techTreeFiles.end());
//buttonInstallTech.setEnabled(alreadyHasTech == false);
//buttonRemoveTech.setEnabled(alreadyHasTech);
} }
break; break;
} }
} }
} }
if(keyTilesetScrollBar.getElementCount() != 0) { if(keyTilesetScrollBar.getElementCount() != 0) {
for (int i = keyTilesetScrollBar.getVisibleStart(); i for (int i = keyTilesetScrollBar.getVisibleStart();
<= keyTilesetScrollBar.getVisibleEnd(); ++i) { i <= keyTilesetScrollBar.getVisibleEnd(); ++i) {
if(keyTilesetButtons[i]->mouseClick(x, y) && keyTilesetButtons[i]->getEnabled()) { if(keyTilesetButtons[i]->mouseClick(x, y) && keyTilesetButtons[i]->getEnabled()) {
string tilesetName = keyTilesetButtons[i]->getText(); string tilesetName = keyTilesetButtons[i]->getText();
if(tilesetName != "") { if(tilesetName != "") {
//string tilesetURL = tilesetCacheList[tilesetName];
//ftpClientThread->addTilesetToRequests(tilesetName,tilesetURL);
//MutexSafeWrapper safeMutexFTPProgress((ftpClientThread != NULL ? ftpClientThread->getProgressMutex() : NULL),string(__FILE__) + "_" + intToStr(__LINE__));
//fileFTPProgressList[tilesetName] = pair<int,string>(0,"");
//safeMutexFTPProgress.ReleaseLock();
selectedTilesetName = tilesetName; selectedTilesetName = tilesetName;
//bool alreadyHasTileset = (std::find(tilesetFiles.begin(),tilesetFiles.end(),selectedTilesetName) != tilesetFiles.end());
//buttonInstallTileset.setEnabled(alreadyHasTileset == false);
//buttonRemoveTileset.setEnabled(alreadyHasTileset);
} }
break; break;
} }
@ -809,8 +949,6 @@ void MenuStateMods::mouseMove(int x, int y, const MouseState *ms) {
void MenuStateMods::render() { void MenuStateMods::render() {
try { try {
//SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line %d]\n",__FILE__,__FUNCTION__,__LINE__);
Renderer &renderer= Renderer::getInstance(); Renderer &renderer= Renderer::getInstance();
renderer.renderButton(&buttonReturn); renderer.renderButton(&buttonReturn);
@ -821,8 +959,6 @@ void MenuStateMods::render() {
renderer.renderButton(&buttonInstallMap); renderer.renderButton(&buttonInstallMap);
renderer.renderButton(&buttonRemoveMap); renderer.renderButton(&buttonRemoveMap);
//renderer.renderTextureQuad(300,200,200,400,NULL,0.5);
// Render Tech List // Render Tech List
renderer.renderLabel(&keyTechScrollBarTitle1); renderer.renderLabel(&keyTechScrollBarTitle1);
renderer.renderLabel(&keyTechScrollBarTitle2); renderer.renderLabel(&keyTechScrollBarTitle2);
@ -830,16 +966,17 @@ void MenuStateMods::render() {
for(int i = keyTechScrollBar.getVisibleStart(); for(int i = keyTechScrollBar.getVisibleStart();
i <= keyTechScrollBar.getVisibleEnd(); ++i) { i <= keyTechScrollBar.getVisibleEnd(); ++i) {
bool alreadyHasTech = (std::find(techTreeFiles.begin(),techTreeFiles.end(),keyTechButtons[i]->getText()) != techTreeFiles.end()); bool alreadyHasTech = (std::find(techTreeFiles.begin(),techTreeFiles.end(),keyTechButtons[i]->getText()) != techTreeFiles.end());
if(alreadyHasTech == true) { if(keyTechButtons[i]->getText() == selectedTechName) {
Vec4f buttonColor = CYAN; bool lightedOverride = true;
buttonColor.w = 0.7f; renderer.renderButton(keyTechButtons[i],&WHITE,&lightedOverride);
}
else if(alreadyHasTech == true) {
Vec4f buttonColor = WHITE;
buttonColor.w = 0.75f;
renderer.renderButton(keyTechButtons[i],&buttonColor); renderer.renderButton(keyTechButtons[i],&buttonColor);
} }
else if(keyTechButtons[i]->getText() == selectedTechName) {
renderer.renderButton(keyTechButtons[i],&YELLOW);
}
else { else {
Vec4f fontColor=Vec4f(1.f, 1.f, 1.f, 0.7f); Vec4f fontColor=Vec4f(200.0f/255.0f, 187.0f/255.0f, 190.0f/255.0f, 0.75f);
renderer.renderButton(keyTechButtons[i],&fontColor); renderer.renderButton(keyTechButtons[i],&fontColor);
} }
renderer.renderLabel(labelsTech[i]); renderer.renderLabel(labelsTech[i]);
@ -853,16 +990,17 @@ void MenuStateMods::render() {
for(int i = keyTilesetScrollBar.getVisibleStart(); for(int i = keyTilesetScrollBar.getVisibleStart();
i <= keyTilesetScrollBar.getVisibleEnd(); ++i) { i <= keyTilesetScrollBar.getVisibleEnd(); ++i) {
bool alreadyHasTileset = (std::find(tilesetFiles.begin(),tilesetFiles.end(),keyTilesetButtons[i]->getText()) != tilesetFiles.end()); bool alreadyHasTileset = (std::find(tilesetFiles.begin(),tilesetFiles.end(),keyTilesetButtons[i]->getText()) != tilesetFiles.end());
if(alreadyHasTileset == true) { if(keyTilesetButtons[i]->getText() == selectedTilesetName) {
Vec4f buttonColor = CYAN; bool lightedOverride = true;
buttonColor.w = 0.7f; renderer.renderButton(keyTilesetButtons[i],&WHITE,&lightedOverride);
}
else if(alreadyHasTileset == true) {
Vec4f buttonColor = WHITE;
buttonColor.w = 0.75f;
renderer.renderButton(keyTilesetButtons[i],&buttonColor); renderer.renderButton(keyTilesetButtons[i],&buttonColor);
} }
else if(keyTilesetButtons[i]->getText() == selectedTilesetName) {
renderer.renderButton(keyTilesetButtons[i],&YELLOW);
}
else { else {
Vec4f fontColor=Vec4f(1.f, 1.f, 1.f, 0.7f); Vec4f fontColor=Vec4f(200.0f/255.0f, 187.0f/255.0f, 190.0f/255.0f, 0.75f);
renderer.renderButton(keyTilesetButtons[i],&fontColor); renderer.renderButton(keyTilesetButtons[i],&fontColor);
} }
} }
@ -876,16 +1014,17 @@ void MenuStateMods::render() {
for(int i = keyMapScrollBar.getVisibleStart(); for(int i = keyMapScrollBar.getVisibleStart();
i <= keyMapScrollBar.getVisibleEnd(); ++i) { i <= keyMapScrollBar.getVisibleEnd(); ++i) {
bool alreadyHasMap = (std::find(mapFiles.begin(),mapFiles.end(),keyMapButtons[i]->getText()) != mapFiles.end()); bool alreadyHasMap = (std::find(mapFiles.begin(),mapFiles.end(),keyMapButtons[i]->getText()) != mapFiles.end());
if(alreadyHasMap == true) { if(keyMapButtons[i]->getText() == selectedMapName) {
Vec4f buttonColor = CYAN; bool lightedOverride = true;
buttonColor.w = 0.7f; renderer.renderButton(keyMapButtons[i],&WHITE,&lightedOverride);
}
else if(alreadyHasMap == true) {
Vec4f buttonColor = WHITE;
buttonColor.w = 0.75f;
renderer.renderButton(keyMapButtons[i],&buttonColor); renderer.renderButton(keyMapButtons[i],&buttonColor);
} }
else if(keyMapButtons[i]->getText() == selectedMapName) {
renderer.renderButton(keyMapButtons[i],&YELLOW);
}
else { else {
Vec4f fontColor=Vec4f(1.f, 1.f, 1.f, 0.7f); Vec4f fontColor=Vec4f(200.0f/255.0f, 187.0f/255.0f, 190.0f/255.0f, 0.75f);
renderer.renderButton(keyMapButtons[i],&fontColor); renderer.renderButton(keyMapButtons[i],&fontColor);
} }
renderer.renderLabel(labelsMap[i]); renderer.renderLabel(labelsMap[i]);
@ -936,8 +1075,14 @@ void MenuStateMods::update() {
// Tech List // Tech List
if (keyTechScrollBar.getElementCount() != 0) { if (keyTechScrollBar.getElementCount() != 0) {
for (int i = keyTechScrollBar.getVisibleStart(); i for (int i = keyTechScrollBar.getVisibleStart();
<= keyTechScrollBar.getVisibleEnd(); ++i) { i <= keyTechScrollBar.getVisibleEnd(); ++i) {
if(i >= keyTechButtons.size()) {
char szBuf[1024]="";
sprintf(szBuf,"i >= keyTechButtons.size(), i = %d, keyTechButtons.size() = %d",i,(int)keyTechButtons.size());
throw runtime_error(szBuf);
}
keyTechButtons[i]->setY(keyButtonsYBase - keyButtonsLineHeight * (i keyTechButtons[i]->setY(keyButtonsYBase - keyButtonsLineHeight * (i
- keyTechScrollBar.getVisibleStart())); - keyTechScrollBar.getVisibleStart()));
labelsTech[i]->setY(keyButtonsYBase - keyButtonsLineHeight * (i labelsTech[i]->setY(keyButtonsYBase - keyButtonsLineHeight * (i
@ -947,19 +1092,30 @@ void MenuStateMods::update() {
// Tech List // Tech List
if (keyTilesetScrollBar.getElementCount() != 0) { if (keyTilesetScrollBar.getElementCount() != 0) {
for (int i = keyTilesetScrollBar.getVisibleStart(); i for (int i = keyTilesetScrollBar.getVisibleStart();
<= keyTilesetScrollBar.getVisibleEnd(); ++i) { i <= keyTilesetScrollBar.getVisibleEnd(); ++i) {
keyTilesetButtons[i]->setY(keyButtonsYBase - keyButtonsLineHeight * (i if(i >= keyTilesetButtons.size()) {
- keyTilesetScrollBar.getVisibleStart())); char szBuf[1024]="";
labelsTech[i]->setY(keyButtonsYBase - keyButtonsLineHeight * (i sprintf(szBuf,"i >= keyTilesetButtons.size(), i = %d, keyTilesetButtons.size() = %d",i,(int)keyTilesetButtons.size());
- keyTilesetScrollBar.getVisibleStart())); throw runtime_error(szBuf);
}
int yPos = keyButtonsYBase - keyButtonsLineHeight *
(i - keyTilesetScrollBar.getVisibleStart());
keyTilesetButtons[i]->setY(yPos);
} }
} }
// Map List // Map List
if (keyMapScrollBar.getElementCount() != 0) { if (keyMapScrollBar.getElementCount() != 0) {
for (int i = keyMapScrollBar.getVisibleStart(); i for (int i = keyMapScrollBar.getVisibleStart();
<= keyMapScrollBar.getVisibleEnd(); ++i) { i <= keyMapScrollBar.getVisibleEnd(); ++i) {
if(i >= keyMapButtons.size()) {
char szBuf[1024]="";
sprintf(szBuf,"i >= keyMapButtons.size(), i = %d, keyMapButtons.size() = %d",i,(int)keyMapButtons.size());
throw runtime_error(szBuf);
}
keyMapButtons[i]->setY(keyButtonsYBase - keyButtonsLineHeight * (i keyMapButtons[i]->setY(keyButtonsYBase - keyButtonsLineHeight * (i
- keyMapScrollBar.getVisibleStart())); - keyMapScrollBar.getVisibleStart()));
labelsMap[i]->setY(keyButtonsYBase - keyButtonsLineHeight * (i labelsMap[i]->setY(keyButtonsYBase - keyButtonsLineHeight * (i

View File

@ -80,19 +80,20 @@ private:
string selectedTechName; string selectedTechName;
std::vector<std::string> techListRemote; std::vector<std::string> techListRemote;
std::map<string, string> techCacheList; std::map<string, string> techCacheList;
vector<string> techTreeFiles;
vector<string> techTreeFilesUserData;
string selectedTilesetName; string selectedTilesetName;
std::vector<std::string> tilesetListRemote; std::vector<std::string> tilesetListRemote;
std::map<string, string> tilesetCacheList; std::map<string, string> tilesetCacheList;
vector<string> tilesetFiles;
vector<string> tilesetFilesUserData;
string selectedMapName; string selectedMapName;
std::vector<std::string> mapListRemote; std::vector<std::string> mapListRemote;
std::map<string, string> mapCacheList; std::map<string, string> mapCacheList;
vector<string> mapFiles; vector<string> mapFiles;
vector<string> techTreeFiles; vector<string> mapFilesUserData;
vector<string> tilesetFiles;
vector<string> factionFiles;
FTPClientThread *ftpClientThread; FTPClientThread *ftpClientThread;
std::map<string,pair<int,string> > fileFTPProgressList; std::map<string,pair<int,string> > fileFTPProgressList;
@ -122,6 +123,7 @@ public:
private: private:
MapInfo loadMapInfo(string file);
void showMessageBox(const string &text, const string &header, bool toggle); void showMessageBox(const string &text, const string &header, bool toggle);
void clearUserButtons(); void clearUserButtons();
virtual void FTPClient_CallbackEvent(string itemName, virtual void FTPClient_CallbackEvent(string itemName,