00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
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
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
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
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
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
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
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
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
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
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
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
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
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
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
00557
00558
00559