torcs - 1.2.2

src/interfaces/car.h

Go to the documentation of this file.
00001 /***************************************************************************
00002 
00003     file                 : car.h
00004     created              : Sun Jan 30 12:00:15 CET 2000
00005     copyright            : (C) 2000 by Eric Espie
00006     email                : torcs@free.fr
00007     version              : $Id: car.h,v 1.27 2004/02/06 23:08:53 torcs Exp $
00008 
00009  ***************************************************************************/
00010 
00011 /***************************************************************************
00012  *                                                                         *
00013  *   This program is free software; you can redistribute it and/or modify  *
00014  *   it under the terms of the GNU General Public License as published by  *
00015  *   the Free Software Foundation; either version 2 of the License, or     *
00016  *   (at your option) any later version.                                   *
00017  *                                                                         *
00018  ***************************************************************************/
00019 
00029 #ifndef __CARV1_H__
00030 #define __CARV1_H__
00031 
00032 #include <track.h>
00033 #include <plib/sg.h>
00034 
00035 #define CAR_IDENT       0
00036 
00037 #define MAX_NAME_LEN    32
00038 
00039 /* designation */
00040 #define FRNT_RGT        0       
00041 #define FRNT_LFT        1       
00042 #define REAR_RGT        2       
00043 #define REAR_LFT        3       
00044 #define FRNT            0       
00045 #define REAR            1       
00046 #define RIGHT           0       
00047 #define LEFT            1       
00051 typedef struct
00052 {
00053     tdble       rimRadius;      
00054     tdble       tireHeight;     
00055     tdble       tireWidth;      
00056     tdble       brakeDiskRadius; 
00057     tdble       wheelRadius;    
00058 } tWheelSpec;
00059 /* structure access short cuts */
00060 #define _rimRadius(i)           info.wheel[i].rimRadius         
00061 #define _tireHeight(i)          info.wheel[i].tireHeight        
00062 #define _tireWidth(i)           info.wheel[i].tireWidth         
00063 #define _brakeDiskRadius(i)     info.wheel[i].brakeDiskRadius   
00064 #define _wheelRadius(i)         info.wheel[i].wheelRadius       
00067 typedef struct {
00068     int         exhaustNb;      
00069     t3Dd        exhaustPos[2];  
00070     tdble       exhaustPower;   
00071 } tVisualAttributes;
00072 
00074 typedef struct {
00075     char        name[MAX_NAME_LEN];     
00076     char        carName[MAX_NAME_LEN];  
00077     char        category[MAX_NAME_LEN]; 
00078     int         raceNumber;             
00079     int         startRank;              
00080     int         driverType;             
00081     int         skillLevel;             
00082     tdble       iconColor[3];           
00083     t3Dd        dimension;              
00084     t3Dd        drvPos;                 
00085     t3Dd        bonnetPos;              
00086     tdble       tank;                   
00087     tdble       steerLock;              
00088     t3Dd        statGC;                 
00089     tWheelSpec  wheel[4];               
00090     tVisualAttributes visualAttr;       
00091 } tInitCar;
00092 /* structure access short cuts */
00093 #define _name           info.name                       
00094 #define _carName        info.carName                    
00095 #define _category       info.cartegory                  
00096 #define _driverType     info.driverType                 
00097 #define _skillLevel     info.skillLevel                 
00098 #define _raceNumber     info.raceNumber                 
00099 #define _startRank      info.startRank                  
00100 #define _dimension      info.dimension                  
00101 #define _dimension_x    info.dimension.x                
00102 #define _dimension_y    info.dimension.y                
00103 #define _dimension_z    info.dimension.z                
00104 #define _drvPos_x       info.drvPos.x                   
00105 #define _drvPos_y       info.drvPos.y                   
00106 #define _drvPos_z       info.drvPos.z                   
00107 #define _bonnetPos_x    info.bonnetPos.x                
00108 #define _bonnetPos_y    info.bonnetPos.y                
00109 #define _bonnetPos_z    info.bonnetPos.z                
00110 #define _statGC         info.statGC                     
00111 #define _statGC_x       info.statGC.x                   
00112 #define _statGC_y       info.statGC.y                   
00113 #define _statGC_z       info.statGC.z                   
00114 #define _iconColor      info.iconColor                  
00115 #define _tank           info.tank                       
00116 #define _steerLock      info.steerLock                  
00117 #define _exhaustNb      info.visualAttr.exhaustNb       
00118 #define _exhaustPos     info.visualAttr.exhaustPos      
00119 #define _exhaustPower   info.visualAttr.exhaustPower    
00121 #define RM_DRV_HUMAN    1
00122 #define RM_DRV_ROBOT    2
00123 
00124 
00125 #define RM_PENALTY_DRIVETHROUGH 1
00126 #define RM_PENALTY_STOPANDGO    2
00127 
00129 typedef struct CarPenalty
00130 {
00131     int penalty;        
00132     int lapToClear;     
00133     GF_TAILQ_ENTRY(struct CarPenalty) link;
00134 } tCarPenalty;
00135 
00136 GF_TAILQ_HEAD(CarPenaltyHead, struct CarPenalty);
00137 
00139 typedef struct {
00140     double              bestLapTime;
00141     double              deltaBestLapTime;
00142     double              curLapTime;
00143     double              lastLapTime;
00144     double              curTime;
00145     tdble               topSpeed;
00146     int                 laps;
00147     int                 nbPitStops;
00148     int                 remainingLaps;
00149     int                 pos;
00150     double              timeBehindLeader;
00151     int                 lapsBehindLeader;
00152     double              timeBehindPrev;
00153     double              timeBeforeNext;
00154     tdble               distRaced;
00155     tdble               distFromStartLine;
00156     double              scheduledEventTime;
00157     tTrackOwnPit        *pit;
00158     int                 event;
00159     tCarPenaltyHead     penaltyList;    
00160 } tCarRaceInfo;
00161 /* structure access */
00162 #define _bestLapTime            race.bestLapTime
00163 #define _deltaBestLapTime       race.deltaBestLapTime
00164 #define _curLapTime             race.curLapTime
00165 #define _curTime                race.curTime
00166 #define _lastLapTime            race.lastLapTime
00167 #define _topSpeed               race.topSpeed
00168 #define _laps                   race.laps
00169 #define _nbPitStops             race.nbPitStops
00170 #define _remainingLaps          race.remainingLaps
00171 #define _pos                    race.pos
00172 #define _timeBehindLeader       race.timeBehindLeader
00173 #define _lapsBehindLeader       race.lapsBehindLeader
00174 #define _timeBehindPrev         race.timeBehindPrev
00175 #define _timeBeforeNext         race.timeBeforeNext
00176 #define _distRaced              race.distRaced
00177 #define _distFromStartLine      race.distFromStartLine
00178 #define _pit                    race.pit
00179 #define _scheduledEventTime     race.scheduledEventTime
00180 #define _event                  race.event
00181 #define _penaltyList            race.penaltyList
00182 
00184 typedef struct {
00185     tDynPt      DynGC;          
00186     tDynPt      DynGCg;         
00187     sgMat4      posMat;         
00188     tTrkLocPos  trkPos;         
00189     int         state;          
00202 #define RM_CAR_STATE_FINISH             0x00000100                              
00203 #define RM_CAR_STATE_PIT                0x00000001                              
00204 #define RM_CAR_STATE_DNF                0x00000002                              
00205 #define RM_CAR_STATE_PULLUP             0x00000004                              
00206 #define RM_CAR_STATE_PULLSIDE           0x00000008                              
00207 #define RM_CAR_STATE_PULLDN             0x00000010                              
00208 #define RM_CAR_STATE_OUT                (RM_CAR_STATE_DNF | RM_CAR_STATE_FINISH)
00209 #define RM_CAR_STATE_NO_SIMU            0x000000FF                              
00210 #define RM_CAR_STATE_BROKEN             0x00000200                              
00211 #define RM_CAR_STATE_OUTOFGAS           0x00000400                              
00212 #define RM_CAR_STATE_ELIMINATED         0x00000800                              
00213 #define RM_CAR_STATE_SIMU_NO_MOVE       0x00010000                              
00214     tPosd       corner[4];
00215 
00216 } tPublicCar;
00217 /* structure access */
00218 #define _DynGC          pub.DynGC
00219 #define _pos_X          pub.DynGC.pos.x
00220 #define _pos_Y          pub.DynGC.pos.y
00221 #define _pos_Z          pub.DynGC.pos.z
00222 #define _roll           pub.DynGC.pos.ax
00223 #define _pitch          pub.DynGC.pos.ay
00224 #define _yaw            pub.DynGC.pos.az
00225 #define _yaw_rate       pub.DynGC.vel.az
00226 #define _speed_x        pub.DynGC.vel.x
00227 #define _speed_y        pub.DynGC.vel.y
00228 #define _speed_z        pub.DynGC.vel.z
00229 #define _accel_x        pub.DynGC.acc.x
00230 #define _accel_y        pub.DynGC.acc.y
00231 #define _accel_z        pub.DynGC.acc.z
00232 #define _state          pub.state
00233 #define _trkPos         pub.trkPos
00234 #define _speed_X        pub.DynGCg.vel.x
00235 #define _speed_Y        pub.DynGCg.vel.y
00236 #define _corner_x(i)    pub.corner[i].ax
00237 #define _corner_y(i)    pub.corner[i].ay
00238 #define _posMat         pub.posMat
00239 
00241 typedef struct {
00242     tPosd       relPos;         
00243     tdble       spinVel;        
00244     tdble       brakeTemp;      
00245     int         state;          
00246     tTrackSeg   *seg;           
00247     tdble rollRes;              
00248 } tWheelState;
00249 #define _ride(i)        priv.wheel[i].relPos.z
00250 #define _brakeTemp(i)   priv.wheel[i].brakeTemp
00251 #define _wheelSpinVel(i) priv.wheel[i].spinVel
00252 #define _wheelSeg(i)    priv.wheel[i].seg
00253 
00254 #define MAX_GEARS       10      /* including reverse and neutral */
00255 
00257 typedef struct {
00258     void        *paramsHandle;  
00259     void        *carHandle;     
00260     int         driverIndex;    
00261     char        modName[MAX_NAME_LEN];  
00262     tWheelState wheel[4];
00263     tPosd       corner[4];      
00264     int         gear;           
00265     tdble       fuel;           
00266     tdble       enginerpm;
00267     tdble       enginerpmRedLine;
00268     tdble       enginerpmMax;
00269     tdble       enginerpmMaxTq;
00270     tdble       gearRatio[MAX_GEARS];   
00271     int         gearNb;                 
00272     int         gearOffset;             
00273     tdble       skid[4];                
00274     tdble       reaction[4];
00275     int         collision;
00276     t3Dd        normal;
00277     t3Dd        collpos;
00278     int         dammage;
00279     int         debug;
00280 } tPrivCar;
00281 /* structure access */
00282 #define _driverIndex    priv.driverIndex
00283 #define _paramsHandle   priv.paramsHandle
00284 #define _carHandle      priv.carHandle
00285 #define _modName        priv.modName
00286 #define _enginerpm      priv.enginerpm
00287 #define _enginerpmRedLine       priv.enginerpmRedLine
00288 #define _enginerpmMax   priv.enginerpmMax
00289 #define _enginerpmMaxTq priv.enginerpmMaxTq
00290 #define _gearRatio      priv.gearRatio
00291 #define _gearNb         priv.gearNb
00292 #define _gearOffset     priv.gearOffset
00293 #define _fuel           priv.fuel
00294 #define _gear           priv.gear
00295 #define _debug          priv.debug
00296 #define _skid           priv.skid
00297 #define _reaction       priv.reaction
00298 #define _dammage        priv.dammage
00299 
00301 typedef struct {
00302     tdble       steer;      
00303     tdble       accelCmd;   
00304     tdble       brakeCmd;   
00305     tdble       clutchCmd;  
00306     int         gear;       
00307     int         raceCmd;    
00308 #define RM_CMD_NONE             0       
00309 #define RM_CMD_PIT_ASKED        1       
00310     char        msg[4][32];     
00311 #define RM_MSG_LEN      31
00312     float       msgColor[4]; 
00313     int         lightCmd;    
00314 #define RM_LIGHT_HEAD1          0x00000001      
00315 #define RM_LIGHT_HEAD2          0x00000002      
00316 } tCarCtrl;
00317 #define _steerCmd       ctrl.steer
00318 #define _accelCmd       ctrl.accelCmd
00319 #define _brakeCmd       ctrl.brakeCmd
00320 #define _clutchCmd      ctrl.clutchCmd
00321 #define _gearCmd        ctrl.gear
00322 #define _raceCmd        ctrl.raceCmd
00323 #define _msgCmd         ctrl.msg
00324 #define _msgColorCmd    ctrl.msgColor
00325 #define _lightCmd       ctrl.lightCmd
00326 
00327 struct RobotItf;
00328 
00330 typedef struct 
00331 {
00332     tdble               fuel;
00333     int                 repair;
00334 #define RM_PIT_REPAIR           0
00335 #define RM_PIT_STOPANDGO        1
00336     int                 stopType;
00337 } tCarPitCmd;
00338 #define _pitFuel        pitcmd.fuel
00339 #define _pitRepair      pitcmd.repair
00340 #define _pitStopType    pitcmd.stopType
00341 
00342 
00346 typedef struct CarElt
00347 {
00348     int                 index;  
00349     tInitCar            info;   
00350     tPublicCar          pub;    
00351     tCarRaceInfo        race;   
00352     tPrivCar            priv;   
00353     tCarCtrl            ctrl;   
00354     tCarPitCmd          pitcmd; 
00355     struct RobotItf     *robot; 
00356     struct CarElt       *next;
00357 } tCarElt;
00358 
00359 
00360 
00361 /* sections in xml description files */
00362 
00363 #define SECT_CAR                "Car"
00364 #define SECT_FRNT               "Front"
00365 #define SECT_FRNTWING           "Front Wing"
00366 #define SECT_FRNTAXLE           "Front Axle"
00367 #define SECT_FRNTARB            "Front Anti-Roll Bar"
00368 #define SECT_FRNTRGTWHEEL       "Front Right Wheel"
00369 #define SECT_FRNTLFTWHEEL       "Front Left Wheel"
00370 #define SECT_FRNTRGTSUSP        "Front Right Suspension"
00371 #define SECT_FRNTLFTSUSP        "Front Left Suspension"
00372 #define SECT_FRNTRGTBRAKE       "Front Right Brake"
00373 #define SECT_FRNTLFTBRAKE       "Front Left Brake"
00374 #define SECT_FRNTDIFFERENTIAL   "Front Differential"
00375 #define SECT_REAR               "Rear"
00376 #define SECT_REARWING           "Rear Wing"
00377 #define SECT_REARAXLE           "Rear Axle"
00378 #define SECT_REARARB            "Rear Anti-Roll Bar"
00379 #define SECT_REARRGTWHEEL       "Rear Right Wheel"
00380 #define SECT_REARLFTWHEEL       "Rear Left Wheel"
00381 #define SECT_REARRGTSUSP        "Rear Right Suspension"
00382 #define SECT_REARLFTSUSP        "Rear Left Suspension"
00383 #define SECT_REARRGTBRAKE       "Rear Right Brake"
00384 #define SECT_REARLFTBRAKE       "Rear Left Brake"
00385 #define SECT_REARDIFFERENTIAL   "Rear Differential"
00386 #define SECT_CENTRALDIFFERENTIAL        "Central Differential"
00387 #define SECT_STEER              "Steer"
00388 #define SECT_BRKSYST            "Brake System"
00389 #define SECT_AERODYNAMICS       "Aerodynamics"
00390 #define SECT_ENGINE             "Engine"
00391 #define SECT_CLUTCH             "Clutch"
00392 #define SECT_DRIVETRAIN         "Drivetrain"
00393 #define SECT_GEARBOX            "Gearbox"
00394 #define SECT_DRIVER             "Driver"
00395 #define SECT_BONNET             "Bonnet"
00396 #define SECT_GROBJECTS          "Graphic Objects"
00397 #define SECT_EXHAUST            "Exhaust"
00398 #define SECT_LIGHT              "Light"
00399 
00400 /* parameters names */
00401 #define PRM_CATEGORY            "category"
00402 #define PRM_LEN                 "body length"
00403 #define PRM_WIDTH               "body width"
00404 #define PRM_OVERALLLEN          "overall length"
00405 #define PRM_OVERALLWIDTH        "overall width"
00406 #define PRM_HEIGHT              "body height"
00407 #define PRM_MASS                "mass"
00408 #define PRM_FRWEIGHTREP         "front-rear weight repartition"
00409 #define PRM_FRLWEIGHTREP        "front right-left weight repartition"
00410 #define PRM_RRLWEIGHTREP        "rear right-left weight repartition"
00411 #define PRM_GCHEIGHT            "GC height"
00412 #define PRM_TANK                "fuel tank"
00413 #define PRM_FUEL                "initial fuel"
00414 #define PRM_CENTR               "mass repartition coefficient"
00415 #define PRM_INERTIA             "inertia"
00416 #define PRM_EFFICIENCY          "efficiency"
00417 #define PRM_TYPE                "type"
00418 #define PRM_SIZE                "size"
00419 
00420 /* Tires */
00421 #define PRM_MU                  "mu"
00422 #define PRM_RIMDIAM             "rim diameter"
00423 #define PRM_TIREWIDTH           "tire width"
00424 #define PRM_TIRERATIO           "tire height-width ratio"
00425 #define PRM_RIDEHEIGHT          "ride height"
00426 #define PRM_ROLLINGRESIST       "rolling resistance"
00427 #define PRM_TOE                 "toe"
00428 #define PRM_CAMBER              "camber"
00429 #define PRM_CA                  "stiffness"
00430 #define PRM_RFACTOR             "dynamic friction"
00431 #define PRM_EFACTOR             "elasticity factor"
00432 #define PRM_PRESSURE            "pressure"
00433 #define PRM_LOADFMAX            "load factor max"
00434 #define PRM_LOADFMIN            "load factor min"
00435 #define PRM_OPLOAD              "operating load"
00436 
00437 
00438 #define PRM_SPR                 "spring"
00439 #define PRM_SUSPCOURSE          "suspension course"
00440 #define PRM_BELLCRANK           "bellcrank"
00441 #define PRM_PACKERS             "packers"
00442 #define PRM_SLOWBUMP            "slow bump"
00443 #define PRM_SLOWREBOUND         "slow rebound"
00444 #define PRM_FASTBUMP            "fast bump"
00445 #define PRM_FASTREBOUND         "fast rebound"
00446 
00447 #define PRM_XPOS                "xpos"
00448 #define PRM_YPOS                "ypos"
00449 #define PRM_ZPOS                "zpos"
00450 
00451 #define PRM_STEERLOCK           "steer lock"
00452 #define PRM_STEERSPD            "max steer speed"
00453 
00454 #define PRM_BRKDIAM             "disk diameter"
00455 #define PRM_BRKAREA             "piston area"
00456 #define PRM_BRKREP              "front-rear brake repartition"
00457 #define PRM_BRKPRESS            "max pressure"
00458 
00459 #define PRM_CX                  "Cx"
00460 #define PRM_FCL                 "front Clift"
00461 #define PRM_RCL                 "rear Clift"
00462 #define PRM_FRNTAREA            "front area"
00463 #define PRM_WINGAREA            "area"
00464 #define PRM_WINGANGLE           "angle"
00465 
00466 /* Engine */
00467 #define PRM_REVSLIM             "revs limiter"
00468 #define PRM_REVSMAX             "revs maxi"
00469 #define PRM_TICKOVER            "tickover"
00470 #define PRM_RPM                 "rpm"
00471 #define PRM_TQ                  "Tq"
00472 #define ARR_DATAPTS             "data points"
00473 #define PRM_FUELCONS            "fuel cons factor"
00474 #define PRM_ENGBRKCOEFF         "brake coefficient"
00475 #define PRM_POWER               "power"
00476 
00477 
00478 #define PRM_RATIO               "ratio"
00479 #define PRM_BIAS                "bias"
00480 
00481 #define ARR_GEARS               "gears"
00482 #define PRM_SHIFTTIME           "shift time"
00483 
00484 #define PRM_ROLLCENTER          "roll center height"
00485 
00486 #define LST_RANGES              "Ranges"
00487 #define PRM_THRESHOLD           "threshold"
00488 #define PRM_CAR                 "car"
00489 #define PRM_WHEELSON            "wheels"
00490 #define PRM_ENV                 "env"
00491 #define PRM_BONNET              "bonnet"
00492 #define PRM_WHEEL_TEXTURE       "wheel texture"
00493 #define PRM_SHADOW_TEXTURE      "shadow texture"
00494 
00495 #define PRM_MIN_TQ_BIAS         "min torque bias"
00496 #define PRM_MAX_TQ_BIAS         "max torque bias"
00497 #define PRM_MAX_SLIP_BIAS       "max slip bias"
00498 #define PRM_LOCKING_TQ          "locking input torque"
00499 #define PRM_VISCOSITY_FACTOR    "viscosity factor"
00500 
00501 
00502 #define VAL_DIFF_NONE           "NONE"
00503 #define VAL_DIFF_SPOOL          "SPOOL"
00504 #define VAL_DIFF_FREE           "FREE"
00505 #define VAL_DIFF_LIMITED_SLIP   "LIMITED SLIP"
00506 #define VAL_DIFF_VISCOUS_COUPLER "VISCOUS COUPLER"
00507 
00508 #define VAL_TRANS_RWD           "RWD"
00509 #define VAL_TRANS_FWD           "FWD"
00510 #define VAL_TRANS_4WD           "4WD"
00511 
00512 
00513 /* graphic */
00514 #define PRM_TACHO_TEX           "tachometer texture"
00515 #define PRM_TACHO_XSZ           "tachometer width"
00516 #define PRM_TACHO_YSZ           "tachometer height"
00517 #define PRM_TACHO_XPOS          "tachometer x pos"
00518 #define PRM_TACHO_YPOS          "tachometer y pos"
00519 #define PRM_TACHO_NDLXSZ        "tachometer needle width"
00520 #define PRM_TACHO_NDLYSZ        "tachometer needle height"
00521 #define PRM_TACHO_XCENTER       "tachometer needle x center"
00522 #define PRM_TACHO_YCENTER       "tachometer needle y center"
00523 #define PRM_TACHO_XDIGITCENTER  "tachometer digit x center"
00524 #define PRM_TACHO_YDIGITCENTER  "tachometer digit y center"
00525 #define PRM_TACHO_MINVAL        "tachometer min value"
00526 #define PRM_TACHO_MAXVAL        "tachometer max value"
00527 #define PRM_TACHO_MINANG        "tachometer min angle"
00528 #define PRM_TACHO_MAXANG        "tachometer max angle"
00529 
00530 #define PRM_SPEEDO_TEX          "speedometer texture"
00531 #define PRM_SPEEDO_XSZ          "speedometer width"
00532 #define PRM_SPEEDO_YSZ          "speedometer height"
00533 #define PRM_SPEEDO_XPOS         "speedometer x pos"
00534 #define PRM_SPEEDO_YPOS         "speedometer y pos"
00535 #define PRM_SPEEDO_NDLXSZ       "speedometer needle width"
00536 #define PRM_SPEEDO_NDLYSZ       "speedometer needle height"
00537 #define PRM_SPEEDO_XCENTER      "speedometer needle x center"
00538 #define PRM_SPEEDO_YCENTER      "speedometer needle y center"
00539 #define PRM_SPEEDO_XDIGITCENTER "speedometer digit x center"
00540 #define PRM_SPEEDO_YDIGITCENTER "speedometer digit y center"
00541 #define PRM_SPEEDO_MINVAL       "speedometer min value"
00542 #define PRM_SPEEDO_MAXVAL       "speedometer max value"
00543 #define PRM_SPEEDO_MINANG       "speedometer min angle"
00544 #define PRM_SPEEDO_MAXANG       "speedometer max angle"
00545 #define PRM_SPEEDO_DIGITAL      "speedometer digital"
00546 
00547 /* Lights */
00548 #define VAL_LIGHT_HEAD1         "head1"
00549 #define VAL_LIGHT_HEAD2         "head2"
00550 #define VAL_LIGHT_BRAKE         "brake"
00551 #define VAL_LIGHT_BRAKE2        "brake2"
00552 #define VAL_LIGHT_REVERSE       "reverse"
00553 #define VAL_LIGHT_REAR          "rear"
00554 
00555 
00556 #endif /* __CARV1_H__ */ 
00557 
00558 
00559 

Generated at Thu Feb 26 21:52:27 2004 for torcs by doxygen 1.3.3 written by Dimitri van Heesch, © 1997-1999
TORCS © Eric Espié 1999, 2002.