-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathGameSettings.cpp
131 lines (114 loc) · 2.45 KB
/
GameSettings.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#include "GameTypes.h"
#include "GameSettings.h"
GameSettingCollection ** g_GameSettingCollection = (GameSettingCollection**)0x010701A8;
IniSettingCollection ** g_IniSettingCollection = (IniSettingCollection**)0x0116D6F4;
IniSettingCollection ** g_IniPrefCollection = (IniSettingCollection**)0x01179578;
UInt32 Setting::GetType()
{
if (!name) return kSetting_Other;
switch(name[0])
{
case 'b': return kSetting_Bool;
case 'c': return kSetting_c;
case 'i': return kSetting_Integer;
case 'u': return kSetting_Unsigned;
case 'f': return kSetting_Float;
case 's':
case 'S':
return kSetting_String;
case 'r': return kSetting_r;
case 'a': return kSetting_a;
default:
return kSetting_Other;
}
}
bool Setting::Get(double& out)
{
switch (GetType())
{
case kSetting_Bool:
case kSetting_Integer:
out = data.i;
return true;
case kSetting_Unsigned:
out = data.uint;
return true;
case kSetting_Float:
out = data.f;
return true;
default:
return false;
}
}
bool Setting::Set(double newVal)
{
switch (GetType())
{
case kSetting_Bool:
data.i = newVal ? 1 : 0;
return true;
case kSetting_Integer:
data.i = newVal;
return true;
case kSetting_Unsigned:
data.uint = newVal;
return true;
case kSetting_Float:
data.f = newVal;
return true;
default:
return false;
}
}
bool GameSettingCollection::GetGameSetting(char* settingName, Setting** out)
{
NiTMapBase <const char*, Setting*> *map = &settingMap;
out = &map->Get(settingName)->data;
return true;
}
GameSettingCollection * GameSettingCollection::GetSingleton()
{
return *g_GameSettingCollection;
}
IniSettingCollection* IniSettingCollection::GetIniSettings()
{
return *g_IniSettingCollection;
}
IniSettingCollection* IniSettingCollection::GetIniPrefs()
{
return *g_IniPrefCollection;
}
class IniSettingFinder
{
public:
const char* m_settingName;
IniSettingFinder(const char* name) : m_settingName(name)
{ }
bool Accept(Setting* info)
{
if (!_stricmp(m_settingName, info->name))
return true;
else
return false;
}
};
bool GetIniSetting(const char* settingName, Setting** out)
{
Setting* setting = NULL;
IniSettingFinder finder(settingName);
// check prefs first
IniSettingCollection* coll = IniSettingCollection::GetIniPrefs();
if (coll)
setting = coll->settings.Find(finder);
if (!setting)
{
coll = IniSettingCollection::GetIniSettings();
setting = coll->settings.Find(finder);
}
if (setting)
{
*out = setting;
return true;
}
return false;
}