TORCS  1.3.9
The Open Racing Car Simulator
pitmenu.cpp
Go to the documentation of this file.
1 /***************************************************************************
2 
3  file : pitmenu.cpp
4  created : Mon Apr 24 18:16:37 CEST 2000
5  copyright : (C) 2013-2017 by Eric Espie, Bernhard Wymann
6  email : torcs@free.fr
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 #ifdef WIN32
28 #include <windows.h>
29 #endif
30 #include <tgfclient.h>
31 #include <car.h>
32 #include <portability.h>
33 #include <racescreens.h>
34 
35 static void *menuHandle = NULL;
36 static int fuelId;
37 static int repairId;
38 static tCarElt *rmCar;
39 static tRmInfo *rmInfo;
40 static int tireChangeId;
41 
42 static float LabelColor[] = {1.0, 0.0, 1.0, 1.0};
43 
44 // list of tire change options.
45 static const char *tireChangeLabel[] = {
46  "All",
47  "None"
48 };
52 };
53 static const int nbtireChangeOptions = sizeof(tireChangeLabel) / sizeof(tireChangeLabel[0]);
54 static int currentTireChangeOption = 0;
55 
56 static void rmUpdtFuel(void * /* dummy */)
57 {
58  char *val;
59  const int BUFSIZE = 32;
60  char buf[BUFSIZE];
61 
63  rmCar->pitcmd.fuel = (tdble)strtol(val, (char **)NULL, 0);
64  snprintf(buf, BUFSIZE, "%f", rmCar->pitcmd.fuel);
66 }
67 
68 
69 static void rmUpdtRepair(void * /* dummy */)
70 {
71  char *val;
72  const int BUFSIZE = 32;
73  char buf[BUFSIZE];
74 
76  rmCar->pitcmd.repair = strtol(val, (char **)NULL, 0);
77  snprintf(buf, BUFSIZE, "%d", rmCar->pitcmd.repair);
79 }
80 
81 
83 static void *rmUserData;
84 
85 
86 static void rmStopAndGo(void * /* dummy */)
87 {
88  rmCar->_pitStopType = RM_PIT_STOPANDGO;
90 }
91 
92 
93 static void rmRepair(void* /* dummy */)
94 {
95  rmCar->_pitStopType = RM_PIT_REPAIR;
97 }
98 
99 // Manage tire change state.
100 static void changeTireState(void *vp)
101 {
102  long i = (long) vp;
103 
104  if (i > 0) {
108  }
109  } else {
111  if (currentTireChangeOption < 0) {
113  }
114  }
115 
118 }
119 
120 
121 
129 void RmPitMenuStart(tCarElt *car, tRmInfo *reInfo, void *userdata, tfuiCallback callback)
130 {
131  const int BUFSIZE = 256;
132  char buf[BUFSIZE];
133  int y, x, dy;
134 
135  rmCar = car;
136  rmInfo = reInfo;
137 
138  if (menuHandle) {
140  }
141  menuHandle = GfuiMenuScreenCreate("Pit Stop Info");
142 
143  x = 80;
144  y = 380;
145  snprintf(buf, BUFSIZE, "Driver: %s", car->_name);
148 
149  y -= dy;
150  snprintf(buf, BUFSIZE, "Remaining Laps: %d", car->_remainingLaps);
152 
153  y -= dy;
154  snprintf(buf, BUFSIZE, "Remaining Fuel: %.1f l", car->_fuel);
156 
157  y -= dy;
158  GfuiLabelCreate(menuHandle, "Fuel amount (liters):", GFUI_FONT_MEDIUM_C, x, y, GFUI_ALIGN_HL_VB, 0);
159 
160  int dx = GfuiFontWidth(GFUI_FONT_MEDIUM_C, "Fuel amount (liters)") + 20;
161  snprintf(buf, BUFSIZE, "%d", (int)car->pitcmd.fuel);
163  x + dx, y,
164  100, 10, NULL, (tfuiCallback)NULL, rmUpdtFuel);
165 
166  y -= dy;
167  GfuiLabelCreate(menuHandle, "Repair amount:", GFUI_FONT_MEDIUM_C, x, y, GFUI_ALIGN_HL_VB, 0);
168 
169  snprintf(buf, BUFSIZE, "%d", (int)car->pitcmd.repair);
171  x + dx, y,
172  100, 10, NULL, (tfuiCallback)NULL, rmUpdtRepair);
173 
174  y -= dy;
175 
176  int x2 = x + dx - 15;
177  int x3 = x + dx + 100 + 14;
178  int x4 = (x2+x3)/2;
179 
181 
182  if (!(reInfo->raceRules.tireFactor > 0.0f) || car->info.skillLevel != 3) {
185  tireChangeId = GfuiLabelCreate(menuHandle, "Tire wear is off", GFUI_FONT_MEDIUM_C, x + dx, y, GFUI_ALIGN_HL_VB, 32);
186  } else {
188 
189  GfuiGrButtonCreate(menuHandle, "data/img/arrow-left.png", "data/img/arrow-left.png",
190  "data/img/arrow-left.png", "data/img/arrow-left-pushed.png",
191  x2, y-5, GFUI_ALIGN_HL_VB, 1,
192  (void*)-1, changeTireState,
193  NULL, (tfuiCallback)NULL, (tfuiCallback)NULL);
194  GfuiGrButtonCreate(menuHandle, "data/img/arrow-right.png", "data/img/arrow-right.png",
195  "data/img/arrow-right.png", "data/img/arrow-right-pushed.png",
196  x3, y-5, GFUI_ALIGN_HR_VB, 1,
197  (void*)1, changeTireState,
198  NULL, (tfuiCallback)NULL, (tfuiCallback)NULL);
199 
202  }
203 
205  NULL, rmRepair, NULL, (tfuiCallback)NULL, (tfuiCallback)NULL);
206  rmCallback = callback;
207  rmUserData = userdata;
208 
209  int buttonid;
210  // Just enable stop and go if penalty is pending
211  buttonid = GfuiButtonCreate(menuHandle, "Stop & Go", GFUI_FONT_LARGE, 320, 40, 130, GFUI_ALIGN_HC_VB, GFUI_MOUSE_UP,
212  NULL, rmStopAndGo, NULL, (tfuiCallback)NULL, (tfuiCallback)NULL);
213  tCarPenalty *penalty = GF_TAILQ_FIRST(&(car->_penaltyList));
214  if (!penalty || (penalty && penalty->penalty != RM_PENALTY_STOPANDGO)) {
215  GfuiEnable(menuHandle, buttonid, GFUI_DISABLE);
216  }
217 
218  // Just enable car setup button in practice and qualifying sessions
219  buttonid = GfuiButtonCreate(menuHandle, "Setup", GFUI_FONT_LARGE, 480, 40, 130, GFUI_ALIGN_HC_VB, GFUI_MOUSE_UP,
221  if (reInfo->s->raceInfo.type != RM_TYPE_PRACTICE && reInfo->s->raceInfo.type != RM_TYPE_QUALIF) {
222  GfuiEnable(menuHandle, buttonid, GFUI_DISABLE);
223  }
224 
226 }
static tRmInfo * rmInfo
Definition: pitmenu.cpp:39
static int currentTireChangeOption
Definition: pitmenu.cpp:54
Race Manager General Info.
Definition: raceman.h:218
char * GfuiEditboxGetString(void *scr, int id)
Get the string.
Definition: guiedit.cpp:358
#define GFUI_MOUSE_UP
Definition: tgfclient.h:80
tInitCar info
public
Definition: car.h:458
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
#define RM_TYPE_PRACTICE
Definition: raceman.h:71
void * RmCarSetupScreenInit(void *prevMenu, tCarElt *car, tRmInfo *reInfo)
Display car setup screen, for loading, saving and changing car setups.
TireChange tireChange
Definition: car.h:445
static void rmRepair(void *)
Definition: pitmenu.cpp:93
static int tireChangeId
Definition: pitmenu.cpp:40
static void rmStopAndGo(void *)
Definition: pitmenu.cpp:86
static float LabelColor[]
Definition: pitmenu.cpp:42
Car structure (tCarElt).
Definition: car.h:455
void RmPitMenuStart(tCarElt *car, tRmInfo *reInfo, void *userdata, tfuiCallback callback)
Pit menu.
Definition: pitmenu.cpp:129
One penalty.
Definition: car.h:130
static int fuelId
Definition: pitmenu.cpp:36
tCarPitCmd pitcmd
private
Definition: car.h:463
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
TireChange
Definition: car.h:443
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
tSituation * s
Situation during race.
Definition: raceman.h:221
#define RM_PENALTY_STOPANDGO
Definition: car.h:127
static const char * tireChangeLabel[]
Definition: pitmenu.cpp:45
static void * menuHandle
Definition: pitmenu.cpp:35
#define GFUI_ALIGN_HR_VB
Definition: tgfclient.h:75
#define GFUI_FONT_LARGE_C
Definition: tgfclient.h:172
The Gaming Framework API (client part).
#define GFUI_FONT_LARGE
Definition: tgfclient.h:168
#define RM_TYPE_QUALIF
Definition: raceman.h:72
void GfuiEditboxSetString(void *scr, int id, const char *text)
Set a new string.
Definition: guiedit.cpp:383
static tfuiCallback rmCallback
Definition: pitmenu.cpp:82
void GfuiLabelSetText(void *scr, int id, const char *text)
Change the text of a label.
Definition: guilabel.cpp:212
float tdble
Floating point type used in TORCS.
Definition: tgf.h:48
int GfuiFontHeight(int font)
Definition: guiobject.cpp:65
tRmRaceRules raceRules
Definition: raceman.h:229
void GfuiLabelSetColor(void *scr, int id, float *color)
Change the color of a label.
Definition: guilabel.cpp:239
static tCarElt * rmCar
Definition: pitmenu.cpp:38
#define RM_PIT_REPAIR
Definition: car.h:438
static void * rmUserData
Definition: pitmenu.cpp:83
void(* tfuiCallback)(void *)
Definition: tgfclient.h:105
This is the car structure.
void GfuiScreenActivate(void *screen)
Activate a screen and make it current.
Definition: gui.cpp:467
int GfuiEnable(void *scr, int id, int flag)
Enable / Disable an object.
Definition: guiobject.cpp:434
static int repairId
Definition: pitmenu.cpp:37
int GfuiFontWidth(int font, const char *text)
Definition: guiobject.cpp:70
#define RM_PIT_STOPANDGO
Definition: car.h:439
#define GF_TAILQ_FIRST(head)
First element of a TAILQ.
Definition: tgf.h:464
#define GFUI_DISABLE
Definition: tgfclient.h:161
#define GFUI_ALIGN_HC_VB
Definition: tgfclient.h:72
tdble tireFactor
Definition: raceman.h:193
#define GFUI_ALIGN_HL_VB
Definition: tgfclient.h:69
int type
Race type.
Definition: raceman.h:70
static void rmUpdtFuel(void *)
Definition: pitmenu.cpp:56
static const tCarPitCmd::TireChange tireChangeList[]
Definition: pitmenu.cpp:49
tRaceAdmInfo raceInfo
Definition: raceman.h:86
static Vector y[4]
Definition: Convex.cpp:56
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
#define GFUI_FONT_MEDIUM_C
Definition: tgfclient.h:173
int penalty
penalty type
Definition: car.h:132
tdble fuel
Definition: car.h:436
static void rmUpdtRepair(void *)
Definition: pitmenu.cpp:69
static void changeTireState(void *vp)
Definition: pitmenu.cpp:100
static const int nbtireChangeOptions
Definition: pitmenu.cpp:53
int skillLevel
Driver&#39;s skill level (0=rookie -> 3=pro)
Definition: car.h:81
int repair
Definition: car.h:437