/***************************************************************************
file : car.h
created : Sun Jan 30 12:00:15 CET 2000
copyright : (C) 2000-2013 by Eric Espie, Bernhard Wymann
email : torcs@free.fr
version : $Id: car.h,v 1.37.2.11 2014/03/17 18:11:41 berniw Exp $
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
/** @file
This is the car structure.
@author Eric Espie
@version $Id: car.h,v 1.37.2.11 2014/03/17 18:11:41 berniw Exp $
@ingroup carstruct
@note Short cuts are to be used with the carElt structure.
*/
#ifndef __CARV1_H__
#define __CARV1_H__
#include
#include
#define CAR_IDENT 0
#define MAX_NAME_LEN 32
/* designation */
#define FRNT_RGT 0 /**< front right */
#define FRNT_LFT 1 /**< front left */
#define REAR_RGT 2 /**< rear right */
#define REAR_LFT 3 /**< rear left */
#define FRNT 0 /**< front */
#define REAR 1 /**< rear */
#define RIGHT 0 /**< right */
#define LEFT 1 /**< left */
/** Wheels Specifications */
typedef struct
{
tdble rimRadius; /**< Rim radius */
tdble tireHeight; /**< Tire height */
tdble tireWidth; /**< Tire width */
tdble brakeDiskRadius; /**< Brake disk radius */
tdble wheelRadius; /**< Overall wheel radius */
} tWheelSpec;
/* structure access short cuts */
#define _rimRadius(i) info.wheel[i].rimRadius /**< short cut to tWheelSpec#rimRadius */
#define _tireHeight(i) info.wheel[i].tireHeight /**< short cut to tWheelSpec#tireHeight */
#define _tireWidth(i) info.wheel[i].tireWidth /**< short cut to tWheelSpec#tireWidth */
#define _brakeDiskRadius(i) info.wheel[i].brakeDiskRadius /**< short cut to tWheelSpec#brakeDiskRadius */
#define _wheelRadius(i) info.wheel[i].wheelRadius /**< short cut to tWheelSpec#wheelRadius */
/** Static visual attributes */
typedef struct {
int exhaustNb; /**< Number of exhaust pipes (max 2) */
t3Dd exhaustPos[2]; /**< Position of exhaust pipes */
tdble exhaustPower; /**< Power of the flames (from 1 to 3) */
} tVisualAttributes;
/** Static Public info */
typedef struct {
char name[MAX_NAME_LEN]; /**< Driver's name */
char teamname[MAX_NAME_LEN]; /**< Team name */
char carName[MAX_NAME_LEN]; /**< Car object name */
char category[MAX_NAME_LEN]; /**< Car's category */
int raceNumber; /**< Car's race number */
int startRank; /**< Car's starting position */
int driverType; /**< Driver type */
int skillLevel; /**< Driver's skill level (0=rookie -> 3=pro) */
tdble iconColor[3]; /**< Car color in leaders board */
t3Dd dimension; /**< Car's mesures */
t3Dd drvPos; /**< Driver's position */
t3Dd bonnetPos; /**< Bonnet's position */
tdble tank; /**< Fuel tank capa */
tdble steerLock; /**< Steer lock angle */
t3Dd statGC; /**< Static pos of GC (should be the origin of car axis) */
tWheelSpec wheel[4]; /**< Wheels specifications */
tVisualAttributes visualAttr; /**< Visual attributes */
} tInitCar;
/* structure access short cuts */
#define _name info.name /**< short cut to tInitCar#name */
#define _teamname info.teamname /**< short cut to tInitCar#teamname */
#define _carName info.carName /**< short cut to tInitCar#carName */
#define _category info.category /**< short cut to tInitCar#category */
#define _driverType info.driverType /**< short cut to tInitCar#driverType */
#define _skillLevel info.skillLevel /**< short cut to tInitCar#skillLevel */
#define _raceNumber info.raceNumber /**< short cut to tInitCar#raceNumber */
#define _startRank info.startRank /**< short cut to tInitCar#startRank */
#define _dimension info.dimension /**< short cut to tInitCar#dimension */
#define _dimension_x info.dimension.x /**< short cut to tInitCar#dimension.x */
#define _dimension_y info.dimension.y /**< short cut to tInitCar#dimension.y */
#define _dimension_z info.dimension.z /**< short cut to tInitCar#dimension.z */
#define _drvPos_x info.drvPos.x /**< short cut to tInitCar#drvPos.x */
#define _drvPos_y info.drvPos.y /**< short cut to tInitCar#drvPos.y */
#define _drvPos_z info.drvPos.z /**< short cut to tInitCar#drvPos.z */
#define _bonnetPos_x info.bonnetPos.x /**< short cut to tInitCar#bonnetPos.x */
#define _bonnetPos_y info.bonnetPos.y /**< short cut to tInitCar#bonnetPos.y */
#define _bonnetPos_z info.bonnetPos.z /**< short cut to tInitCar#bonnetPos.z */
#define _statGC info.statGC /**< short cut to tInitCar#statGC */
#define _statGC_x info.statGC.x /**< short cut to tInitCar#statGC.x */
#define _statGC_y info.statGC.y /**< short cut to tInitCar#statGC.y */
#define _statGC_z info.statGC.z /**< short cut to tInitCar#statGC.z */
#define _iconColor info.iconColor /**< short cut to tInitCar#iconColor */
#define _tank info.tank /**< short cut to tInitCar#tank */
#define _steerLock info.steerLock /**< short cut to tInitCar#steerLock */
#define _exhaustNb info.visualAttr.exhaustNb /**< short cut to tVisualAttributes#exhaustNb */
#define _exhaustPos info.visualAttr.exhaustPos /**< short cut to tVisualAttributes#exhaustPos */
#define _exhaustPower info.visualAttr.exhaustPower /**< short cut to tVisualAttributes#exhaustPower */
#define RM_DRV_HUMAN 1
#define RM_DRV_ROBOT 2
#define RM_PENALTY_DRIVETHROUGH 1
#define RM_PENALTY_STOPANDGO 2
/** One penalty */
typedef struct CarPenalty
{
int penalty; /**< penalty type */
int lapToClear; /**< the lap before the penalty has to be cleared */
GF_TAILQ_ENTRY(struct CarPenalty) link;
} tCarPenalty;
GF_TAILQ_HEAD(CarPenaltyHead, struct CarPenalty);
/** Race Administrative info */
typedef struct {
double bestLapTime;
bool commitBestLapTime; /* If a rule violation happens (e.g. cutting a corner) the laptime is not commited (false) */
double deltaBestLapTime;
double curLapTime;
double lastLapTime;
double curTime;
tdble topSpeed;
tdble currentMinSpeedForLap; // Min speed on current lap, reset on start line crossing
int laps;
int nbPitStops;
int remainingLaps;
int pos;
double timeBehindLeader;
int lapsBehindLeader;
double timeBehindPrev;
double timeBeforeNext;
tdble distRaced;
tdble distFromStartLine;
double scheduledEventTime;
tTrackOwnPit *pit;
int event;
tCarPenaltyHead penaltyList; /**< List of current penalties */
tdble penaltyTime;
} tCarRaceInfo;
/* structure access */
#define _bestLapTime race.bestLapTime
#define _commitBestLapTime race.commitBestLapTime
#define _deltaBestLapTime race.deltaBestLapTime
#define _curLapTime race.curLapTime
#define _curTime race.curTime
#define _lastLapTime race.lastLapTime
#define _topSpeed race.topSpeed
#define _currentMinSpeedForLap race.currentMinSpeedForLap
#define _laps race.laps
#define _nbPitStops race.nbPitStops
#define _remainingLaps race.remainingLaps
#define _pos race.pos
#define _timeBehindLeader race.timeBehindLeader
#define _lapsBehindLeader race.lapsBehindLeader
#define _timeBehindPrev race.timeBehindPrev
#define _timeBeforeNext race.timeBeforeNext
#define _distRaced race.distRaced
#define _distFromStartLine race.distFromStartLine
#define _pit race.pit
#define _scheduledEventTime race.scheduledEventTime
#define _event race.event
#define _penaltyList race.penaltyList
#define _penaltyTime race.penaltyTime
/** Public info on the cars */
typedef struct {
tDynPt DynGC; /**< GC data (car axis) */
tDynPt DynGCg; /**< GC data (world axis) */
tdble speed; // total speed, sqrt(vx*vx + vy*vy + vz*vz)
sgMat4 posMat; /**< position matrix */
tTrkLocPos trkPos; /**< current track position. The segment is the track segment (not sides)*/
int state; /**< state of the car.
The states are:
- RM_CAR_STATE_FINISH
- RM_CAR_STATE_PIT
- RM_CAR_STATE_DNF
- RM_CAR_STATE_PULLUP
- RM_CAR_STATE_PULLSIDE
- RM_CAR_STATE_PULLDN
- RM_CAR_STATE_OUT
- RM_CAR_STATE_NO_SIMU
- RM_CAR_STATE_BROKEN
- RM_CAR_STATE_OUTOFGAS
*/
#define RM_CAR_STATE_FINISH 0x00000100 /**< Car having passed the finish line */
#define RM_CAR_STATE_PIT 0x00000001 /**< Car currently stopped in pits */
#define RM_CAR_STATE_DNF 0x00000002 /**< Car did not finish */
#define RM_CAR_STATE_PULLUP 0x00000004 /**< Car pulled out in the air */
#define RM_CAR_STATE_PULLSIDE 0x00000008 /**< Car pulled out in the air */
#define RM_CAR_STATE_PULLDN 0x00000010 /**< Car pulled out in the air */
#define RM_CAR_STATE_OUT (RM_CAR_STATE_DNF | RM_CAR_STATE_FINISH)/**< Car out of race */
#define RM_CAR_STATE_NO_SIMU 0x000000FF /**< Do not simulate the car */
#define RM_CAR_STATE_BROKEN 0x00000200 /**< Engine no more working */
#define RM_CAR_STATE_OUTOFGAS 0x00000400 /**< Out of Gas */
#define RM_CAR_STATE_ELIMINATED 0x00000800 /**< Eliminated due to rules infringement */
#define RM_CAR_STATE_SIMU_NO_MOVE 0x00010000 /**< Simulation without car move (i.e. clutch applied and no wheel move) */
tPosd corner[4];
} tPublicCar;
/* structure access */
#define _DynGC pub.DynGC
#define _pos_X pub.DynGC.pos.x
#define _pos_Y pub.DynGC.pos.y
#define _pos_Z pub.DynGC.pos.z
#define _roll pub.DynGC.pos.ax
#define _pitch pub.DynGC.pos.ay
#define _yaw pub.DynGC.pos.az
#define _yaw_rate pub.DynGC.vel.az
#define _speed_x pub.DynGC.vel.x
#define _speed_y pub.DynGC.vel.y
#define _speed_z pub.DynGC.vel.z
#define _accel_x pub.DynGC.acc.x
#define _accel_y pub.DynGC.acc.y
#define _accel_z pub.DynGC.acc.z
#define _state pub.state
#define _trkPos pub.trkPos
#define _speed_X pub.DynGCg.vel.x
#define _speed_Y pub.DynGCg.vel.y
#define _corner_x(i) pub.corner[i].ax
#define _corner_y(i) pub.corner[i].ay
#define _posMat pub.posMat
/** Dynamic wheel information */
typedef struct {
tPosd relPos; /**< position relative to GC */
tdble spinVel; /**< spin velocity rad/s */
tdble brakeTemp; /**< brake temperature from 0 (cool) to 1.0 (hot) */
int state; /**< wheel state */
tTrackSeg *seg; /**< Track segment where the wheel is */
tdble rollRes; /**< rolling resistance, useful for sound */
tdble temp_in, temp_mid, temp_out;
tdble condition;
tdble slipSide;
tdble slipAccel;
tdble Fx;
tdble Fy;
tdble Fz;
} tWheelState;
#define _ride(i) priv.wheel[i].relPos.z
#define _brakeTemp(i) priv.wheel[i].brakeTemp
#define _wheelSpinVel(i) priv.wheel[i].spinVel
#define _wheelSeg(i) priv.wheel[i].seg
#define _wheelSlipSide(i) priv.wheel[i].slipSide
#define _wheelSlipAccel(i) priv.wheel[i].slipAccel
#define _wheelFx(i) priv.wheel[i].Fx
#define _wheelFy(i) priv.wheel[i].Fy
#define _wheelFz(i) priv.wheel[i].Fz
#define _tyreT_in(i) priv.wheel[i].temp_in
#define _tyreT_mid(i) priv.wheel[i].temp_mid
#define _tyreT_out(i) priv.wheel[i].temp_out
#define _tyreCondition(i) priv.wheel[i].condition
#define MAX_GEARS 10 /* including reverse and neutral */
typedef struct tCollisionState_ {
int collision_count;
sgVec3 pos;
sgVec3 force;
} tCollisionState;
/** Data known only by the driver */
typedef struct {
void *paramsHandle; /**< accessible parameters for modules */
void *carHandle; /**< parameters for car caracteristics */
int driverIndex; /**< index when multiple drivers are in the same dll */
char modName[MAX_NAME_LEN]; /**< dll name */
tWheelState wheel[4];
tPosd corner[4]; /**< car's corners position */
int gear; /**< current gear */
tdble fuel; /**< remaining fuel (liters) */
tdble enginerpm;
tdble enginerpmRedLine;
tdble enginerpmMax;
tdble enginerpmMaxTq;
tdble enginerpmMaxPw;
tdble engineMaxTq;
tdble engineMaxPw;
tdble gearRatio[MAX_GEARS]; /**< including final drive */
int gearNb; /**< incl reverse and neutral */
int gearOffset; /**< gearRatio[gear + gearOffset] is the ratio for gear */
tdble skid[4]; /**< skid intensity */
tdble reaction[4]; /**< reaction on wheels */
int collision; /**< Collision value for graphics and sound, clearing is managed by consumers */
int simcollision; /**< For rules etc. reflects the collision state from simu */
float smoke;
t3Dd normal;
t3Dd collpos; /**< Collision position, useful for sound*/
int dammage;
int debug;
tCollisionState collision_state; /**< collision state */
} tPrivCar;
/* structure access */
#define _driverIndex priv.driverIndex
#define _paramsHandle priv.paramsHandle
#define _carHandle priv.carHandle
#define _modName priv.modName
#define _enginerpm priv.enginerpm
#define _enginerpmRedLine priv.enginerpmRedLine
#define _enginerpmMax priv.enginerpmMax
#define _enginerpmMaxTq priv.enginerpmMaxTq
#define _enginerpmMaxPw priv.enginerpmMaxPw
#define _engineMaxTq priv.engineMaxTq
#define _engineMaxPw priv.engineMaxPw
#define _gearRatio priv.gearRatio
#define _gearNb priv.gearNb
#define _gearOffset priv.gearOffset
#define _fuel priv.fuel
#define _gear priv.gear
#define _debug priv.debug
#define _skid priv.skid
#define _reaction priv.reaction
#define _dammage priv.dammage
/** Info returned by driver during the race */
typedef struct {
tdble steer; /**< Steer command [-1.0, 1.0] */
tdble accelCmd; /**< Accelerator command [0.0, 1.0] */
tdble brakeCmd; /**< Brake command [0.0, 1.0] */
tdble clutchCmd; /**< Clutch command [0.0, 1.0] */
int gear; /**< [-1,6] for gear selection */
int raceCmd; /**< command issued by the driver */
#define RM_CMD_NONE 0 /**< No race command */
#define RM_CMD_PIT_ASKED 1 /**< Race command: Pit asked */
char msg[4][32]; /**< 4 lines of 31 characters 0-1 from car 2-3 from race engine */
#define RM_MSG_LEN 31
float msgColor[4]; /**< RGBA of text */
int lightCmd; /**< Lights command */
#define RM_LIGHT_HEAD1 0x00000001 /**< head light 1 */
#define RM_LIGHT_HEAD2 0x00000002 /**< head light 2 */
} tCarCtrl;
#define _steerCmd ctrl.steer
#define _accelCmd ctrl.accelCmd
#define _brakeCmd ctrl.brakeCmd
#define _clutchCmd ctrl.clutchCmd
#define _gearCmd ctrl.gear
#define _raceCmd ctrl.raceCmd
#define _msgCmd ctrl.msg
#define _msgColorCmd ctrl.msgColor
#define _lightCmd ctrl.lightCmd
struct RobotItf;
typedef struct
{
tdble value;
tdble min;
tdble max;
} tCarPitSetupValue;
typedef struct
{
// Steer
tCarPitSetupValue steerLock;
//Wheel
tCarPitSetupValue wheelcamber[4];
tCarPitSetupValue wheeltoe[4];
tCarPitSetupValue wheelrideheight[4];
// Brake
tCarPitSetupValue brakePressure;
tCarPitSetupValue brakeRepartition;
//Suspension
tCarPitSetupValue suspspring[4];
tCarPitSetupValue susppackers[4];
tCarPitSetupValue suspslowbump[4];
tCarPitSetupValue suspslowrebound[4];
tCarPitSetupValue suspfastbump[4];
tCarPitSetupValue suspfastrebound[4];
// Anti-rollbar
tCarPitSetupValue arbspring[2];
// Third element
tCarPitSetupValue thirdspring[2];
tCarPitSetupValue thirdbump[2];
tCarPitSetupValue thirdrebound[2];
tCarPitSetupValue thirdX0[2];
// Gears [1-8]
tCarPitSetupValue gearsratio[MAX_GEARS - 2]; // without reverse/neutral
// Wings
tCarPitSetupValue wingangle[2];
// Differential
tCarPitSetupValue diffratio[3];
tCarPitSetupValue diffmintqbias[3];
tCarPitSetupValue diffmaxtqbias[3];
tCarPitSetupValue diffslipbias[3];
tCarPitSetupValue difflockinginputtq[3];
tCarPitSetupValue difflockinginputbraketq[3];
enum TDiffType { NONE = 0, SPOOL = 1, FREE = 2, LIMITED_SLIP = 3, VISCOUS_COUPLER = 4};
TDiffType diffType[3];
} tCarPitSetup;
/** Command issued by the car during pit stop */
typedef struct
{
tdble fuel;
int repair;
#define RM_PIT_REPAIR 0
#define RM_PIT_STOPANDGO 1
int stopType;
tCarPitSetup setup;
} tCarPitCmd;
#define _pitFuel pitcmd.fuel
#define _pitRepair pitcmd.repair
#define _pitStopType pitcmd.stopType
/** Car structure (tCarElt).
This is the main car structure, used everywhere in the code.
*/
typedef struct CarElt
{
int index; /**< car index */
tInitCar info; /**< public */
tPublicCar pub; /**< public */
tCarRaceInfo race; /**< public */
tPrivCar priv; /**< private */
tCarCtrl ctrl; /**< private */
tCarPitCmd pitcmd; /**< private */
struct RobotItf *robot; /**< private */
struct CarElt *next;
} tCarElt;
/* sections in xml description files */
#define SECT_SIMU_SETTINGS "Simulation Options"
#define SECT_CAR "Car"
#define SECT_FRNT "Front"
#define SECT_FRNTWING "Front Wing"
#define SECT_FRNTAXLE "Front Axle"
#define SECT_FRNTARB "Front Anti-Roll Bar"
#define SECT_FRNTRGTWHEEL "Front Right Wheel"
#define SECT_FRNTLFTWHEEL "Front Left Wheel"
#define SECT_FRNTRGTSUSP "Front Right Suspension"
#define SECT_FRNTLFTSUSP "Front Left Suspension"
#define SECT_FRNTRGTBRAKE "Front Right Brake"
#define SECT_FRNTLFTBRAKE "Front Left Brake"
#define SECT_FRNTDIFFERENTIAL "Front Differential"
#define SECT_REAR "Rear"
#define SECT_REARWING "Rear Wing"
#define SECT_REARAXLE "Rear Axle"
#define SECT_REARARB "Rear Anti-Roll Bar"
#define SECT_REARRGTWHEEL "Rear Right Wheel"
#define SECT_REARLFTWHEEL "Rear Left Wheel"
#define SECT_REARRGTSUSP "Rear Right Suspension"
#define SECT_REARLFTSUSP "Rear Left Suspension"
#define SECT_REARRGTBRAKE "Rear Right Brake"
#define SECT_REARLFTBRAKE "Rear Left Brake"
#define SECT_REARDIFFERENTIAL "Rear Differential"
#define SECT_CENTRALDIFFERENTIAL "Central Differential"
#define SECT_STEER "Steer"
#define SECT_BRKSYST "Brake System"
#define SECT_AERODYNAMICS "Aerodynamics"
#define SECT_ENGINE "Engine"
#define SECT_CLUTCH "Clutch"
#define SECT_DRIVETRAIN "Drivetrain"
#define SECT_GEARBOX "Gearbox"
#define SECT_DRIVER "Driver"
#define SECT_BONNET "Bonnet"
#define SECT_GROBJECTS "Graphic Objects"
#define SECT_EXHAUST "Exhaust"
#define SECT_LIGHT "Light"
/* parameters names */
#define PRM_CATEGORY "category"
#define PRM_LEN "body length"
#define PRM_WIDTH "body width"
#define PRM_OVERALLLEN "overall length"
#define PRM_OVERALLWIDTH "overall width"
#define PRM_HEIGHT "body height"
#define PRM_MASS "mass"
#define PRM_FRWEIGHTREP "front-rear weight repartition"
#define PRM_FRLWEIGHTREP "front right-left weight repartition"
#define PRM_RRLWEIGHTREP "rear right-left weight repartition"
#define PRM_GCHEIGHT "GC height"
#define PRM_TANK "fuel tank"
#define PRM_FUEL "initial fuel"
#define PRM_CENTR "mass repartition coefficient"
#define PRM_INERTIA "inertia"
#define PRM_EFFICIENCY "efficiency"
#define PRM_TYPE "type"
#define PRM_SIZE "size"
/* Tires */
#define PRM_MU "mu"
#define PRM_RIMDIAM "rim diameter"
#define PRM_TIREWIDTH "tire width"
#define PRM_TIRERATIO "tire height-width ratio"
#define PRM_RIDEHEIGHT "ride height"
#define PRM_TOE "toe"
#define PRM_CAMBER "camber"
#define PRM_CA "stiffness"
#define PRM_RFACTOR "dynamic friction"
#define PRM_EFACTOR "elasticity factor"
#define PRM_PRESSURE "pressure"
#define PRM_LOADFMAX "load factor max"
#define PRM_LOADFMIN "load factor min"
#define PRM_OPLOAD "operating load"
#define PRM_SPR "spring"
#define PRM_SUSPCOURSE "suspension course"
#define PRM_BELLCRANK "bellcrank"
#define PRM_PACKERS "packers"
#define PRM_SLOWBUMP "slow bump"
#define PRM_SLOWREBOUND "slow rebound"
#define PRM_FASTBUMP "fast bump"
#define PRM_FASTREBOUND "fast rebound"
#define PRM_BUMPTHRESHOLD "fast bump threshold"
#define PRM_REBOUNDTHRESHOLD "fast rebound threshold"
#define PRM_XPOS "xpos"
#define PRM_YPOS "ypos"
#define PRM_ZPOS "zpos"
#define PRM_STEERLOCK "steer lock"
#define PRM_STEERSPD "max steer speed"
#define PRM_BRKDIAM "disk diameter"
#define PRM_BRKAREA "piston area"
#define PRM_BRKREP "front-rear brake repartition"
#define PRM_BRKPRESS "max pressure"
#define PRM_CX "Cx"
#define PRM_FCL "front Clift"
#define PRM_RCL "rear Clift"
#define PRM_FRNTAREA "front area"
#define PRM_WINGAREA "area"
#define PRM_WINGANGLE "angle"
/* Engine */
#define PRM_REVSLIM "revs limiter"
#define PRM_REVSMAX "revs maxi"
#define PRM_TICKOVER "tickover"
#define PRM_RPM "rpm"
#define PRM_TQ "Tq"
#define ARR_DATAPTS "data points"
#define PRM_FUELCONS "fuel cons factor"
#define PRM_ENGBRKCOEFF "brake coefficient"
#define PRM_POWER "power"
#define PRM_TURBO "turbo"
#define PRM_TURBO_RPM "turbo rpm"
#define PRM_TURBO_FACTOR "turbo factor"
#define PRM_TURBO_LAG "turbo lag"
#define PRM_RATIO "ratio"
#define PRM_BIAS "bias"
#define ARR_GEARS "gears"
#define PRM_SHIFTTIME "shift time"
#define PRM_ROLLCENTER "roll center height"
#define LST_RANGES "Ranges"
#define PRM_THRESHOLD "threshold"
#define PRM_CAR "car"
#define PRM_WHEELSON "wheels"
#define PRM_ENV "env"
#define PRM_BONNET "bonnet"
#define PRM_WHEEL_TEXTURE "wheel texture"
#define PRM_SHADOW_TEXTURE "shadow texture"
#define PRM_MIN_TQ_BIAS "min torque bias"
#define PRM_MAX_TQ_BIAS "max torque bias"
#define PRM_MAX_SLIP_BIAS "max slip bias"
#define PRM_LOCKING_TQ "locking input torque"
#define PRM_LOCKINGBRAKE_TQ "locking brake input torque"
#define PRM_VISCOSITY_FACTOR "viscosity factor"
#define VAL_DIFF_NONE "NONE"
#define VAL_DIFF_SPOOL "SPOOL"
#define VAL_DIFF_FREE "FREE"
#define VAL_DIFF_LIMITED_SLIP "LIMITED SLIP"
#define VAL_DIFF_VISCOUS_COUPLER "VISCOUS COUPLER"
#define VAL_TRANS_RWD "RWD"
#define VAL_TRANS_FWD "FWD"
#define VAL_TRANS_4WD "4WD"
/* graphic */
#define PRM_TACHO_TEX "tachometer texture"
#define PRM_TACHO_XSZ "tachometer width"
#define PRM_TACHO_YSZ "tachometer height"
#define PRM_TACHO_XPOS "tachometer x pos"
#define PRM_TACHO_YPOS "tachometer y pos"
#define PRM_TACHO_NDLXSZ "tachometer needle width"
#define PRM_TACHO_NDLYSZ "tachometer needle height"
#define PRM_TACHO_XCENTER "tachometer needle x center"
#define PRM_TACHO_YCENTER "tachometer needle y center"
#define PRM_TACHO_XDIGITCENTER "tachometer digit x center"
#define PRM_TACHO_YDIGITCENTER "tachometer digit y center"
#define PRM_TACHO_MINVAL "tachometer min value"
#define PRM_TACHO_MAXVAL "tachometer max value"
#define PRM_TACHO_MINANG "tachometer min angle"
#define PRM_TACHO_MAXANG "tachometer max angle"
#define PRM_SPEEDO_TEX "speedometer texture"
#define PRM_SPEEDO_XSZ "speedometer width"
#define PRM_SPEEDO_YSZ "speedometer height"
#define PRM_SPEEDO_XPOS "speedometer x pos"
#define PRM_SPEEDO_YPOS "speedometer y pos"
#define PRM_SPEEDO_NDLXSZ "speedometer needle width"
#define PRM_SPEEDO_NDLYSZ "speedometer needle height"
#define PRM_SPEEDO_XCENTER "speedometer needle x center"
#define PRM_SPEEDO_YCENTER "speedometer needle y center"
#define PRM_SPEEDO_XDIGITCENTER "speedometer digit x center"
#define PRM_SPEEDO_YDIGITCENTER "speedometer digit y center"
#define PRM_SPEEDO_MINVAL "speedometer min value"
#define PRM_SPEEDO_MAXVAL "speedometer max value"
#define PRM_SPEEDO_MINANG "speedometer min angle"
#define PRM_SPEEDO_MAXANG "speedometer max angle"
#define PRM_SPEEDO_DIGITAL "speedometer digital"
#define PRM_WHEEL_3D "3d wheel basename"
#define PRM_WHEEL_3D_DIR "3d wheel directory"
/* Lights */
#define VAL_LIGHT_HEAD1 "head1"
#define VAL_LIGHT_HEAD2 "head2"
#define VAL_LIGHT_BRAKE "brake"
#define VAL_LIGHT_BRAKE2 "brake2"
#define VAL_LIGHT_REVERSE "reverse"
#define VAL_LIGHT_REAR "rear"
/* Simulation Options */
#define PRM_DAMAGE_TYRES "damage/tyres"
#define PRM_DAMAGE_SUSPENSION "damage/suspension"
#define PRM_DAMAGE_ALIGNMENT "damage/alignment"
#define PRM_DAMAGE_AERO "damage/aero"
#define PRM_MODEL_AEROFLOW "model/aero/flow"
#define PRM_MODEL_AERO_FACTOR "model/aero/factor"
#define PRM_MODEL_TYRE_TEMPERATURE "model/tyre/temperature"
// Collision constants.
#define SEM_COLLISION 0x01
#define SEM_COLLISION_XYSCENE 0x02
#define SEM_COLLISION_CAR 0x04
#define SEM_COLLISION_Z 0x08
#define SEM_COLLISION_Z_CRASH 0x10
#endif /* __CARV1_H__ */