mirror of
https://github.com/glest/glest-source.git
synced 2025-08-17 21:51:17 +02:00
bugfix for scenario folder not finding language file
This commit is contained in:
86
source/glest_game/global/lang.cpp
Normal file
86
source/glest_game/global/lang.cpp
Normal file
@@ -0,0 +1,86 @@
|
||||
// ==============================================================
|
||||
// This file is part of Glest (www.glest.org)
|
||||
//
|
||||
// Copyright (C) 2001-2008 Marti<74>o Figueroa
|
||||
//
|
||||
// You can redistribute this code and/or modify it under
|
||||
// the terms of the GNU General Public License as published
|
||||
// by the Free Software Foundation; either version 2 of the
|
||||
// License, or (at your option) any later version
|
||||
// ==============================================================
|
||||
|
||||
#include "lang.h"
|
||||
|
||||
#include <stdexcept>
|
||||
|
||||
#include "logger.h"
|
||||
#include "util.h"
|
||||
#include "platform_util.h"
|
||||
#include "leak_dumper.h"
|
||||
|
||||
using namespace std;
|
||||
using namespace Shared::Util;
|
||||
using namespace Shared::Platform;
|
||||
|
||||
namespace Glest{ namespace Game{
|
||||
|
||||
// =====================================================
|
||||
// class Lang
|
||||
// =====================================================
|
||||
|
||||
Lang &Lang::getInstance(){
|
||||
static Lang lang;
|
||||
return lang;
|
||||
}
|
||||
|
||||
void Lang::loadStrings(const string &language){
|
||||
this->language= language;
|
||||
strings.clear();
|
||||
strings.load("data/lang/"+language+".lng");
|
||||
}
|
||||
|
||||
void Lang::loadScenarioStrings(const string &scenarioDir, const string &scenarioName){
|
||||
string path= scenarioDir + "/" + scenarioName + "/" + scenarioName + "_" + language + ".lng";
|
||||
if(EndsWith(scenarioDir, ".xml") == true) {
|
||||
path= scenarioDir;
|
||||
path = path.erase(path.size()-4,4);
|
||||
path += "_" + language + ".lng";
|
||||
}
|
||||
|
||||
|
||||
scenarioStrings.clear();
|
||||
|
||||
//try to load the current language first
|
||||
if(fileExists(path)){
|
||||
scenarioStrings.load(path);
|
||||
}
|
||||
else{
|
||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] path not found [%s]\n",__FILE__,__FUNCTION__,__LINE__,path.c_str());
|
||||
|
||||
//try english otherwise
|
||||
string path= scenarioDir + "/" +scenarioName + "/" + scenarioName + "_english.lng";
|
||||
if(fileExists(path)){
|
||||
scenarioStrings.load(path);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
string Lang::get(const string &s){
|
||||
try{
|
||||
return strings.getString(s);
|
||||
}
|
||||
catch(exception &){
|
||||
return "???" + s + "???";
|
||||
}
|
||||
}
|
||||
|
||||
string Lang::getScenarioString(const string &s){
|
||||
try{
|
||||
return scenarioStrings.getString(s);
|
||||
}
|
||||
catch(exception &){
|
||||
return "???" + s + "???";
|
||||
}
|
||||
}
|
||||
|
||||
}}//end namespace
|
242
source/glest_game/menu/menu_state_options.cpp
Normal file
242
source/glest_game/menu/menu_state_options.cpp
Normal file
@@ -0,0 +1,242 @@
|
||||
// ==============================================================
|
||||
// This file is part of Glest (www.glest.org)
|
||||
//
|
||||
// Copyright (C) 2001-2005 Marti<74>o Figueroa
|
||||
//
|
||||
// You can redistribute this code and/or modify it under
|
||||
// the terms of the GNU General Public License as published
|
||||
// by the Free Software Foundation; either version 2 of the
|
||||
// License, or (at your option) any later version
|
||||
// ==============================================================
|
||||
|
||||
#include "menu_state_options.h"
|
||||
|
||||
#include "renderer.h"
|
||||
#include "sound_renderer.h"
|
||||
#include "core_data.h"
|
||||
#include "config.h"
|
||||
#include "menu_state_root.h"
|
||||
#include "util.h"
|
||||
|
||||
#include "leak_dumper.h"
|
||||
|
||||
using namespace Shared::Util;
|
||||
|
||||
namespace Glest{ namespace Game{
|
||||
|
||||
// =====================================================
|
||||
// class MenuStateOptions
|
||||
// =====================================================
|
||||
|
||||
MenuStateOptions::MenuStateOptions(Program *program, MainMenu *mainMenu):
|
||||
MenuState(program, mainMenu, "config")
|
||||
{
|
||||
Lang &lang= Lang::getInstance();
|
||||
Config &config= Config::getInstance();
|
||||
|
||||
//create
|
||||
buttonReturn.init(200, 150, 125);
|
||||
buttonAutoConfig.init(375, 150, 125);
|
||||
|
||||
//labels
|
||||
labelVolumeFx.init(200, 530);
|
||||
labelVolumeAmbient.init(200, 500);
|
||||
labelVolumeMusic.init(200, 470);
|
||||
|
||||
labelLang.init(200, 400);
|
||||
|
||||
labelFilter.init(200, 340);
|
||||
labelShadows.init(200, 310);
|
||||
labelTextures3D.init(200, 280);
|
||||
labelLights.init(200, 250);
|
||||
labelUnitParticles.init(200,220);
|
||||
|
||||
//list boxes
|
||||
listBoxVolumeFx.init(350, 530, 80);
|
||||
listBoxVolumeAmbient.init(350, 500, 80);
|
||||
listBoxVolumeMusic.init(350, 470, 80);
|
||||
listBoxMusicSelect.init(350, 440, 150);
|
||||
|
||||
listBoxLang.init(350, 400, 170);
|
||||
|
||||
listBoxFilter.init(350, 340, 170);
|
||||
listBoxShadows.init(350, 310, 170);
|
||||
listBoxTextures3D.init(350, 280, 80);
|
||||
listBoxLights.init(350, 250, 80);
|
||||
listBoxUnitParticles.init(350,220,80);
|
||||
|
||||
//set text
|
||||
buttonReturn.setText(lang.get("Return"));
|
||||
buttonAutoConfig.setText(lang.get("AutoConfig"));
|
||||
labelLang.setText(lang.get("Language"));
|
||||
labelShadows.setText(lang.get("Shadows"));
|
||||
labelFilter.setText(lang.get("Filter"));
|
||||
labelTextures3D.setText(lang.get("Textures3D"));
|
||||
labelLights.setText(lang.get("MaxLights"));
|
||||
labelUnitParticles.setText(lang.get("ShowUnitParticles"));
|
||||
labelVolumeFx.setText(lang.get("FxVolume"));
|
||||
labelVolumeAmbient.setText(lang.get("AmbientVolume"));
|
||||
labelVolumeMusic.setText(lang.get("MusicVolume"));
|
||||
|
||||
//sound
|
||||
|
||||
//lang
|
||||
vector<string> langResults;
|
||||
findAll("data/lang/*.lng", langResults, true);
|
||||
if(langResults.empty()){
|
||||
throw runtime_error("There is no lang file");
|
||||
}
|
||||
listBoxLang.setItems(langResults);
|
||||
listBoxLang.setSelectedItem(config.getString("Lang"));
|
||||
|
||||
//shadows
|
||||
for(int i= 0; i<Renderer::sCount; ++i){
|
||||
listBoxShadows.pushBackItem(lang.get(Renderer::shadowsToStr(static_cast<Renderer::Shadows>(i))));
|
||||
}
|
||||
|
||||
string str= config.getString("Shadows");
|
||||
listBoxShadows.setSelectedItemIndex(clamp(Renderer::strToShadows(str), 0, Renderer::sCount-1));
|
||||
|
||||
//filter
|
||||
listBoxFilter.pushBackItem("Bilinear");
|
||||
listBoxFilter.pushBackItem("Trilinear");
|
||||
listBoxFilter.setSelectedItem(config.getString("Filter"));
|
||||
|
||||
//textures 3d
|
||||
listBoxTextures3D.pushBackItem(lang.get("No"));
|
||||
listBoxTextures3D.pushBackItem(lang.get("Yes"));
|
||||
listBoxTextures3D.setSelectedItemIndex(clamp(config.getInt("Textures3D"), 0, 1));
|
||||
|
||||
//textures 3d
|
||||
listBoxUnitParticles.pushBackItem(lang.get("No"));
|
||||
listBoxUnitParticles.pushBackItem(lang.get("Yes"));
|
||||
listBoxUnitParticles.setSelectedItemIndex(clamp(config.getBool("UnitParticles"), 0, 1));
|
||||
|
||||
//lights
|
||||
for(int i= 1; i<=8; ++i){
|
||||
listBoxLights.pushBackItem(intToStr(i));
|
||||
}
|
||||
listBoxLights.setSelectedItemIndex(clamp(config.getInt("MaxLights")-1, 0, 7));
|
||||
|
||||
//sound
|
||||
for(int i=0; i<=100; i+=5){
|
||||
listBoxVolumeFx.pushBackItem(intToStr(i));
|
||||
listBoxVolumeAmbient.pushBackItem(intToStr(i));
|
||||
listBoxVolumeMusic.pushBackItem(intToStr(i));
|
||||
}
|
||||
listBoxVolumeFx.setSelectedItem(intToStr(config.getInt("SoundVolumeFx")/5*5));
|
||||
listBoxVolumeAmbient.setSelectedItem(intToStr(config.getInt("SoundVolumeAmbient")/5*5));
|
||||
listBoxVolumeMusic.setSelectedItem(intToStr(config.getInt("SoundVolumeMusic")/5*5));
|
||||
}
|
||||
|
||||
void MenuStateOptions::mouseClick(int x, int y, MouseButton mouseButton){
|
||||
|
||||
Config &config= Config::getInstance();
|
||||
Lang &lang= Lang::getInstance();
|
||||
CoreData &coreData= CoreData::getInstance();
|
||||
SoundRenderer &soundRenderer= SoundRenderer::getInstance();
|
||||
|
||||
if(buttonReturn.mouseClick(x, y)){
|
||||
soundRenderer.playFx(coreData.getClickSoundA());
|
||||
mainMenu->setState(new MenuStateRoot(program, mainMenu));
|
||||
}
|
||||
else if(buttonAutoConfig.mouseClick(x, y)){
|
||||
soundRenderer.playFx(coreData.getClickSoundA());
|
||||
Renderer::getInstance().autoConfig();
|
||||
saveConfig();
|
||||
mainMenu->setState(new MenuStateOptions(program, mainMenu));
|
||||
}
|
||||
else if(listBoxLang.mouseClick(x, y)){
|
||||
config.setString("Lang", listBoxLang.getSelectedItem());
|
||||
lang.loadStrings(config.getString("Lang"));
|
||||
saveConfig();
|
||||
mainMenu->setState(new MenuStateOptions(program, mainMenu));
|
||||
|
||||
}
|
||||
else if(listBoxShadows.mouseClick(x, y)){
|
||||
int index= listBoxShadows.getSelectedItemIndex();
|
||||
config.setString("Shadows", Renderer::shadowsToStr(static_cast<Renderer::Shadows>(index)));
|
||||
saveConfig();
|
||||
}
|
||||
else if(listBoxFilter.mouseClick(x, y)){
|
||||
config.setString("Filter", listBoxFilter.getSelectedItem());
|
||||
saveConfig();
|
||||
}
|
||||
else if(listBoxTextures3D.mouseClick(x, y)){
|
||||
config.setInt("Textures3D", listBoxTextures3D.getSelectedItemIndex());
|
||||
saveConfig();
|
||||
}
|
||||
else if(listBoxUnitParticles.mouseClick(x, y)){
|
||||
config.setBool("UnitParticles", listBoxUnitParticles.getSelectedItemIndex());
|
||||
saveConfig();
|
||||
}
|
||||
else if(listBoxLights.mouseClick(x, y)){
|
||||
config.setInt("MaxLights", listBoxLights.getSelectedItemIndex()+1);
|
||||
saveConfig();
|
||||
}
|
||||
else if(listBoxVolumeFx.mouseClick(x, y)){
|
||||
config.setString("SoundVolumeFx", listBoxVolumeFx.getSelectedItem());
|
||||
saveConfig();
|
||||
}
|
||||
else if(listBoxVolumeAmbient.mouseClick(x, y)){
|
||||
config.setString("SoundVolumeAmbient", listBoxVolumeAmbient.getSelectedItem());
|
||||
saveConfig();
|
||||
}
|
||||
else if(listBoxVolumeMusic.mouseClick(x, y)){
|
||||
CoreData::getInstance().getMenuMusic()->setVolume(strToInt(listBoxVolumeMusic.getSelectedItem())/100.f);
|
||||
config.setString("SoundVolumeMusic", listBoxVolumeMusic.getSelectedItem());
|
||||
saveConfig();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
void MenuStateOptions::mouseMove(int x, int y, const MouseState *ms){
|
||||
buttonReturn.mouseMove(x, y);
|
||||
buttonAutoConfig.mouseMove(x, y);
|
||||
listBoxLang.mouseMove(x, y);
|
||||
listBoxVolumeFx.mouseMove(x, y);
|
||||
listBoxVolumeAmbient.mouseMove(x, y);
|
||||
listBoxVolumeMusic.mouseMove(x, y);
|
||||
listBoxLang.mouseMove(x, y);
|
||||
listBoxFilter.mouseMove(x, y);
|
||||
listBoxShadows.mouseMove(x, y);
|
||||
listBoxTextures3D.mouseMove(x, y);
|
||||
listBoxUnitParticles.mouseMove(x, y);
|
||||
listBoxLights.mouseMove(x, y);
|
||||
}
|
||||
|
||||
void MenuStateOptions::render(){
|
||||
Renderer &renderer= Renderer::getInstance();
|
||||
|
||||
renderer.renderButton(&buttonReturn);
|
||||
renderer.renderButton(&buttonAutoConfig);
|
||||
renderer.renderListBox(&listBoxLang);
|
||||
renderer.renderListBox(&listBoxShadows);
|
||||
renderer.renderListBox(&listBoxTextures3D);
|
||||
renderer.renderListBox(&listBoxUnitParticles);
|
||||
renderer.renderListBox(&listBoxLights);
|
||||
renderer.renderListBox(&listBoxFilter);
|
||||
renderer.renderListBox(&listBoxVolumeFx);
|
||||
renderer.renderListBox(&listBoxVolumeAmbient);
|
||||
renderer.renderListBox(&listBoxVolumeMusic);
|
||||
renderer.renderLabel(&labelLang);
|
||||
renderer.renderLabel(&labelShadows);
|
||||
renderer.renderLabel(&labelTextures3D);
|
||||
renderer.renderLabel(&labelUnitParticles);
|
||||
renderer.renderLabel(&labelLights);
|
||||
renderer.renderLabel(&labelFilter);
|
||||
renderer.renderLabel(&labelVolumeFx);
|
||||
renderer.renderLabel(&labelVolumeAmbient);
|
||||
renderer.renderLabel(&labelVolumeMusic);
|
||||
}
|
||||
|
||||
void MenuStateOptions::saveConfig(){
|
||||
Config &config= Config::getInstance();
|
||||
|
||||
config.save();
|
||||
Renderer::getInstance().loadConfig();
|
||||
SoundRenderer::getInstance().loadConfig();
|
||||
}
|
||||
|
||||
}}//end namespace
|
@@ -70,13 +70,19 @@ int Scenario::getScenarioPathIndex(const vector<string> dirList, const string &s
|
||||
return iIndex;
|
||||
}
|
||||
|
||||
string Scenario::getScenarioPath(const vector<string> dirList, const string &scenarioName){
|
||||
string Scenario::getScenarioPath(const vector<string> dirList, const string &scenarioName, bool getMatchingRootScenarioPathOnly){
|
||||
string scenarioFile = "";
|
||||
for(int idx = 0; idx < dirList.size(); idx++) {
|
||||
scenarioFile = dirList[idx] + "/" + scenarioName + "/" + scenarioName + ".xml";
|
||||
if(fileExists(scenarioFile) == true) {
|
||||
if(getMatchingRootScenarioPathOnly == true) {
|
||||
scenarioFile = dirList[idx];
|
||||
}
|
||||
break;
|
||||
}
|
||||
else {
|
||||
scenarioFile = "";
|
||||
}
|
||||
}
|
||||
|
||||
return scenarioFile;
|
||||
|
@@ -59,7 +59,7 @@ public:
|
||||
int getScriptCount() const {return scripts.size();}
|
||||
const Script* getScript(int i) const {return &scripts[i];}
|
||||
|
||||
static string getScenarioPath(const vector<string> dir, const string &scenarioName);
|
||||
static string getScenarioPath(const vector<string> dir, const string &scenarioName, bool getMatchingRootScenarioPathOnly=false);
|
||||
static string getScenarioPath(const string &dir, const string &scenarioName);
|
||||
static int getScenarioPathIndex(const vector<string> dirList, const string &scenarioName);
|
||||
|
||||
|
@@ -110,6 +110,7 @@ void getFullscreenVideoInfo(int &colorBits,int &screenWidth,int &screenHeight);
|
||||
bool changeVideoMode(int resH, int resW, int colorBits, int refreshFrequency);
|
||||
void restoreVideoMode();
|
||||
|
||||
bool EndsWith(const string &str, const string& key);
|
||||
void message(string message);
|
||||
bool ask(string message);
|
||||
void exceptionMessage(const exception &excp);
|
||||
|
Reference in New Issue
Block a user