- updates to mod menu for better user experience
This commit is contained in:
parent
9096449919
commit
1a783b3bba
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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,
|
||||||
|
|
Loading…
Reference in New Issue
Block a user