aboutsummaryrefslogtreecommitdiff
path: root/engines/sludge/language.cpp
diff options
context:
space:
mode:
authorSimei Yin2017-07-18 17:25:00 +0200
committerSimei Yin2017-07-18 19:05:04 +0200
commit798ec60f54064a6a7f5750ab792d06666f9ce8ea (patch)
treefd549b6285ec5b3f31a503667ba9ea0353d7391b /engines/sludge/language.cpp
parent70c965a1c41a7eca454371f710288e4b5bd55947 (diff)
downloadscummvm-rg350-798ec60f54064a6a7f5750ab792d06666f9ce8ea.tar.gz
scummvm-rg350-798ec60f54064a6a7f5750ab792d06666f9ce8ea.tar.bz2
scummvm-rg350-798ec60f54064a6a7f5750ab792d06666f9ce8ea.zip
SLUDGE: Objectify language manager
Diffstat (limited to 'engines/sludge/language.cpp')
-rw-r--r--engines/sludge/language.cpp79
1 files changed, 60 insertions, 19 deletions
diff --git a/engines/sludge/language.cpp b/engines/sludge/language.cpp
index c1917ad61c..52c1dc881d 100644
--- a/engines/sludge/language.cpp
+++ b/engines/sludge/language.cpp
@@ -23,6 +23,7 @@
#include "common/debug.h"
#include "sludge/allfiles.h"
+#include "sludge/fileset.h"
#include "sludge/newfatal.h"
#include "sludge/moreio.h"
#include "sludge/language.h"
@@ -31,40 +32,80 @@
namespace Sludge {
-uint *languageTable;
-Common::String *languageName;
-settingsStruct gameSettings;
+LanguageManager::~LanguageManager() {
+ if (_languageTable) {
+ delete []_languageTable;
+ _languageTable = NULL;
+ }
+
+ if (_languageNames) {
+ delete []_languageNames;
+ _languageNames = NULL;
+ }
+}
-void makeLanguageTable(Common::File *table) {
- languageTable = new uint[gameSettings.numLanguages + 1];
- if (!checkNew(languageTable))
+void LanguageManager::init(Common::File *fp) {
+ // get number of languages
+ _numLanguages =
+ (gameVersion >= VERSION(1, 3)) ? (fp->readByte()) : 0;
+ debug(kSludgeDebugDataLoad, "numLanguages : %c", _numLanguages);
+
+ // make language table
+ _languageTable = new uint[_numLanguages + 1];
+ if (!checkNew(_languageTable))
return;
- languageName = new Common::String[gameSettings.numLanguages + 1];
- if (!checkNew(languageName))
+ _languageNames = new Common::String[_numLanguages + 1];
+ if (!checkNew(_languageNames))
return;
- for (uint i = 0; i <= gameSettings.numLanguages; i++) {
- languageTable[i] = i ? table->readUint16BE() : 0;
- debug(kSludgeDebugDataLoad, "languageTable %i: %i", i, languageTable[i]);
- languageName[i].clear();
+ for (uint i = 0; i <= _numLanguages; i++) {
+ _languageTable[i] = i ? fp->readUint16BE() : 0;
+ debug(kSludgeDebugDataLoad, "languageTable %i: %i", i, _languageTable[i]);
+ _languageNames[i].clear();
if (gameVersion >= VERSION(2, 0)) {
- if (gameSettings.numLanguages) {
- languageName[i] = readString(table);
- debug(kSludgeDebugDataLoad, "languageName %i: %s\n", i, languageName[i].c_str());
+ if (_numLanguages) {
+ _languageNames[i] = readString(fp);
+ debug(kSludgeDebugDataLoad, "languageName %i: %s\n", i, _languageNames[i].c_str());
}
}
}
}
-int getLanguageForFileB() {
- int indexNum = -1;
+void LanguageManager::setLanguageID(uint id) {
+ _languageID = id;
+ // get index of language
+ setLanguageIndex(getLanguageForFileB());
+}
- for (uint i = 0; i <= gameSettings.numLanguages; i++) {
- if (languageTable[i] == gameSettings.languageID)
+int LanguageManager::getLanguageForFileB() {
+ int indexNum = -1;
+ for (uint i = 0; i <= _numLanguages; i++) {
+ if (_languageTable[i] == _languageID)
indexNum = i;
}
return indexNum;
}
+void LanguageManager::saveLanguageSetting(Common::WriteStream *writeStream) {
+ writeStream->writeByte(_numLanguages);
+}
+
+void LanguageManager::loadLanguageSetting(Common::SeekableReadStream *readStream) {
+ uint languageIdx = readStream->readByte();
+ setLanguageIndex(languageIdx);
+}
+
+void LanguageManager::setLanguageIndex(int idx) {
+ if (idx < 0)
+ fatal("Can't find the translation data specified!");
+
+ if (idx != _languageIdx) {
+ // Load the saved language!
+ _languageIdx = idx;
+ // Now set file indices properly to the chosen language.
+ setFileIndices(_numLanguages, _languageIdx);
+ }
+}
+
} // End of namespace Sludge