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