1 /***************************************************************************
2 
3     file                 : raceman.h
4     created              : Sun Jan 30 22:59:17 CET 2000
5     copyright            : (C) 2000,2002-2014 by Eric Espie, Bernhard Wymann
6     email                : torcs@free.fr
7     version              : $Id: raceman.h,v 1.28.2.7 2014/04/15 09:34:19 berniw Exp $
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 
20 /** @file
21     		This is the race information structures.
22     @author	<a href=mailto:torcs@free.fr>Eric Espie</a>
23     @version	$Id: raceman.h,v 1.28.2.7 2014/04/15 09:34:19 berniw Exp $
24     @ingroup	raceinfo
25 */
26 
27 #ifndef _RACEMANV1_H_
28 #define _RACEMANV1_H_
29 
30 #include <tgf.h>
31 #include <car.h>
32 #include <track.h>
33 #include <graphic.h>
34 #include <simu.h>
35 
36 #define RCM_IDENT 0
37 
38 struct RmInfo;
39 
40 typedef int (*tfRmRunState) (struct RmInfo *);
41 
42 #define RM_SYNC			0x00000001
43 #define RM_ASYNC		0x00000002
44 
45 #define RM_END_RACE		0x00000010
46 #define RM_CONTINUE_RACE	0x00000020
47 
48 #define RM_NEXT_STEP		0x00000100
49 #define RM_NEXT_RACE		0x00000200
50 #define RM_NEXT_EVENT		0x00000400
51 
52 #define RM_ACTIVGAMESCR		0x01000000
53 #define RM_QUIT			0x40000000
54 
55 
56 #define RCM_MAX_DT_SIMU		0.002
57 #define RCM_MAX_DT_ROBOTS	0.02
58 
59 /** General info on current race */
60 typedef struct {
61     int			ncars;		/**< number of cars */
62     int			totLaps;	/**< total laps */
63     int			state;
64 #define RM_RACE_RUNNING		0X00000001
65 #define RM_RACE_FINISHING	0X00000002
66 #define RM_RACE_ENDED		0X00000004
67 #define RM_RACE_STARTING	0X00000008
68 #define RM_RACE_PRESTART	0X00000010
69 #define RM_RACE_PAUSED		0X40000000
70     int			type;		/**< Race type */
71 #define RM_TYPE_PRACTICE	0 /* Please keep the order */
72 #define RM_TYPE_QUALIF		1
73 #define RM_TYPE_RACE		2
74     int                 maxDammage;
75     unsigned long	fps;
76 } tRaceAdmInfo;
77 
78 #define _ncars		raceInfo.ncars
79 #define _totLaps	raceInfo.totLaps
80 #define _raceState	raceInfo.state
81 #define _raceType	raceInfo.type
82 #define _maxDammage	raceInfo.maxDammage
83 
84 /** cars situation used to inform the GUI and the drivers */
85 typedef struct Situation {
86     tRaceAdmInfo	raceInfo;
87     double		deltaTime;
88     double		currentTime;	/**< current time in sec since the beginning of the simulation */
89     int			nbPlayers;	/**< number of human player in local (splitted screen) */
90     tCarElt		**cars;		/**< list of cars */
91 } tSituation;
92 
93 /** Race Engine */
94 typedef struct
95 {
96     tTrackItf	trackItf;
97     tGraphicItf	graphicItf;
98     tSimItf	simItf;
99 } tRaceModIft;
100 
101 #define RE_STATE_CONFIG			0
102 #define RE_STATE_EVENT_INIT		1
103 #define RE_STATE_PRE_RACE		3
104 #define RE_STATE_RACE_START		5
105 #define RE_STATE_RACE			6
106 #define RE_STATE_RACE_STOP		7
107 #define RE_STATE_RACE_END		8
108 #define RE_STATE_POST_RACE		9
109 #define RE_STATE_EVENT_SHUTDOWN		11
110 #define RE_STATE_SHUTDOWN		12
111 #define RE_STATE_ERROR			13
112 #define RE_STATE_EXIT			14
113 
114 /** Race Engine Car Information about the race */
115 typedef struct
116 {
117     tTrkLocPos	prevTrkPos;
118     tdble	sTime;
119     int		lapFlag;
120     char	*raceMsg;
121     double	totalPitTime;
122     double	startPitTime;
123     tdble	topSpd;
124     tdble	botSpd;
125     tdble	fuel;
126 } tReCarInfo;
127 
128 /** Race Engine Information.
129    @image	html raceenginestate.gif
130  */
131 typedef struct
132 {
133     int			state;
134     void		*param;
135     tRaceModIft		itf;
136     void		*gameScreen;
137     void		*menuScreen;
138     char		*filename;
139     const char *name;
140     const char *raceName;
141     tReCarInfo		*carInfo;
142     double		curTime;
143     double		lastTime;
144     double		timeMult;
145     int			running;
146 #define RM_DISP_MODE_NORMAL	0
147 #define RM_DISP_MODE_CAPTURE	1
148 #define RM_DISP_MODE_NONE	2
149 #define RM_DISP_MODE_CONSOLE	4
150     int			displayMode;
151     int			refreshDisplay;
152 } tRaceEngineInfo;
153 
154 #define _reState	raceEngineInfo.state
155 #define _reParam	raceEngineInfo.param
156 #define _reRacemanItf	raceEngineInfo.itf.racemanItf
157 #define _reTrackItf	raceEngineInfo.itf.trackItf
158 #define _reGraphicItf	raceEngineInfo.itf.graphicItf
159 #define _reSimItf	raceEngineInfo.itf.simItf
160 #define _reGameScreen	raceEngineInfo.gameScreen
161 #define _reMenuScreen	raceEngineInfo.menuScreen
162 #define _reFilename	raceEngineInfo.filename
163 #define _reName		raceEngineInfo.name
164 #define _reRaceName	raceEngineInfo.raceName
165 #define _reCarInfo	raceEngineInfo.carInfo
166 #define _reCurTime	raceEngineInfo.curTime
167 #define _reTimeMult	raceEngineInfo.timeMult
168 #define _reRunning	raceEngineInfo.running
169 #define _reLastTime	raceEngineInfo.lastTime
170 #define _displayMode	raceEngineInfo.displayMode
171 #define _refreshDisplay	raceEngineInfo.refreshDisplay
172 
173 #define RM_PNST_DRIVETHROUGH	0x00000001
174 #define RM_PNST_STOPANDGO	0x00000002
175 #define RM_PNST_STOPANDGO_OK	0x00000004
176 #define RM_PNST_SPD		0x00010000
177 #define RM_PNST_STNGO		0x00020000
178 
179 typedef struct RmRaceRules
180 {
181 	enum RmRuleFlags {
182 		CORNER_CUTTING_TIME_INVALIDATE = 1,
183 		WALL_HIT_TIME_INVALIDATE = 2,
184 		CORNER_CUTTING_TIME_PENALTY = 4
185 	};
186 
187 	int enabled;
188 	tdble fuelFactor;
189 	tdble damageFactor;
190 	tdble refuelFuelFlow;
191 	tdble damageRepairFactor;
192 	tdble pitstopBaseTime;
193 } tRmRaceRules;
194 
195 typedef struct RmCarRules
196 {
197     int			ruleState;
198 } tRmCarRules;
199 
200 typedef struct RmMovieCapture
201 {
202     int		enabled;
203     int		state;
204     double	deltaSimu;
205     double	deltaFrame;
206     double	lastFrame;
207     const char *outputBase;
208     int		currentCapture;
209     int		currentFrame;
210 } tRmMovieCapture;
211 
212 
213 /**
214  * Race Manager General Info
215  */
216 typedef struct RmInfo
217 {
218     tCarElt		*carList;	/**< List of all the cars racing */
219     tSituation		*s;		/**< Situation during race */
220     tTrack		*track;		/**< Current track */
221     void		*params;	/**< Raceman parameters */
222     void		*results;	/**< Race results */
223     tModList		**modList;	/**< drivers loaded */
224     tRmCarRules		*rules;		/**< by car rules */
225     tRaceEngineInfo	raceEngineInfo;
226     tRmMovieCapture	movieCapture;
227 	tRmRaceRules raceRules;
228 } tRmInfo;
229 
230 /*
231  * Parameters name definitions for Race Managers
232  */
233 #define RM_SECT_HEADER		"Header"
234 #define RM_SECT_DRIVERS		"Drivers"
235 #define RM_SECT_STARTINGGRID	"Starting Grid"
236 #define RM_SECT_RACES		"Races"
237 #define RM_SECT_TRACKS		"Tracks"
238 #define RM_SECT_CONF		"Configuration"
239 #define RM_SECT_OPTIONS		"Options"
240 #define RM_SECT_POINTS		"Points"
241 
242 #define RM_SECT_DRIVERS_RACING	"Drivers Start List"
243 
244 #define RM_ATTR_CUR_CONF	"current configuration"
245 #define RM_ATTR_START_ORDER	"starting order"
246 #define RM_ATTR_ALLOW_RESTART	"restart"
247 #define RM_ATTR_SPLASH_MENU	"splash menu"
248 #define RM_ATTR_DISP_START_GRID	"display starting grid"
249 
250 #define RM_ATTR_MAXNUM		"maximum number"
251 #define RM_ATTR_MAX_DRV		"maximum drivers"
252 
253 #define RM_ATTR_PRIO		"priority"
254 #define RM_ATTR_NAME		"name"
255 #define RM_ATTR_DRVNAME		"driver name"
256 #define RM_ATTR_CATEGORY	"category"
257 #define RM_ATTR_DESCR		"description"
258 #define RM_ATTR_BGIMG		"menu image"
259 #define RM_ATTR_RUNIMG		"run image"
260 #define RM_ATTR_STARTIMG	"start image"
261 
262 #define RM_ATTR_MODULE		"module"
263 #define RM_ATTR_IDX		"idx"
264 #define RM_ATTR_FOCUSED		"focused module"
265 #define RM_ATTR_FOCUSEDIDX	"focused idx"
266 #define RM_ATTR_DISPMODE	"display mode"
267 #define RM_ATTR_DISPRES		"display results"
268 
269 #define RM_ATTR_TYPE		"type"
270 #define RM_ATTR_RACE		"race"
271 #define RM_ATTR_ROWS		"rows"
272 #define RM_ATTR_TOSTART		"distance to start"
273 #define RM_ATTR_COLDIST		"distance between columns"
274 #define RM_ATTR_COLOFFSET	"offset within a column"
275 #define RM_ATTR_INITSPEED	"initial speed"
276 #define RM_ATTR_INITHEIGHT	"initial height"
277 #define RM_ATTR_MAX_DMG		"maximum dammage"
278 #define RM_ATTR_DISTANCE	"distance"
279 #define RM_ATTR_LAPS		"laps"
280 #define RM_ATTR_POLE		"pole position side"
281 #define RM_ATTR_CARSPERPIT	"cars per pit"
282 
283 #define RM_ATTR_INVALIDATE_BEST_LAP_WALL_TOUCH "invalidate best lap on wall touch"
284 #define RM_ATTR_INVALIDATE_BEST_LAP_CORNER_CUT "invalidate best lap on corner cutting"
285 #define RM_ATTR_CORNER_CUT_TIME_PENALTY "corner cutting time penalty"
286 #define RM_ATTR_DAMAGE_FACTOR "damage factor"
287 #define RM_ATTR_FUEL_FACTOR "fuel consumption factor"
288 #define RM_ATTR_PIT_SPEED_LIMIT "pit speed limit"
289 #define RM_ATTR_REFUEL_FUEL_FLOW "refuel fuel flow"
290 #define RM_ATTR_DAMAGE_REPAIR_FACTOR "damage repair factor"
291 #define RM_ATTR_PITSTOP_BASE_TIME "pitstop base time"
292 
293 #define RM_ATTR_POINTS		"points"
294 
295 #define RM_VAL_TRACKSEL		"track select"
296 #define RM_VAL_DRVSEL		"drivers select"
297 #define RM_VAL_RACECONF		"race config"
298 #define RM_VAL_CONFRACELEN	"race length"
299 #define RM_VAL_CONFDISPMODE	"display mode"
300 
301 #define RM_VAL_DRV_LIST_ORDER	"drivers list"
302 #define RM_VAL_LAST_RACE_ORDER	"last race"
303 #define RM_VAL_LAST_RACE_RORDER	"last race reversed"
304 
305 #define RM_VAL_RACE		"race"
306 #define RM_VAL_QUALIF		"qualifications"
307 #define RM_VAL_PRACTICE		"practice"
308 
309 #define RM_VAL_YES		"yes"
310 #define RM_VAL_NO		"no"
311 
312 #define RM_VAL_VISIBLE		"normal"
313 #define RM_VAL_INVISIBLE	"results only"
314 
315 
316 #define RM_SECT_MOVIE_CAPTURE	"Movie Capture"
317 
318 #define RM_ATT_CAPTURE_ENABLE	"enable capture"
319 #define RM_ATT_CAPTURE_FPS	"fps"
320 #define RM_ATT_CAPTURE_OUT_DIR	"output directory"
321 
322 /* RESULTS */
323 
324 #define RE_SECT_HEADER		"Header"
325 #define RE_ATTR_DATE		"date"
326 
327 #define RE_SECT_CURRENT		"Current"
328 #define RE_ATTR_CUR_RACE	"current race"
329 #define RE_ATTR_CUR_TRACK	"current track"
330 #define RE_ATTR_CUR_DRIVER	"current driver"
331 
332 #define RE_ATTR_DLL_NAME	"dll name"
333 #define RE_ATTR_INDEX		"index"
334 
335 #define RE_SECT_STANDINGS	"Standings"
336 #define RE_SECT_RESULTS		"Results"
337 #define RE_SECT_RANK		"Rank"
338 
339 #define RE_ATTR_NAME		"name"
340 #define RE_ATTR_CAR		"car"
341 #define RE_ATTR_MODULE		"module"
342 #define RE_ATTR_IDX		"idx"
343 #define RE_ATTR_LAPS		"laps"
344 #define RE_ATTR_BEST_LAP_TIME	"best lap time"
345 #define RE_ATTR_TIME		"time"
346 #define RE_ATTR_TOP_SPEED	"top speed"
347 #define RE_ATTR_BOT_SPEED	"bottom speed"
348 #define RE_ATTR_DAMMAGES	"dammages"
349 #define RE_ATTR_NB_PIT_STOPS	"pits stops"
350 #define RE_ATTR_POINTS		"points"
351 #define RE_ATTR_PENALTYTIME	"penaltytime"
352 
353 #endif /* _RACEMANV1_H_ */
354 
355 
356 
357