TORCS  1.3.9
The Open Racing Car Simulator
racemenu.cpp
Go to the documentation of this file.
1 /***************************************************************************
2 
3  file : racemenu.cpp
4  created : Thu May 2 22:02:51 CEST 2002
5  copyright : (C) 2001-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 #ifdef WIN32
29 #include <windows.h>
30 #endif
31 #include <tgfclient.h>
32 #include <track.h>
33 #include <car.h>
34 #include <raceman.h>
35 #include <robot.h>
36 #include <racescreens.h>
37 #include <portability.h>
38 
39 static void *scrHandle;
40 static tRmRaceParam *rp;
41 static int rmrpDistance;
42 static int rmrpLaps;
43 static int rmrpDistId;
44 static int rmrpLapsId;
45 static int rmDispModeEditId;
46 static int rmCurDispMode;
48 
49 
50 static void rmrpDeactivate(void *screen)
51 {
53 
54  if (screen) {
55  GfuiScreenActivate(screen);
56  }
57 }
58 
59 
60 static void rmrpUpdDist(void * /* dummy */)
61 {
62  char *val;
63  const int BUFSIZE = 1024;
64  char buf[BUFSIZE];
65 
67  rmrpDistance = strtol(val, (char **)NULL, 0);
68  if (rmrpDistance == 0) {
69  strcpy(buf, "---");
70  } else {
71  snprintf(buf, BUFSIZE, "%d", rmrpDistance);
72  rmrpLaps = 0;
74  }
76 }
77 
78 
79 static void rmrpUpdLaps(void * /* dummy */)
80 {
81  char *val;
82  const int BUFSIZE = 1024;
83  char buf[BUFSIZE];
84 
86  rmrpLaps = strtol(val, (char **)NULL, 0);
87  if (rmrpLaps == 0) {
88  strcpy(buf, "---");
89  } else {
90  snprintf(buf, BUFSIZE, "%d", rmrpLaps);
91  rmrpDistance = 0;
93  }
95 }
96 
97 
98 static void rmrpValidate(void * /* dummy */)
99 {
100  if (rp->confMask & RM_CONF_RACE_LEN) {
101  rmrpUpdDist(0);
102  rmrpUpdLaps(0);
104  GfParmSetNum(rp->param, rp->title, RM_ATTR_LAPS, (char*)NULL, rmrpLaps);
105  }
106 
107  if (rp->confMask & RM_CONF_DISP_MODE) {
109  }
110 
112 }
113 
114 
115 static void rmrpAddKeys(void)
116 {
117  GfuiAddKey(scrHandle, 27, "Cancel Modifications", rp->prevScreen, rmrpDeactivate, NULL);
118  GfuiAddSKey(scrHandle, GLUT_KEY_F1, "Help", scrHandle, GfuiHelpScreen, NULL);
119  GfuiAddSKey(scrHandle, GLUT_KEY_F12, "Screen-Shot", NULL, GfuiScreenShot, NULL);
120  GfuiAddKey(scrHandle, 13, "Validate Modifications", NULL, rmrpValidate, NULL);
121 }
122 
123 
124 void rmChangeDisplayMode(void * /* dummy */)
125 {
128 }
129 
130 
136 void RmRaceParamMenu(void *vrp)
137 {
138  int y, x, x2, dy, dx;
139  const int BUFSIZE = 1024;
140  char buf[BUFSIZE];
141 
142  rp = (tRmRaceParam*)vrp;
143 
144  snprintf(buf, BUFSIZE, "%s Options", rp->title);
146  GfuiScreenAddBgImg(scrHandle, "data/img/splash-raceopt.png");
147 
148  x = 80;
149  x2 = 240;
150  y = 380;
151  dx = 200;
153 
154  if (rp->confMask & RM_CONF_RACE_LEN) {
155  GfuiLabelCreate(scrHandle, "Race Distance (km):", GFUI_FONT_MEDIUM_C, x, y, GFUI_ALIGN_HL_VB, 0);
157  if (rmrpDistance == 0) {
158  strcpy(buf, "---");
159  rmrpLaps = (int)GfParmGetNum(rp->param, rp->title, RM_ATTR_LAPS, NULL, 25);
160  } else {
161  snprintf(buf, BUFSIZE, "%d", rmrpDistance);
162  rmrpLaps = 0;
163  }
164 
166  x + dx, y,
167  0, 8, NULL, (tfuiCallback)NULL, rmrpUpdDist);
168 
169  y -= dy;
171  if (rmrpLaps == 0) {
172  strcpy(buf, "---");
173  } else {
174  snprintf(buf, BUFSIZE, "%d", rmrpLaps);
175  }
176 
178  x + dx, y,
179  0, 8, NULL, (tfuiCallback)NULL, rmrpUpdLaps);
180  y -= dy;
181  }
182 
183  if (rp->confMask & RM_CONF_DISP_MODE) {
185  GfuiGrButtonCreate(scrHandle, "data/img/arrow-left.png", "data/img/arrow-left.png",
186  "data/img/arrow-left.png", "data/img/arrow-left-pushed.png",
187  x2, y, GFUI_ALIGN_HL_VB, 1,
188  (void*)0, rmChangeDisplayMode,
189  NULL, (tfuiCallback)NULL, (tfuiCallback)NULL);
190  GfuiGrButtonCreate(scrHandle, "data/img/arrow-right.png", "data/img/arrow-right.png",
191  "data/img/arrow-right.png", "data/img/arrow-right-pushed.png",
192  x2 + 150, y, GFUI_ALIGN_HL_VB, 1,
193  (void*)1, rmChangeDisplayMode,
194  NULL, (tfuiCallback)NULL, (tfuiCallback)NULL);
196  rmCurDispMode = 1;
197  } else {
198  rmCurDispMode = 0;
199  }
201  y -= dy;
202  }
203 
205  NULL, rmrpValidate, NULL, NULL, NULL);
206 
208  rp->prevScreen, rmrpDeactivate, NULL, NULL, NULL);
209 
210  rmrpAddKeys();
211 
213 }
int GfParmSetStr(void *handle, const char *path, const char *key, const char *val)
Set a string parameter in the parameter set handle.
Definition: params.cpp:2477
#define RM_VAL_VISIBLE
Definition: raceman.h:317
char * GfuiEditboxGetString(void *scr, int id)
Get the string.
Definition: guiedit.cpp:358
#define GFUI_MOUSE_UP
Definition: tgfclient.h:80
#define RM_ATTR_DISTANCE
Definition: raceman.h:281
static tRmRaceParam * rp
Definition: racemenu.cpp:40
static int rmrpDistId
Definition: racemenu.cpp:43
int GfuiButtonCreate(void *scr, const char *text, int font, int x, int y, int width, int align, int mouse, void *userDataOnPush, tfuiCallback onPush, void *userDataOnFocus, tfuiCallback onFocus, tfuiCallback onFocusLost)
Add a button to a screen.
Definition: guibutton.cpp:248
void RmRaceParamMenu(void *vrp)
Race options menu.
Definition: racemenu.cpp:136
static int rmDispModeEditId
Definition: racemenu.cpp:45
const char * title
Title for race parameters (for screen title)
Definition: racescreens.h:60
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
Robot Module Interface Definition.
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
int GfuiLabelCreate(void *scr, const char *text, int font, int x, int y, int align, int maxlen)
Add a label to a screen.
Definition: guilabel.cpp:142
void * GfuiMenuScreenCreate(const char *title)
Create a new menu screen.
Definition: guimenu.cpp:76
int GfuiEditboxCreate(void *scr, const char *text, int font, int x, int y, int width, int maxlen, void *userDataOnFocus, tfuiCallback onFocus, tfuiCallback onFocusLost, int margin)
Add a editbox to a screen.
Definition: guiedit.cpp:57
void GfuiScreenAddBgImg(void *scr, const char *filename)
Add an image background to a screen.
Definition: gui.cpp:961
static void rmrpUpdLaps(void *)
Definition: racemenu.cpp:79
static int rmrpLaps
Definition: racemenu.cpp:42
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).
#define GFUI_FONT_LARGE
Definition: tgfclient.h:168
#define RM_CONF_DISP_MODE
Definition: racescreens.h:63
static int rmrpDistance
Definition: racemenu.cpp:41
void GfuiEditboxSetString(void *scr, int id, const char *text)
Set a new string.
Definition: guiedit.cpp:383
void GfuiLabelSetText(void *scr, int id, const char *text)
Change the text of a label.
Definition: guilabel.cpp:212
int GfuiFontHeight(int font)
Definition: guiobject.cpp:65
static int rmCurDispMode
Definition: racemenu.cpp:46
unsigned int confMask
Tell what to configure.
Definition: racescreens.h:61
void(* tfuiCallback)(void *)
Definition: tgfclient.h:105
This is the car structure.
This is the race information structures.
void GfuiScreenActivate(void *screen)
Activate a screen and make it current.
Definition: gui.cpp:467
void GfuiAddSKey(void *scr, int key, const char *descr, void *userData, tfuiCallback onKeyPressed, tfuiCallback onKeyReleased)
Add a Special Keyboard shortcut to the screen.
Definition: gui.cpp:816
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
#define GFUI_ALIGN_HL_VB
Definition: tgfclient.h:69
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
#define RM_VAL_INVISIBLE
Definition: raceman.h:318
void GfuiHelpScreen(void *prevScreen)
Generate a help screen.
Definition: guihelp.cpp:48
void GfuiScreenShot(void *)
Save a screen shot in png format.
Definition: gui.cpp:913
void rmChangeDisplayMode(void *)
Definition: racemenu.cpp:124
static Vector y[4]
Definition: Convex.cpp:56
static int rmrpLapsId
Definition: racemenu.cpp:44
static void rmrpUpdDist(void *)
Definition: racemenu.cpp:60
static void rmrpValidate(void *)
Definition: racemenu.cpp:98
int GfuiGrButtonCreate(void *scr, const char *disabled, const char *enabled, const char *focused, const char *pushed, int x, int y, int align, int mouse, void *userDataOnPush, tfuiCallback onPush, void *userDataOnFocus, tfuiCallback onFocus, tfuiCallback onFocusLost)
Add a graphical button to a screen.
Definition: guibutton.cpp:62
Structure for configuring parameters.
Definition: racescreens.h:55
#define GFUI_FONT_MEDIUM_C
Definition: tgfclient.h:173
#define RM_ATTR_DISPMODE
Definition: raceman.h:269
static void rmrpAddKeys(void)
Definition: racemenu.cpp:115
void * prevScreen
Race manager screen to go back.
Definition: racescreens.h:58
static void * scrHandle
Definition: racemenu.cpp:39
#define RM_ATTR_LAPS
Definition: raceman.h:282
void * param
Pointer to race manager parameter set (to set the parameters)
Definition: racescreens.h:57
Track Structure and Track Loader Module Definition.
static void rmrpDeactivate(void *screen)
Definition: racemenu.cpp:50
static const char * rmCurDispModeList[]
Definition: racemenu.cpp:47