|
@@ -21,6 +21,10 @@
|
21
|
21
|
OpenRaider::OpenRaider() {
|
22
|
22
|
mInit = false;
|
23
|
23
|
mRunning = false;
|
|
24
|
+ mBaseDir = NULL;
|
|
25
|
+ mPakDir = NULL;
|
|
26
|
+ mAudioDir = NULL;
|
|
27
|
+ mDataDir = NULL;
|
24
|
28
|
|
25
|
29
|
mSound = new Sound();
|
26
|
30
|
mWindow = new WindowSDL();
|
|
@@ -32,6 +36,18 @@ OpenRaider::~OpenRaider() {
|
32
|
36
|
|
33
|
37
|
if (mWindow)
|
34
|
38
|
delete mWindow;
|
|
39
|
+
|
|
40
|
+ if (mBaseDir)
|
|
41
|
+ delete mBaseDir;
|
|
42
|
+
|
|
43
|
+ if (mPakDir)
|
|
44
|
+ delete mPakDir;
|
|
45
|
+
|
|
46
|
+ if (mAudioDir)
|
|
47
|
+ delete mAudioDir;
|
|
48
|
+
|
|
49
|
+ if (mDataDir)
|
|
50
|
+ delete mDataDir;
|
35
|
51
|
}
|
36
|
52
|
|
37
|
53
|
int OpenRaider::loadConfig(const char *config) {
|
|
@@ -122,6 +138,39 @@ int OpenRaider::command(const char *command, std::vector<char *> *args) {
|
122
|
138
|
}
|
123
|
139
|
}
|
124
|
140
|
|
|
141
|
+char *OpenRaider::expandDirectoryNames(const char *s) {
|
|
142
|
+ const char *base = "$(basedir)";
|
|
143
|
+ const char *pak = "$(pakdir)";
|
|
144
|
+ const char *audio = "$(audiodir)";
|
|
145
|
+ const char *data = "$(datadir)";
|
|
146
|
+
|
|
147
|
+ if (mBaseDir != NULL) {
|
|
148
|
+ if (strstr(s, base) != NULL) {
|
|
149
|
+ return stringReplace(s, base, mBaseDir);
|
|
150
|
+ }
|
|
151
|
+ }
|
|
152
|
+
|
|
153
|
+ if (mPakDir != NULL) {
|
|
154
|
+ if (strstr(s, pak) != NULL) {
|
|
155
|
+ return stringReplace(s, pak, mPakDir);
|
|
156
|
+ }
|
|
157
|
+ }
|
|
158
|
+
|
|
159
|
+ if (mAudioDir != NULL) {
|
|
160
|
+ if (strstr(s, audio) != NULL) {
|
|
161
|
+ return stringReplace(s, audio, mAudioDir);
|
|
162
|
+ }
|
|
163
|
+ }
|
|
164
|
+
|
|
165
|
+ if (mDataDir != NULL) {
|
|
166
|
+ if (strstr(s, data) != NULL) {
|
|
167
|
+ return stringReplace(s, data, mDataDir);
|
|
168
|
+ }
|
|
169
|
+ }
|
|
170
|
+
|
|
171
|
+ return NULL;
|
|
172
|
+}
|
|
173
|
+
|
125
|
174
|
int OpenRaider::set(const char *var, const char *value) {
|
126
|
175
|
if (strcmp(var, "size") == 0) {
|
127
|
176
|
// value has format like "\"1024x768\""
|
|
@@ -151,22 +200,63 @@ int OpenRaider::set(const char *var, const char *value) {
|
151
|
200
|
float vol = 1.0f;
|
152
|
201
|
if (sscanf(value, "%f", &vol) != 1) {
|
153
|
202
|
printf("set-volume-Error: Invalid value (%s)\n", value);
|
|
203
|
+ return -5;
|
154
|
204
|
}
|
155
|
205
|
mSound->setVolume(vol);
|
156
|
206
|
} else if (strcmp(var, "mouse_x") == 0) {
|
157
|
|
- // TODO set
|
|
207
|
+ // TODO mouse support
|
158
|
208
|
} else if (strcmp(var, "mouse_y") == 0) {
|
159
|
|
- // TODO set
|
|
209
|
+ // TODO mouse support
|
160
|
210
|
} else if (strcmp(var, "basedir") == 0) {
|
161
|
|
-
|
|
211
|
+ char *quotes = stringReplace(value, "\"", "");
|
|
212
|
+ char *tmp = expandDirectoryNames(quotes);
|
|
213
|
+ if (tmp == NULL) {
|
|
214
|
+ mBaseDir = fullPath(quotes, 0);
|
|
215
|
+ } else {
|
|
216
|
+ mBaseDir = fullPath(tmp, 0);
|
|
217
|
+ delete [] tmp;
|
|
218
|
+ }
|
|
219
|
+ delete [] quotes;
|
162
|
220
|
} else if (strcmp(var, "pakdir") == 0) {
|
163
|
|
-
|
|
221
|
+ char *quotes = stringReplace(value, "\"", "");
|
|
222
|
+ char *tmp = expandDirectoryNames(quotes);
|
|
223
|
+ if (tmp == NULL) {
|
|
224
|
+ mPakDir = fullPath(quotes, 0);
|
|
225
|
+ } else {
|
|
226
|
+ mPakDir = fullPath(tmp, 0);
|
|
227
|
+ delete [] tmp;
|
|
228
|
+ }
|
|
229
|
+ delete [] quotes;
|
164
|
230
|
} else if (strcmp(var, "audiodir") == 0) {
|
165
|
|
-
|
|
231
|
+ char *quotes = stringReplace(value, "\"", "");
|
|
232
|
+ char *tmp = expandDirectoryNames(quotes);
|
|
233
|
+ if (tmp == NULL) {
|
|
234
|
+ mAudioDir = fullPath(quotes, 0);
|
|
235
|
+ } else {
|
|
236
|
+ mAudioDir = fullPath(tmp, 0);
|
|
237
|
+ delete [] tmp;
|
|
238
|
+ }
|
|
239
|
+ delete [] quotes;
|
166
|
240
|
} else if (strcmp(var, "datadir") == 0) {
|
167
|
|
-
|
|
241
|
+ char *quotes = stringReplace(value, "\"", "");
|
|
242
|
+ char *tmp = expandDirectoryNames(quotes);
|
|
243
|
+ if (tmp == NULL) {
|
|
244
|
+ mDataDir = fullPath(quotes, 0);
|
|
245
|
+ } else {
|
|
246
|
+ mDataDir = fullPath(tmp, 0);
|
|
247
|
+ delete [] tmp;
|
|
248
|
+ }
|
|
249
|
+ delete [] quotes;
|
168
|
250
|
} else if (strcmp(var, "font") == 0) {
|
169
|
|
-
|
|
251
|
+ char *quotes = stringReplace(value, "\"", "");
|
|
252
|
+ char *tmp = expandDirectoryNames(quotes);
|
|
253
|
+ if (tmp == NULL) {
|
|
254
|
+ mWindow->setFont(quotes);
|
|
255
|
+ } else {
|
|
256
|
+ mWindow->setFont(tmp);
|
|
257
|
+ delete [] tmp;
|
|
258
|
+ }
|
|
259
|
+ delete [] quotes;
|
170
|
260
|
} else {
|
171
|
261
|
printf("set-Error: Unknown variable (%s = %s)\n", var, value);
|
172
|
262
|
return -1;
|
|
@@ -209,8 +299,6 @@ int OpenRaider::initialize() {
|
209
|
299
|
if (mWindow->initializeGL() != 0)
|
210
|
300
|
return -2;
|
211
|
301
|
|
212
|
|
- mWindow->setFont("~/.OpenRaider/data/test.ttf");
|
213
|
|
-
|
214
|
302
|
// Initialize window font
|
215
|
303
|
if (mWindow->initializeFont() != 0)
|
216
|
304
|
return -3;
|