mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2026-01-15 11:03:00 +01:00
Merge pull request #4464 from IntelOrca/refactor/language-pack
Refactor LanguagePack to interface / implementation
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -16,86 +16,23 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include "../common.h"
|
||||
|
||||
extern "C"
|
||||
interface ILanguagePack
|
||||
{
|
||||
#include "../common.h"
|
||||
#include "../util/util.h"
|
||||
#include "localisation.h"
|
||||
}
|
||||
virtual ~ILanguagePack() = default;
|
||||
|
||||
#include "../core/StringBuilder.hpp"
|
||||
#include "../core/StringReader.hpp"
|
||||
virtual uint16 GetId() const abstract;
|
||||
virtual uint32 GetCount() const abstract;
|
||||
|
||||
class LanguagePack final {
|
||||
public:
|
||||
static LanguagePack * FromFile(uint16 id, const utf8 * path);
|
||||
static LanguagePack * FromText(uint16 id, const utf8 * text);
|
||||
|
||||
~LanguagePack();
|
||||
|
||||
uint16 GetId() const { return _id; }
|
||||
uint32 GetCount() const { return (uint32)_strings.size(); }
|
||||
|
||||
const utf8 * GetString(rct_string_id stringId) const;
|
||||
|
||||
void SetString(rct_string_id stringId, const utf8 * str)
|
||||
{
|
||||
if (_strings.size() >= (size_t)stringId)
|
||||
{
|
||||
_strings[stringId] = str;
|
||||
}
|
||||
}
|
||||
|
||||
rct_string_id GetObjectOverrideStringId(const char * objectIdentifier, uint8 index);
|
||||
rct_string_id GetScenarioOverrideStringId(const utf8 * scenarioFilename, uint8 index);
|
||||
|
||||
private:
|
||||
struct ObjectOverride
|
||||
{
|
||||
char name[8];
|
||||
const utf8 * strings[4];
|
||||
};
|
||||
|
||||
struct ScenarioOverride
|
||||
{
|
||||
std::string filename;
|
||||
union {
|
||||
const utf8 * strings[3];
|
||||
struct {
|
||||
const utf8 * name;
|
||||
const utf8 * park;
|
||||
const utf8 * details;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
uint16 _id;
|
||||
utf8 * _stringData;
|
||||
|
||||
std::vector<const utf8*> _strings;
|
||||
std::vector<ObjectOverride> _objectOverrides;
|
||||
std::vector<ScenarioOverride> _scenarioOverrides;
|
||||
|
||||
LanguagePack(uint16 id, const utf8 * text);
|
||||
|
||||
ObjectOverride * GetObjectOverride(const char * objectIdentifier);
|
||||
ScenarioOverride * GetScenarioOverride(const utf8 * scenarioFilename);
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// Parsing
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
StringBuilder _stringDataSB;
|
||||
utf8 * _currentGroup;
|
||||
ObjectOverride * _currentObjectOverride;
|
||||
ScenarioOverride * _currentScenarioOverride;
|
||||
|
||||
void ParseLine(IStringReader * reader);
|
||||
void ParseGroupObject(IStringReader * reader);
|
||||
void ParseGroupScenario(IStringReader * reader);
|
||||
void ParseString(IStringReader * reader);
|
||||
|
||||
bool ParseToken(IStringReader * reader, uint32 * token, bool * isByte);
|
||||
virtual void SetString(rct_string_id stringId, const utf8 * str) abstract;
|
||||
virtual const utf8 * GetString(rct_string_id stringId) const abstract;
|
||||
virtual rct_string_id GetObjectOverrideStringId(const char * objectIdentifier, uint8 index) abstract;
|
||||
virtual rct_string_id GetScenarioOverrideStringId(const utf8 * scenarioFilename, uint8 index) abstract;
|
||||
};
|
||||
|
||||
namespace LanguagePackFactory
|
||||
{
|
||||
ILanguagePack * FromFile(uint16 id, const utf8 * path);
|
||||
ILanguagePack * FromText(uint16 id, const utf8 * text);
|
||||
}
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
#pragma endregion
|
||||
|
||||
#include <stack>
|
||||
#include "../core/String.hpp"
|
||||
#include "../object/ObjectManager.h"
|
||||
#include "LanguagePack.h"
|
||||
|
||||
@@ -106,8 +107,8 @@ const language_descriptor LanguagesDescriptors[LANGUAGE_COUNT] = {
|
||||
int gCurrentLanguage = LANGUAGE_UNDEFINED;
|
||||
bool gUseTrueTypeFont = false;
|
||||
|
||||
LanguagePack *_languageFallback = nullptr;
|
||||
LanguagePack *_languageCurrent = nullptr;
|
||||
ILanguagePack *_languageFallback = nullptr;
|
||||
ILanguagePack *_languageCurrent = nullptr;
|
||||
|
||||
const utf8 BlackUpArrowString[] = { (utf8)0xC2, (utf8)0x8E, (utf8)0xE2, (utf8)0x96, (utf8)0xB2, (utf8)0x00 };
|
||||
const utf8 BlackDownArrowString[] = { (utf8)0xC2, (utf8)0x8E, (utf8)0xE2, (utf8)0x96, (utf8)0xBC, (utf8)0x00 };
|
||||
@@ -158,11 +159,11 @@ bool language_open(int id)
|
||||
platform_get_openrct_data_path(dataPath);
|
||||
if (id != LANGUAGE_ENGLISH_UK) {
|
||||
sprintf(filename, languagePath, dataPath, LanguagesDescriptors[LANGUAGE_ENGLISH_UK].locale);
|
||||
_languageFallback = LanguagePack::FromFile(LANGUAGE_ENGLISH_UK, filename);
|
||||
_languageFallback = LanguagePackFactory::FromFile(LANGUAGE_ENGLISH_UK, filename);
|
||||
}
|
||||
|
||||
sprintf(filename, languagePath, dataPath, LanguagesDescriptors[id].locale);
|
||||
_languageCurrent = LanguagePack::FromFile(id, filename);
|
||||
_languageCurrent = LanguagePackFactory::FromFile(id, filename);
|
||||
if (_languageCurrent != nullptr) {
|
||||
gCurrentLanguage = id;
|
||||
|
||||
|
||||
@@ -21,6 +21,11 @@
|
||||
#include "Object.h"
|
||||
#include "StringTable.h"
|
||||
|
||||
extern "C"
|
||||
{
|
||||
#include "../localisation/localisation.h"
|
||||
}
|
||||
|
||||
constexpr uint8 RCT2_LANGUAGE_ID_ENGLISH_UK = 0;
|
||||
constexpr uint8 RCT2_LANGUAGE_ID_BLANK = 254;
|
||||
constexpr uint8 RCT2_LANGUAGE_ID_END = 255;
|
||||
|
||||
Reference in New Issue
Block a user