TORCS  1.3.10
The Open Racing Car Simulator
Loading...
Searching...
No Matches
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-2026 by Eric Espié, Bernhard Wymann
6 email : berniw@bluewin.ch
7
8 ***************************************************************************/
9
10/***************************************************************************
11 * *
12 * This program is free software; you can redistribute it and/or modify *
13 * it under the terms of the GNU General Public License as published by *
14 * the Free Software Foundation; either version 2 of the License, or *
15 * (at your option) any later version. *
16 * *
17 ***************************************************************************/
18
23
24#include <stdlib.h>
25#include <stdio.h>
26#ifdef WIN32
27#include <windows.h>
28#endif
29#include <tgfclient.h>
30#include <track.h>
31#include <car.h>
32#include <raceman.h>
33#include <robot.h>
34#include <racescreens.h>
35#include <portability.h>
36
37static void *scrHandle;
39static int rmrpDistance;
40static int rmrpLaps;
41static int rmrpDistId;
42static int rmrpLapsId;
44static int rmCurDispMode;
46
47
48static void rmrpDeactivate(void *screen)
49{
51
52 if (screen) {
53 GfuiScreenActivate(screen);
54 }
55}
56
57
58static void rmrpUpdDist(void)
59{
60 char *val;
61 const int BUFSIZE = 1024;
62 char buf[BUFSIZE];
63
65 rmrpDistance = strtol(val, (char **)NULL, 0);
66 if (rmrpDistance == 0) {
67 strcpy(buf, "---");
68 } else {
69 snprintf(buf, BUFSIZE, "%d", rmrpDistance);
70 rmrpLaps = 0;
72 }
74}
75
76
77static void rmrpUpdLaps(void)
78{
79 char *val;
80 const int BUFSIZE = 1024;
81 char buf[BUFSIZE];
82
84 rmrpLaps = strtol(val, (char **)NULL, 0);
85 if (rmrpLaps == 0) {
86 strcpy(buf, "---");
87 } else {
88 snprintf(buf, BUFSIZE, "%d", rmrpLaps);
89 rmrpDistance = 0;
91 }
93}
94
95
96static void rmrpValidate(void)
97{
98 if (rp->confMask & RM_CONF_RACE_LEN) {
100 rmrpUpdLaps();
101 GfParmSetNum(rp->param, rp->title, RM_ATTR_DISTANCE, "km", rmrpDistance);
102 GfParmSetNum(rp->param, rp->title, RM_ATTR_LAPS, (char*)NULL, rmrpLaps);
103 }
104
105 if (rp->confMask & RM_CONF_DISP_MODE) {
107 }
108
109 rmrpDeactivate(rp->nextScreen);
110}
111
112
113static void rmrpAddKeys(void)
114{
115 GfuiAddKeyAction(scrHandle, 27, "Cancel Modifications", [] { rmrpDeactivate(rp->prevScreen); }, tGfuiAction());
116 GfuiAddSKeyAction(scrHandle, GLUT_KEY_F1, "Help", [] { GfuiHelpScreen(scrHandle); }, tGfuiAction());
117 GfuiAddSKeyAction(scrHandle, GLUT_KEY_F12, "Screen-Shot", [] { GfuiScreenShot(NULL); }, tGfuiAction());
118 GfuiAddKeyAction(scrHandle, 13, "Validate Modifications", rmrpValidate, tGfuiAction());
119}
120
121
127
128
134void RmRaceParamMenu(void *vrp)
135{
136 int y, x, x2, dy, dx;
137 const int BUFSIZE = 1024;
138 char buf[BUFSIZE];
139
140 rp = (tRmRaceParam*)vrp;
141
142 snprintf(buf, BUFSIZE, "%s Options", rp->title);
144 GfuiScreenAddBgImg(scrHandle, "data/img/splash-raceopt.png");
145
146 x = 80;
147 x2 = 240;
148 y = 380;
149 dx = 200;
151
152 if (rp->confMask & RM_CONF_RACE_LEN) {
153 GfuiLabelCreate(scrHandle, "Race Distance (km):", GFUI_FONT_MEDIUM_C, x, y, GFUI_ALIGN_HL_VB, 0);
154 rmrpDistance = (int)GfParmGetNum(rp->param, rp->title, RM_ATTR_DISTANCE, "km", 0);
155 if (rmrpDistance == 0) {
156 strcpy(buf, "---");
157 rmrpLaps = (int)GfParmGetNum(rp->param, rp->title, RM_ATTR_LAPS, NULL, 25);
158 } else {
159 snprintf(buf, BUFSIZE, "%d", rmrpDistance);
160 rmrpLaps = 0;
161 }
162
164 x + dx, y,
165 0, 8, tGfuiAction(), rmrpUpdDist);
166
167 y -= dy;
169 if (rmrpLaps == 0) {
170 strcpy(buf, "---");
171 } else {
172 snprintf(buf, BUFSIZE, "%d", rmrpLaps);
173 }
174
176 x + dx, y,
177 0, 8, tGfuiAction(), rmrpUpdLaps);
178 y -= dy;
179 }
180
181 if (rp->confMask & RM_CONF_DISP_MODE) {
183 GfuiGrButtonCreateAction(scrHandle, "data/img/arrow-left.png", "data/img/arrow-left.png",
184 "data/img/arrow-left.png", "data/img/arrow-left-pushed.png",
185 x2, y, GFUI_ALIGN_HL_VB, 1,
187 GfuiGrButtonCreateAction(scrHandle, "data/img/arrow-right.png", "data/img/arrow-right.png",
188 "data/img/arrow-right.png", "data/img/arrow-right-pushed.png",
189 x2 + 150, y, GFUI_ALIGN_HL_VB, 1,
191 if (!strcmp(GfParmGetStr(rp->param, rp->title, RM_ATTR_DISPMODE, RM_VAL_VISIBLE), RM_VAL_INVISIBLE)) {
192 rmCurDispMode = 1;
193 } else {
194 rmCurDispMode = 0;
195 }
197 y -= dy;
198 }
199
202
204 [] { rmrpDeactivate(rp->prevScreen); }, tGfuiAction(), tGfuiAction());
205
206 rmrpAddKeys();
207
209}
static Vector y[4]
Definition Convex.cpp:56
static void * scrHandle
void GfuiHelpScreen(void *prevScreen)
Generate a help screen.
Definition guihelp.cpp:47
void GfuiLabelSetText(void *scr, int id, const char *text)
Change the text of a label.
Definition guilabel.cpp:193
int GfuiFontHeight(int font)
Get the height of an initialized GUI font.
Definition guiobject.cpp:65
void GfuiScreenRelease(void *scr)
Release the given screen.
Definition gui.cpp:670
void GfuiAddKeyAction(void *scr, unsigned char key, const char *descr, const tGfuiAction &onKeyPressed, const tGfuiAction &onKeyReleased)
Add a Keyboard callback to a screen.
Definition gui.cpp:809
void GfuiScreenAddBgImg(void *scr, const char *filename)
Add an image background to a screen.
Definition gui.cpp:1058
int GfuiEditboxCreateAction(void *scr, const char *text, int font, int x, int y, int width, int maxlen, const tGfuiAction &onFocus, const tGfuiAction &onFocusLost, int margin)
Add an edit box to a screen.
Definition guiedit.cpp:53
void * GfuiMenuScreenCreate(const char *title)
Create a new menu screen.
Definition guimenu.cpp:77
void GfuiAddSKeyAction(void *scr, int key, const char *descr, const tGfuiAction &onKeyPressed, const tGfuiAction &onKeyReleased)
Add a Special Keyboard shortcut to the screen.
Definition gui.cpp:895
void GfuiEditboxSetString(void *scr, int id, const char *text)
Set a new string.
Definition guiedit.cpp:390
char * GfuiEditboxGetString(void *scr, int id)
Get the current text of an edit box.
Definition guiedit.cpp:364
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:121
int GfuiGrButtonCreateAction(void *scr, const char *disabled, const char *enabled, const char *focused, const char *pushed, int x, int y, int align, int mouse, const tGfuiAction &onPush, const tGfuiAction &onFocus, const tGfuiAction &onFocusLost)
Add a graphical button to a screen.
Definition guibutton.cpp:58
void GfuiScreenActivate(void *screen)
Activate a screen and make it current.
Definition gui.cpp:508
int GfuiButtonCreateAction(void *scr, const char *text, int font, int x, int y, int width, int align, int mouse, const tGfuiAction &onPush, const tGfuiAction &onFocus, const tGfuiAction &onFocusLost)
Add a button to a screen.
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:2453
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:2623
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:2534
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:2737
void RmRaceParamMenu(void *vrp)
Race options menu.
Definition racemenu.cpp:134
void GfuiScreenShot(void *)
Save a screen shot in png format.
Definition gui.cpp:998
#define RM_VAL_VISIBLE
Definition raceman.h:318
#define RM_ATTR_LAPS
Definition raceman.h:283
#define RM_VAL_INVISIBLE
Definition raceman.h:319
#define RM_ATTR_DISPMODE
Definition raceman.h:270
#define RM_ATTR_DISTANCE
Definition raceman.h:282
static tRmRaceParam rp
static int rmrpDistance
Definition racemenu.cpp:39
static int rmrpLapsId
Definition racemenu.cpp:42
static void rmrpAddKeys(void)
Definition racemenu.cpp:113
static const char * rmCurDispModeList[]
Definition racemenu.cpp:45
static int rmDispModeEditId
Definition racemenu.cpp:43
static void rmrpValidate(void)
Definition racemenu.cpp:96
static void rmrpUpdDist(void)
Definition racemenu.cpp:58
static void rmrpUpdLaps(void)
Definition racemenu.cpp:77
static int rmrpDistId
Definition racemenu.cpp:41
void rmChangeDisplayMode(void)
Definition racemenu.cpp:122
static int rmCurDispMode
Definition racemenu.cpp:44
static int rmrpLaps
Definition racemenu.cpp:40
static void rmrpDeactivate(void *screen)
Definition racemenu.cpp:48
#define RM_CONF_DISP_MODE
Definition racescreens.h:62
#define RM_CONF_RACE_LEN
Definition racescreens.h:61
Structure for configuring parameters.
Definition racescreens.h:55
#define GFUI_FONT_LARGE
Definition tgfclient.h:248
#define GFUI_FONT_MEDIUM_C
Definition tgfclient.h:253
#define GFUI_ALIGN_HL_VB
Definition tgfclient.h:71
#define GFUI_MOUSE_UP
Definition tgfclient.h:82
std::function< void()> tGfuiAction
Definition tgfclient.h:107
#define GFUI_ALIGN_HC_VB
Definition tgfclient.h:74