TORCS  1.3.9
The Open Racing Car Simulator
racemanmenu.cpp
Go to the documentation of this file.
1 /***************************************************************************
2 
3  file : racemanmenu.cpp
4  created : Fri Jan 3 22:24:41 CET 2003
5  copyright : (C) 2003-2014 by Eric Espie, Bernhard Wymann
6  email : eric.espie@torcs.org
7  version : $Id$
8 
9  ***************************************************************************/
10 
11 /***************************************************************************
12  * *
13  * This program is free software; you can redistribute it and/or modify *
14  * it under the terms of the GNU General Public License as published by *
15  * the Free Software Foundation; either version 2 of the License, or *
16  * (at your option) any later version. *
17  * *
18  ***************************************************************************/
19 
26 #include <stdlib.h>
27 #include <stdio.h>
28 #include <tgfclient.h>
29 #include <raceman.h>
30 #include <racescreens.h>
31 #include <driverconfig.h>
32 #include <portability.h>
33 
34 #include "raceengine.h"
35 #include "racemain.h"
36 #include "raceinit.h"
37 #include "racestate.h"
38 
39 #include "racemanmenu.h"
40 
41 static float red[4] = {1.0, 0.0, 0.0, 1.0};
42 
43 static void *racemanMenuHdle = NULL;
44 static void *newTrackMenuHdle = NULL;
49 
50 static void reConfigRunState(void);
51 
52 static void
54 {
55  void *params = ReInfo->params;
56 
57  /* Go back one step in the conf */
59  GfParmGetNum(params, RM_SECT_CONF, RM_ATTR_CUR_CONF, NULL, 1) - 2);
60 
62 }
63 
64 
65 /***************************************************************/
66 /* Callback hooks used only to run the automaton on activation */
67 static void *configHookHandle = 0;
68 
69 static void
70 configHookActivate(void * /* dummy */)
71 {
73 }
74 
75 static void *
77 {
78  if (configHookHandle) {
79  return configHookHandle;
80  }
81 
83  return configHookHandle;
84 }
85 
86 /***************************************************************/
87 /* Config Back Hook */
88 
89 static void *ConfigBackHookHandle = 0;
90 
91 static void
92 ConfigBackHookActivate(void * /* dummy */)
93 {
94  reConfigBack();
95 }
96 
97 static void *
99 {
100  if (ConfigBackHookHandle) {
101  return ConfigBackHookHandle;
102  }
103 
105  return ConfigBackHookHandle;
106 }
107 
108 static void
110 {
111  int i;
112  const char* opt;
113  const char* conf;
114  int curConf;
115  int numOpt;
116  void *params = ReInfo->params;
117  const int BUFSIZE = 1024;
118  char path[BUFSIZE];
119 
120  curConf = (int)GfParmGetNum(params, RM_SECT_CONF, RM_ATTR_CUR_CONF, NULL, 1);
121  if (curConf > GfParmGetEltNb(params, RM_SECT_CONF)) {
122  GfOut("End of configuration\n");
123  GfParmWriteFile(NULL, ReInfo->params, ReInfo->_reName);
124  goto menuback;
125  }
126 
127  snprintf(path, BUFSIZE, "%s/%d", RM_SECT_CONF, curConf);
128  conf = GfParmGetStr(params, path, RM_ATTR_TYPE, 0);
129  if (!conf) {
130  GfOut("no %s here %s\n", RM_ATTR_TYPE, path);
131  goto menuback;
132  }
133 
134  GfOut("Configuration step %s\n", conf);
135  if (!strcmp(conf, RM_VAL_TRACKSEL)) {
136  /* Track Select Menu */
138  if (curConf == 1) {
140  } else {
142  }
143  ts.param = ReInfo->params;
144  ts.trackItf = ReInfo->_reTrackItf;
145  RmTrackSelect(&ts);
146  } else if (!strcmp(conf, RM_VAL_DRVSEL)) {
147  /* Drivers select menu */
149  if (curConf == 1) {
151  } else {
153  }
154  ds.param = ReInfo->params;
156 
157  } else if (!strcmp(conf, RM_VAL_RACECONF)) {
158  /* Race Options menu */
160  if (curConf == 1) {
162  } else {
164  }
165  rp.param = ReInfo->params;
166  rp.title = GfParmGetStr(params, path, RM_ATTR_RACE, "Race");
167  /* Select options to configure */
168  rp.confMask = 0;
169  snprintf(path, BUFSIZE, "%s/%d/%s", RM_SECT_CONF, curConf, RM_SECT_OPTIONS);
170  numOpt = GfParmGetEltNb(params, path);
171  for (i = 1; i < numOpt + 1; i++) {
172  snprintf(path, BUFSIZE, "%s/%d/%s/%d", RM_SECT_CONF, curConf, RM_SECT_OPTIONS, i);
173  opt = GfParmGetStr(params, path, RM_ATTR_TYPE, "");
174  if (!strcmp(opt, RM_VAL_CONFRACELEN)) {
175  /* Configure race length */
177  } else {
178  if (!strcmp(opt, RM_VAL_CONFDISPMODE)) {
179  /* Configure display mode */
181  }
182  }
183  }
185  }
186 
187  curConf++;
188  GfParmSetNum(params, RM_SECT_CONF, RM_ATTR_CUR_CONF, NULL, curConf);
189 
190  return;
191 
192  /* Back to the race menu */
193  menuback:
195  return;
196 }
197 
198 static void
199 reConfigureMenu(void * /* dummy */)
200 {
201  void *params = ReInfo->params;
202 
203  /* Reset configuration automaton */
204  GfParmSetNum(params, RM_SECT_CONF, RM_ATTR_CUR_CONF, NULL, 1);
206 }
207 
208 static void
209 reSelectLoadFile(char *filename)
210 {
211  const int BUFSIZE = 1024;
212  char buf[BUFSIZE];
213 
214  snprintf(buf, BUFSIZE, "%sresults/%s/%s", GetLocalDir(), ReInfo->_reFilename, filename);
215  GfOut("Loading Saved File %s...\n", buf);
217  ReInfo->_reRaceName = ReInfo->_reName;
218  RmShowStandings(ReInfo->_reGameScreen, ReInfo);
219 }
220 
221 // FIXME: remove this static shared buffer!
222 const int VARBUFSIZE = 1024;
224 
225 static void
227 {
228  void *params = ReInfo->params;
229 
232 
233  const char* str = GfParmGetStr(params, RM_SECT_HEADER, RM_ATTR_NAME, 0);
234  if (str) {
235  fs.title = str;
236  }
237 
238  snprintf(varbuf, VARBUFSIZE, "%sresults/%s", GetLocalDir(), ReInfo->_reFilename);
239  fs.path = varbuf;
240 
241  RmFileSelect((void*)&fs);
242 }
243 
244 int
246 {
247  void *params = ReInfo->params;
248 
249  if (racemanMenuHdle) {
251  }
252 
254  NULL, (tfuiCallback)NULL,
255  NULL, (tfuiCallback)NULL,
256  1);
257 
258  const char* str = GfParmGetStr(params, RM_SECT_HEADER, RM_ATTR_BGIMG, 0);
259  if (str) {
261  }
262 
264 
265  str = GfParmGetStr(params, RM_SECT_HEADER, RM_ATTR_NAME, 0);
266  if (str) {
267  GfuiTitleCreate(racemanMenuHdle, str, strlen(str));
268  }
269 
270 
272  "New Race", "Start a New Race",
273  NULL, ReStartNewRace);
274 
276  "Configure Race", "Configure The Race",
277  NULL, reConfigureMenu);
278 
279 /* GfuiMenuButtonCreate(racemanMenuHdle, */
280 /* "Configure Players", "Players configuration menu", */
281 /* TorcsDriverMenuInit(racemanMenuHdle), GfuiScreenActivate); */
282 
283  if (GfParmGetEltNb(params, RM_SECT_TRACKS) > 1) {
285  "Load", "Load a Previously Saved Game",
287  }
288 
290  "Back to Main", "Return to previous Menu",
291  ReInfo->_reMenuScreen, GfuiScreenActivate);
292 
294 
295  return RM_ASYNC | RM_NEXT_STEP;
296 }
297 
298 static void
299 reStateManage(void * /* dummy */)
300 {
301  ReStateManage();
302 }
303 
304 int
306 {
307  void *params = ReInfo->params;
308  void *results = ReInfo->results;
309  const int BUFSIZE = 1024;
310  char buf[BUFSIZE];
311 
312  if (newTrackMenuHdle) {
314  }
315 
317  NULL, (tfuiCallback)NULL,
318  NULL, (tfuiCallback)NULL,
319  1);
320 
321  const char* str = GfParmGetStr(params, RM_SECT_HEADER, RM_ATTR_BGIMG, 0);
322  if (str) {
324  }
325 
326  str = GfParmGetStr(params, RM_SECT_HEADER, RM_ATTR_NAME, "");
327  GfuiTitleCreate(newTrackMenuHdle, str, strlen(str));
328 
330 
331  snprintf(buf, BUFSIZE, "Race Day #%d/%d on %s",
332  (int)GfParmGetNum(results, RE_SECT_CURRENT, RE_ATTR_CUR_TRACK, NULL, 1),
334  ReInfo->track->name);
335 
337  buf,
338  red,
340  320, 420,
341  GFUI_ALIGN_HC_VB, 50);
342 
344  "Start Event", "Start The Current Race",
345  NULL, reStateManage);
346 
347 
349  "Abandon", "Abandon The Race",
350  ReInfo->_reMenuScreen, GfuiScreenActivate);
351 
352  GfuiAddKey(newTrackMenuHdle, 27, "Abandon", ReInfo->_reMenuScreen, GfuiScreenActivate, NULL);
353 
355 
356  return RM_ASYNC | RM_NEXT_STEP;
357 }
static float red[4]
Definition: racemanmenu.cpp:41
const int VARBUFSIZE
static tRmDrvSelect ds
Definition: racemanmenu.cpp:46
void ReStateManage(void)
Definition: racestate.cpp:56
static void reLoadMenu(void *prevHandle)
#define RM_SECT_OPTIONS
Definition: raceman.h:241
void * GfParmReadFile(const char *file, int mode)
Read parameter set from file and return handle to parameter set.
Definition: params.cpp:1157
static void * ConfigBackHookHandle
Definition: racemanmenu.cpp:89
char * path
Directory containing the files to list.
Definition: racescreens.h:79
static tRmFileSelect fs
Definition: racemanmenu.cpp:48
static void * configHookHandle
Definition: racemanmenu.cpp:67
#define RM_SECT_CONF
Definition: raceman.h:240
#define RM_NEXT_STEP
Definition: raceman.h:48
int GfuiMenuButtonCreate(void *scr, const char *text, const char *tip, void *userdata, tfuiCallback onpush)
Add a button to a menu screen.
Definition: guimenu.cpp:110
#define GFPARM_RMODE_STD
if handle already openned return it
Definition: tgf.h:265
#define RM_VAL_CONFDISPMODE
Definition: raceman.h:304
void RmRaceParamMenu(void *vrp)
Race options menu.
Definition: racemenu.cpp:136
static void reConfigureMenu(void *)
#define RM_SECT_TRACKS
Definition: raceman.h:239
const char * title
Title for race parameters (for screen title)
Definition: racescreens.h:60
void * results
Race results.
Definition: raceman.h:224
char * GetLocalDir(void)
Definition: tgf.cpp:231
void GfuiAddKey(void *scr, unsigned char key, const char *descr, void *userData, tfuiCallback onKeyPressed, tfuiCallback onKeyReleased)
Add a Keyboard callback to a screen.
Definition: gui.cpp:742
void * nextScreen
Race manager screen to go after select.
Definition: racescreens.h:59
#define RM_CONF_RACE_LEN
Definition: racescreens.h:62
void GfuiScreenRelease(void *scr)
Release the given screen.
Definition: gui.cpp:618
#define RE_SECT_CURRENT
Definition: raceman.h:332
void * prevScreen
Race manager screen to go back.
Definition: racescreens.h:47
static void configHookActivate(void *)
Definition: racemanmenu.cpp:70
void * param
Pointer to race manager parameter set (to set the track)
Definition: racescreens.h:34
void GfuiScreenAddBgImg(void *scr, const char *filename)
Add an image background to a screen.
Definition: gui.cpp:961
tTrackItf trackItf
Track module interface.
Definition: racescreens.h:37
int GfParmWriteFile(const char *file, void *parmHandle, const char *name)
Write parameter set into file.
Definition: params.cpp:1610
static void reConfigRunState(void)
#define RM_VAL_TRACKSEL
Definition: raceman.h:300
const char * title
Title for file selection (for screen title)
Definition: racescreens.h:78
char varbuf[VARBUFSIZE]
static void reSelectLoadFile(char *filename)
void * prevScreen
Link to previous screen.
Definition: racescreens.h:80
#define RM_ATTR_NAME
Definition: raceman.h:257
const char * GfParmGetStr(void *parmHandle, const char *path, const char *key, const char *deflt)
Get a string parameter from the parameter set handle.
Definition: params.cpp:2311
The Gaming Framework API (client part).
void ReStartNewRace(void *)
Definition: raceinit.cpp:131
void RmTrackSelect(void *)
Track selection, the race manager parameter set is handed over in vs, tRmTrackSelect.param.
Structure for file selection.
Definition: racescreens.h:76
void * GfuiScreenCreateEx(float *bgColor, void *userDataOnActivate, tfuiCallback onActivate, void *userDataOnDeactivate, tfuiCallback onDeactivate, int mouseAllowed)
Create a screen.
Definition: gui.cpp:578
#define RM_CONF_DISP_MODE
Definition: racescreens.h:63
tRmInfo * ReInfo
Definition: raceengine.cpp:45
#define RM_ATTR_RACE
Definition: raceman.h:273
static void * reConfigBackHookInit(void)
Definition: racemanmenu.cpp:98
#define GfOut
Definition: tgf.h:373
#define RM_ATTR_CUR_CONF
Definition: raceman.h:246
void * nextScreen
Race manager screen to go after select.
Definition: racescreens.h:36
const char * name
Name of the track.
Definition: track.h:504
static void * newTrackMenuHdle
Definition: racemanmenu.cpp:44
#define RM_VAL_DRVSEL
Definition: raceman.h:301
void RmDriversSelect(void *vs)
Drivers list selection, the race manager parameter set is handed over in vs, tRmDrvSelect.param.
tTrack * track
Current track.
Definition: raceman.h:222
void GfuiMenuDefaultKeysAdd(void *scr)
Add the default menu keyboard callback to a screen.
Definition: guimenu.cpp:55
#define RM_ATTR_TYPE
Definition: raceman.h:272
unsigned int confMask
Tell what to configure.
Definition: racescreens.h:61
void * GfuiHookCreate(void *userDataOnActivate, tfuiCallback onActivate)
Create a callback hook.
Definition: gui.cpp:679
void(* tfuiCallback)(void *)
Definition: tgfclient.h:105
This is the race information structures.
void GfuiScreenActivate(void *screen)
Activate a screen and make it current.
Definition: gui.cpp:467
void * prevScreen
Race manager screen to go back.
Definition: racescreens.h:35
static void * racemanMenuHdle
Definition: racemanmenu.cpp:43
static void reConfigBack(void)
Definition: racemanmenu.cpp:53
#define RM_ATTR_BGIMG
Definition: raceman.h:261
void RmShowStandings(void *prevHdle, tRmInfo *info)
Display standings.
Definition: results.cpp:623
int GfParmSetNum(void *handle, const char *path, const char *key, const char *unit, tdble val)
Set a numerical parameter in the parameter set handle.
Definition: params.cpp:2586
#define GFUI_ALIGN_HC_VB
Definition: tgfclient.h:72
Structure for track selection.
Definition: racescreens.h:32
#define RM_VAL_CONFRACELEN
Definition: raceman.h:303
tdble GfParmGetNum(void *handle, const char *path, const char *key, const char *unit, tdble deflt)
Get a numerical parameter from the parameter set handle.
Definition: params.cpp:2392
tfSelectFile select
Callback function to handle the selection (store the selection in the caller)
Definition: racescreens.h:81
int GfuiLabelCreateEx(void *scr, const char *text, float *fgColor, int font, int x, int y, int align, int maxlen)
Create a new label (extended version).
Definition: guilabel.cpp:63
int GfuiTitleCreate(void *scr, const char *text, int maxlen)
Add a Title to the screen.
Definition: guilabel.cpp:170
void * param
Pointer to race manager parameter set (to set the driver)
Definition: racescreens.h:46
Structure for configuring parameters.
Definition: racescreens.h:55
#define GFUI_FONT_MEDIUM_C
Definition: tgfclient.h:173
int GfParmGetEltNb(void *handle, const char *path)
Count the number of subsections in a section in the parameter set handle.
Definition: params.cpp:2106
static void ConfigBackHookActivate(void *)
Definition: racemanmenu.cpp:92
int ReRacemanMenu(void)
void * prevScreen
Race manager screen to go back.
Definition: racescreens.h:58
static tRmTrackSelect ts
Definition: racemanmenu.cpp:45
#define RM_ASYNC
Definition: raceman.h:43
void * nextScreen
Race manager screen to go after select.
Definition: racescreens.h:48
static tRmRaceParam rp
Definition: racemanmenu.cpp:47
void * param
Pointer to race manager parameter set (to set the parameters)
Definition: racescreens.h:57
#define RE_ATTR_CUR_TRACK
Definition: raceman.h:334
Structure for driver selection.
Definition: racescreens.h:44
static void reStateManage(void *)
#define RM_VAL_RACECONF
Definition: raceman.h:302
void RmFileSelect(void *vs)
File selection.
Definition: fileselect.cpp:81
int GfuiMenuBackQuitButtonCreate(void *scr, const char *text, const char *tip, void *userdata, tfuiCallback onpush)
Add the "Back" or "Quit" button at the bottom of the menu screen.
Definition: guimenu.cpp:156
int ReNewTrackMenu(void)
void * params
Raceman parameters.
Definition: raceman.h:223
#define GFPARM_RMODE_CREAT
Create the file if doesn&#39;t exist.
Definition: tgf.h:267
#define RM_SECT_HEADER
Definition: raceman.h:235
static void * prevHandle
static void * reConfigHookInit(void)
Definition: racemanmenu.cpp:76