Jeck - Language is now a per-profile option settable in the options menu. Also, game no longer crashes when no language files are present.

This commit is contained in:
wagic.jeck
2009-11-19 03:13:55 +00:00
parent 0085c9b548
commit e27fbac7be
7 changed files with 118 additions and 5 deletions
+1 -1
View File
@@ -12,12 +12,12 @@
const char * Options::optionNames[] = {
//Global options
"Profile",
"Lang",
"prx_handler",
"prx_rimom",
"prx_eviltwin",
"prx_rnddeck",
//Options set on a per-profile basis
"Lang",
"Theme",
"Mode",
"musicVolume",
+8 -1
View File
@@ -73,6 +73,7 @@ GameStateMenu::GameStateMenu(GameApp* parent): GameState(parent)
yW = 55;
mVolume = 0;
scroller = NULL;
langChoices = false;
}
GameStateMenu::~GameStateMenu() {}
@@ -303,6 +304,7 @@ void GameStateMenu::loadLangMenu(){
file.close();
}
if (lang.size()){
langChoices = true;
string filen = mDit->d_name;
langs.push_back(filen.substr(0,filen.size()-4));
subMenuController->Add(langs.size(),lang.c_str());
@@ -319,7 +321,12 @@ void GameStateMenu::Update(float dt)
if (MENU_STATE_MINOR_NONE == (currentState & MENU_STATE_MINOR)) {
if (!subMenuController) loadLangMenu();
}
subMenuController->Update(dt);
if(!langChoices){
currentState = MENU_STATE_MAJOR_LOADING_CARDS;
SAFE_DELETE(subMenuController);
}
else
subMenuController->Update(dt);
break;
case MENU_STATE_MAJOR_LOADING_CARDS :
if (mReadConf){
+5
View File
@@ -46,6 +46,9 @@ void GameStateOptions::Start()
optionsList = NEW WGuiList("Game");
optionsList->Add(NEW WGuiHeader("Interface Options"));
WDecoConfirm * cLang = NEW WDecoConfirm(this,NEW OptionLanguage("Language"));
cLang->confirm = "Use this Language";
optionsList->Add(cLang);
optionsList->Add(NEW WDecoEnum(NEW OptionInteger(Options::CLOSEDHAND,"Closed hand",1,1,0)));
optionsList->Add(NEW WDecoEnum(NEW OptionInteger(Options::HANDDIRECTION,"Hand direction",1,1,0)));
optionsList->Add(NEW WDecoEnum(NEW OptionInteger(Options::MANADISPLAY,"Mana display",2,1,0)));
@@ -120,6 +123,8 @@ void GameStateOptions::Update(float dt)
}
if(mReload){
options.reloadProfile(true);
Translator::EndInstance();
Translator::GetInstance()->init();
optionsTabs->Reload();
mReload = false;
}
+84
View File
@@ -291,7 +291,91 @@ void OptionProfile::confirmChange(bool confirmed){
}
return;
}
//OptionLanguage
OptionLanguage::OptionLanguage(string _displayValue) : OptionSelect(Options::LANG,_displayValue)
{
Reload();
initSelections();
};
void OptionLanguage::setData(){
if(id == INVALID_OPTION) return;
if (value < selections.size()){
options[id] = GameOption(actual_data[value]);
Translator::EndInstance();
Translator::GetInstance()->init();
}
}
void OptionLanguage::confirmChange(bool confirmed){
if(!confirmed)
value = prior_value;
else{
setData();
if(Changed()){
options[id] = GameOption(actual_data[value]);
Translator::EndInstance();
Translator::GetInstance()->init();
}
prior_value = value;
}
}
void OptionLanguage::Reload(){
struct dirent *mDit;
DIR *mDip;
mDip = opendir("Res/lang");
while ((mDit = readdir(mDip))){
string filename = "Res/lang/";
filename += mDit->d_name;
std::ifstream file(filename.c_str());
string s;
string lang;
if(file){
if(std::getline(file,s)){
if (!s.size()){
lang = "";
}else{
if (s[s.size()-1] == '\r')
s.erase(s.size()-1); //Handle DOS files
size_t found = s.find("#LANG:");
if (found != 0) lang = "";
else lang = s.substr(6);
}
}
file.close();
}
if (lang.size()){
string filen = mDit->d_name;
addSelection(filen.substr(0,filen.size()-4),lang);
}
}
closedir(mDip);
initSelections();
}
void OptionLanguage::addSelection(string s,string show){
selections.push_back(show);
actual_data.push_back(s);
}
void OptionLanguage::initSelections(){
//Find currently active bit in the list.
for(size_t i=0;i<actual_data.size();i++){
if(actual_data[i] == options[id].str)
value = i;
}
}
bool OptionLanguage::Visible(){
if(selections.size() > 1)
return true;
return false;
}
bool OptionLanguage::Selectable(){
if(selections.size() > 1)
return true;
return false;
}
//OptionDirectory
void OptionDirectory::Reload(){
DIR *mDip;