1098 lines
45 KiB
C
1098 lines
45 KiB
C
/***************************************************************************
|
|
|
|
file : car.h
|
|
created : Sun Jan 30 12:00:15 CET 2000
|
|
copyright : (C) 2000 by Eric Espie
|
|
email : torcs@free.fr
|
|
version : $Id$
|
|
|
|
***************************************************************************/
|
|
|
|
/***************************************************************************
|
|
* *
|
|
* 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 <a href=mailto:torcs@free.fr>Eric Espie</a>
|
|
@version $Id$
|
|
@ingroup carstruct
|
|
@note Short cuts are to be used with the carElt structure.
|
|
*/
|
|
|
|
|
|
#ifndef __CARV1_H__
|
|
#define __CARV1_H__
|
|
|
|
#include <track.h>
|
|
#include <plib/sg.h>
|
|
|
|
#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;
|
|
|
|
/** skill levels */
|
|
enum tSkillLevel
|
|
{
|
|
ARCADE,
|
|
SEMI_ROOKIE,
|
|
ROOKIE,
|
|
AMATEUR,
|
|
SEMI_PRO,
|
|
PRO
|
|
};
|
|
|
|
/** Static Public info */
|
|
typedef struct {
|
|
char name[MAX_NAME_LEN]; /**< Driver's name */
|
|
char sname[MAX_NAME_LEN]; /**< Driver's short name */
|
|
char codename[3+1]; /**< Driver's 3-letter codename */
|
|
char nationname[2+1]; /**< Driver's nationality 2-letter codename */
|
|
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 networkplayer; /**< Network player */
|
|
tSkillLevel skillLevel; /**< Driver's skill level */
|
|
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 */
|
|
tdble steerWheelRot; /**< Steering wheel rotation (lock to lock) */
|
|
t3Dd statGC; /**< Static pos of GC (should be the origin of car axis) */
|
|
tWheelSpec wheel[4]; /**< Wheels specifications */
|
|
tVisualAttributes visualAttr; /**< Visual attributes */
|
|
char masterModel[MAX_NAME_LEN]; /**< Master 3D model car name (the exact folder name) */
|
|
char skinName[MAX_NAME_LEN]; /**< Custom skin name, if any */
|
|
int skinTargets; /**< Target objects for the custom skinning
|
|
<br>The possible targets are :
|
|
- RM_CAR_SKIN_TARGET_WHOLE_LIVERY
|
|
- RM_CAR_SKIN_TARGET_3D_WHEELS
|
|
- RM_CAR_SKIN_TARGET_INTERIOR
|
|
- RM_CAR_SKIN_TARGET_BOARD
|
|
- RM_CAR_SKIN_TARGET_DRIVER
|
|
- RM_CAR_SKIN_TARGET_PIT_DOOR
|
|
*/
|
|
#define RM_CAR_SKIN_TARGET_WHOLE_LIVERY 0x00000001 /**< The whole car external livery */
|
|
#define RM_CAR_SKIN_TARGET_3D_WHEELS 0x00000002 /**< The 3D wheels */
|
|
#define RM_CAR_SKIN_TARGET_INTERIOR 0x00000010 /**< The car interior */
|
|
#define RM_CAR_SKIN_TARGET_BOARD 0x00000020 /**< The interior instrument board */
|
|
#define RM_CAR_SKIN_TARGET_DRIVER 0x00000040 /**< The driver */
|
|
#define RM_CAR_SKIN_TARGET_PIT_DOOR 0x00000100 /**< The pit door logo */
|
|
} tInitCar;
|
|
|
|
/* structure access shortcuts */
|
|
#define _name info.name /**< short cut to tInitCar#name */
|
|
#define _sname info.sname /**< short cut to tInitCar#sname */
|
|
#define _cname info.codename /**< short cut to tInitCar#codename */
|
|
#define _nationname info.nationname /**< short cut to tInitCar#nationname */
|
|
#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 _networkPlayer info.networkplayer /**< short cut to tInitCar#networkplayer*/
|
|
#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 _steerWheelRot info.steerWheelRot /**< short cut to tInitCar#steerWheelRot */
|
|
#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 _masterModel info.masterModel /**< short cut to tInitCar#masterModel */
|
|
#define _skinName info.skinName /**< short cut to tInitCar#skinName */
|
|
#define _skinTargets info.skinTargets /**< short cut to tInitCar#skinTargets */
|
|
|
|
#define RM_DRV_HUMAN 1
|
|
#define RM_DRV_ROBOT 2
|
|
|
|
#define RM_PENALTY_DRIVETHROUGH 1
|
|
#define RM_PENALTY_STOPANDGO 2
|
|
#define RM_PENALTY_10SEC_STOPANDGO 3
|
|
#define RM_PENALTY_DISQUALIFIED 4
|
|
|
|
/** 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* bestSplitTime;
|
|
double deltaBestLapTime;
|
|
double curLapTime;
|
|
double* curSplitTime;
|
|
double lastLapTime;
|
|
double curTime;
|
|
int trackPositionCount; /** number of track positions */
|
|
float* bestLapTimeAtTrackPosition; /** here we will store for the best laptime the current laptime for each meter of track */
|
|
float* currLapTimeAtTrackPosition; /** here we will store for the current laptime the current laptime for each meter of track */
|
|
tdble topSpeed;
|
|
tdble currentMinSpeedForLap; // Min speed on current lap, reset on start line crossing
|
|
int laps;
|
|
int bestLap;
|
|
int nbPitStops;
|
|
int remainingLaps;
|
|
int pos;
|
|
double timeBehindLeader;
|
|
int lapsBehindLeader;
|
|
double timeBehindPrev;
|
|
double timeBeforeNext;
|
|
tdble distRaced;
|
|
tdble distFromStartLine;
|
|
int currentSector;
|
|
int nbSectors;
|
|
double trackLength;
|
|
double scheduledEventTime;
|
|
tTrackOwnPit *pit;
|
|
int event;
|
|
tCarPenaltyHead penaltyList; /**< List of current penalties */
|
|
tdble penaltyTime;
|
|
tdble prevFromStartLine;
|
|
double wrongWayTime;
|
|
} tCarRaceInfo;
|
|
/* structure access */
|
|
#define _bestLapTime race.bestLapTime
|
|
#define _commitBestLapTime race.commitBestLapTime
|
|
#define _bestSplitTime race.bestSplitTime
|
|
#define _deltaBestLapTime race.deltaBestLapTime
|
|
#define _curLapTime race.curLapTime
|
|
#define _curSplitTime race.curSplitTime
|
|
#define _lastLapTime race.lastLapTime
|
|
#define _curTime race.curTime
|
|
#define _trackPositionCount race.trackPositionCount
|
|
#define _bestLapTimeAtTrackPosition race.bestLapTimeAtTrackPosition
|
|
#define _currLapTimeAtTrackPosition race.currLapTimeAtTrackPosition
|
|
#define _topSpeed race.topSpeed
|
|
#define _currentMinSpeedForLap race.currentMinSpeedForLap
|
|
#define _laps race.laps
|
|
#define _bestLap race.bestLap
|
|
#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 _currentSector race.currentSector
|
|
#define _nbSectors race.nbSectors
|
|
#define _trackLength race.trackLength
|
|
#define _pit race.pit
|
|
#define _scheduledEventTime race.scheduledEventTime
|
|
#define _event race.event
|
|
#define _penaltyList race.penaltyList
|
|
#define _penaltyTime race.penaltyTime
|
|
#define _prevFromStartLine race.prevFromStartLine
|
|
#define _wrongWayTime race.wrongWayTime
|
|
|
|
/** 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.
|
|
<br>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
|
|
- RM_CAR_STATE_ELIMINATED
|
|
- RM_CAR_STATE_ENDRACE_CALLED
|
|
- RM_CAR_STATE_SIMU_NO_MOVE
|
|
*/
|
|
#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_ENDRACE_CALLED 0x00001000 /**< Endrace called so robot freed a part of its data */
|
|
#define RM_CAR_STATE_SIMU_NO_MOVE 0x00010000 /**< Simulation without car move (i.e. clutch applied and no wheel move) */
|
|
tPosd corner[4];
|
|
tdble glance; /* Glance angle degrees, left -ve, right +ve */
|
|
tdble oldglance;
|
|
bool lookback; /*if true temporary enable the look back camera*/
|
|
} 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 _speed_xy pub.DynGC.vel.xy
|
|
#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
|
|
#define _glance pub.glance
|
|
#define _oldglance pub.oldglance
|
|
#define _lookback pub.lookback
|
|
|
|
/** 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; /**< tire temperature inside, middle and outside of tread */
|
|
tdble temp_opt; /**< optimal tire temperature */
|
|
tdble condition; /**< tire condition, between 0 and 1 */
|
|
tdble treadDepth; /**< tread depth, between 0 and 1 */
|
|
tdble slipNorm; /**< normalized slip, the variable of Magic Formula */
|
|
tdble slipOpt; /**< the value of slipNorm giving maximal grip */
|
|
tdble slipSide;
|
|
tdble slipAccel;
|
|
tdble Fx;
|
|
tdble Fy;
|
|
tdble Fz;
|
|
tdble effectiveMu;
|
|
tdble currentPressure; // current tire pressure considering temperature
|
|
tdble currentWear; // [0..1], 1 means totally worn (tread thickness 0)
|
|
tdble currentGraining; // [0..1], 1 means totally grained
|
|
int compound; //the curretly used tire compound (SOFT = 1, MEDIUM = 2, HARD = 3, WET = 4, EXTREM_WET = 5);
|
|
} tWheelState;
|
|
/* structure access */
|
|
#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 _wheelSlipNorm(i) priv.wheel[i].slipNorm
|
|
#define _wheelSlipOpt(i) priv.wheel[i].slipOpt
|
|
#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 _tyreT_opt(i) priv.wheel[i].temp_opt
|
|
#define _tyreCondition(i) priv.wheel[i].condition
|
|
#define _tyreTreadDepth(i) priv.wheel[i].treadDepth
|
|
#define _tyreEffMu(i) priv.wheel[i].effectiveMu
|
|
#define _tyreCurrentPressure(i) priv.wheel[i].currentPressure
|
|
#define _tyreCompound(i) priv.wheel[i].compound
|
|
|
|
#define MAX_GEARS 10 /* including reverse and neutral */
|
|
|
|
typedef struct tCollisionState_
|
|
{
|
|
int collision_count;
|
|
sgVec3 pos;
|
|
sgVec3 force;
|
|
} tCollisionState;
|
|
/* structure access */
|
|
#define _collCount priv.collision_state.collision_count
|
|
#define _collPos priv.collision_state.pos
|
|
#define _collForce priv.collision_state.force
|
|
|
|
typedef struct MemoryPoolItem tMemoryPoolItem;
|
|
typedef tMemoryPoolItem* tMemoryPool;
|
|
|
|
typedef struct MemPoolCar
|
|
{
|
|
tMemoryPool newTrack;
|
|
tMemoryPool newRace;
|
|
tMemoryPool endRace;
|
|
tMemoryPool shutdown;
|
|
} tMemPoolCar;
|
|
|
|
/* structrure to store one parameter of car setup */
|
|
typedef struct
|
|
{
|
|
tdble value; /* actual value */
|
|
tdble min, max; /* limits for value*/
|
|
tdble desired_value; /* desired new value */
|
|
tdble stepsize; /* value of increment/decrement in one step */
|
|
bool changed; /* TRUE if the item has been changed */
|
|
} tCarSetupItem;
|
|
|
|
/* data for a dashboard item */
|
|
typedef struct
|
|
{
|
|
int type; /* type of the item, for possible values see below */
|
|
tCarSetupItem *setup; /* store the items setup values */
|
|
} tDashboardItem;
|
|
/* constants for type: */
|
|
#define DI_NONE -1
|
|
/* types for dashboardInstant */
|
|
#define DI_BRAKE_REPARTITION 0
|
|
#define DI_FRONT_ANTIROLLBAR 1
|
|
#define DI_REAR_ANTIROLLBAR 2
|
|
#define DI_FRONT_DIFF_MAX_SLIP_BIAS 3
|
|
#define DI_FRONT_DIFF_COAST_MAX_SLIP_BIAS 4
|
|
#define DI_REAR_DIFF_MAX_SLIP_BIAS 5
|
|
#define DI_REAR_DIFF_COAST_MAX_SLIP_BIAS 6
|
|
#define DI_CENTRAL_DIFF_MAX_SLIP_BIAS 7
|
|
#define DI_CENTRAL_DIFF_COAST_MAX_SLIP_BIAS 8
|
|
/* number of instant types */
|
|
#define NR_DI_INSTANT 9
|
|
/* types for dashboardRequest */
|
|
#define DI_FUEL 32
|
|
#define DI_REPAIR 33
|
|
#define DI_TYRE_SET 34
|
|
#define DI_FRONT_WING_ANGLE 35
|
|
#define DI_REAR_WING_ANGLE 36
|
|
#define DI_COMPOUND_SET 37
|
|
#define DI_PENALTY 40
|
|
/* number of request types */
|
|
#define NR_DI_REQUEST 7
|
|
|
|
/** 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 */
|
|
int moduleIndex; /**< index which is the same as the one in the files */
|
|
char modName[MAX_NAME_LEN]; /**< dll name */
|
|
tWheelState wheel[4];
|
|
tPosd corner[4]; /**< car's corners position */
|
|
int gear; /**< current gear */
|
|
int gearNext; /**< next gear while shiting */
|
|
tdble fuel; /**< remaining fuel (liters) */
|
|
tdble fuel_consumption_total; /**< l */
|
|
tdble fuel_consumption_instant; /**< l/100km (>100 means infinity) */
|
|
tdble enginerpm;
|
|
tdble enginerpmRedLine;
|
|
tdble enginerpmMax;
|
|
tdble enginerpmMaxTq;
|
|
tdble enginerpmMaxPw;
|
|
tdble engineMaxTq;
|
|
tdble engineMaxPw;
|
|
tdble engineMaxTempWater;
|
|
tdble engineTempWater;
|
|
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;
|
|
int simcollision; /**< For rules etc. reflects the collision state from simu */
|
|
float smoke;
|
|
t3Dd normal;
|
|
t3Dd collpos; /**< Collision position, useful for sound ; Simu V2 only */
|
|
int dammage;
|
|
int debug;
|
|
tdble localTemperature; /** < air temperature in race */
|
|
tdble localPressure; /**< Environment pressure at cars location */
|
|
tCollisionState collision_state; /**< collision state ; Simu V3 only */
|
|
tMemPoolCar memoryPool;
|
|
tdble driveSkill; /**< Skill level for robots: 0.0 means as fast as possible; 10.0 means at a slower speed so players can easier win */
|
|
tdble steerTqCenter; /**< torques on steering wheel for force feedback, this is the centering torque, linear with steering angle */
|
|
tdble steerTqAlign; /**< force feedback torque: tire aligning torque from magic formula */
|
|
tDashboardItem dashboardInstant[NR_DI_INSTANT];
|
|
int dashboardInstantNb; /**< number and list of immediately changing items in dashboard */
|
|
tDashboardItem dashboardRequest[NR_DI_REQUEST];
|
|
int dashboardRequestNb; /**< number and list of items requested to change during next pit stop */
|
|
int dashboardActiveItem; /**< active item in dashboard, 0 .. dashboardInstantNb+dashboardRequestNb-1 */
|
|
} tPrivCar;
|
|
/* structure access */
|
|
#define _fuelTotal priv.fuel_consumption_total
|
|
#define _fuelInstant priv.fuel_consumption_instant
|
|
#define _driverIndex priv.driverIndex
|
|
#define _moduleIndex priv.moduleIndex
|
|
#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 _engineMaxTempWater priv.engineMaxTempWater
|
|
#define _engineTempWater priv.engineTempWater
|
|
#define _gearRatio priv.gearRatio
|
|
#define _gearNb priv.gearNb
|
|
#define _gearOffset priv.gearOffset
|
|
#define _fuel priv.fuel
|
|
#define _gear priv.gear
|
|
#define _gearNext priv.gearNext
|
|
#define _debug priv.debug
|
|
#define _airtemp priv.localTemperature
|
|
#define _airPressure priv.localPressure
|
|
#define _skid priv.skid
|
|
#define _reaction priv.reaction
|
|
#define _dammage priv.dammage
|
|
#define _driveSkill priv.driveSkill
|
|
#define _collision priv.collision
|
|
|
|
#define _smoke priv.smoke
|
|
#define _normal priv.normal
|
|
#define _coll2Pos priv.collpos
|
|
|
|
#define _steerTqCenter priv.steerTqCenter
|
|
#define _steerTqAlign priv.steerTqAlign
|
|
|
|
#define _newTrackMemPool priv.memoryPool.newTrack
|
|
#define _newRaceMemPool priv.memoryPool.newRace
|
|
#define _endRaceMemPool priv.memoryPool.endRace
|
|
#define _shutdownMemPool priv.memoryPool.shutdown
|
|
|
|
#define _dashboardInstant priv.dashboardInstant
|
|
#define _dashboardInstantNb priv.dashboardInstantNb
|
|
#define _dashboardRequest priv.dashboardRequest
|
|
#define _dashboardRequestNb priv.dashboardRequestNb
|
|
#define _dashboardActiveItem priv.dashboardActiveItem
|
|
|
|
/** Info returned by driver during the race */
|
|
/** New order to get better alignment, additional parameters for new features */
|
|
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] */
|
|
|
|
// New commands for single wheel braking
|
|
tdble brakeFrontLeftCmd; /**< Brake front left command [0.0, 1.0] 0: no brake; 1: max brake */
|
|
tdble brakeFrontRightCmd; /**< Brake front right command [0.0, 1.0] 0: no brake; 1: max brake */
|
|
tdble brakeRearLeftCmd; /**< Brake rear left command [0.0, 1.0] 0: no brake; 1: max brake */
|
|
tdble brakeRearRightCmd; /**< Brake rear right command [0.0, 1.0] 0: no brake; 1: max brake */
|
|
|
|
// New commands for variable wings (incl. airbrake)
|
|
tdble wingFrontCmd; /**< Wing angle of attack front [0, PI/4: angle in rad] */
|
|
tdble wingRearCmd; /**< Wing angle of attack rear [0, PI/4: angle in rad] */
|
|
tdble reserved1; /**< reserved for future use */
|
|
tdble reserved2; /**< reserved for future use */
|
|
|
|
int gear; /**< [-1,MAX_GEARS - 2] 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 */
|
|
#define RM_CMD_MAX_MSG_SIZE 32
|
|
|
|
int lightCmd; /**< Lights command */
|
|
#define RM_LIGHT_HEAD1 0x00000001 /**< head light 1 */
|
|
#define RM_LIGHT_HEAD2 0x00000002 /**< head light 2 */
|
|
|
|
int ebrakeCmd; /**< Parking/Emergency Brake command */
|
|
|
|
int wingControlMode; /**< 0: No wing control; 1 fixed wing angles; 2 variable wing angles */
|
|
int singleWheelBrakeMode; /**< 0: No single wheel brake; 1 single wheel brake mode */
|
|
int switch3; /**< reserved for future use */
|
|
int telemetryMode; /**< Define mode for telemetry output: 0: no output; 1: full output; ... see car.cpp SimCarUpdate2 */
|
|
|
|
char msg[4][RM_CMD_MAX_MSG_SIZE]; /**< 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 */
|
|
tDashboardItem *setupChangeCmd; /* setup item changed in dashboard */
|
|
} 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 _lightCmd ctrl.lightCmd
|
|
#define _ebrakeCmd ctrl.ebrakeCmd
|
|
|
|
#define _brakeFLCmd ctrl.brakeFrontLeftCmd
|
|
#define _brakeFRCmd ctrl.brakeFrontRightCmd
|
|
#define _brakeRLCmd ctrl.brakeRearLeftCmd
|
|
#define _brakeRRCmd ctrl.brakeRearRightCmd
|
|
|
|
#define _wingFCmd ctrl.wingFrontCmd
|
|
#define _wingRCmd ctrl.wingRearCmd
|
|
|
|
#define _msgCmd ctrl.msg
|
|
#define _msgColorCmd ctrl.msgColor
|
|
|
|
#define _telemetryMode ctrl.telemetryMode
|
|
#define _singleWheelBrakeMode ctrl.singleWheelBrakeMode
|
|
|
|
struct RobotItf;
|
|
|
|
/* car setup parameters */
|
|
typedef struct
|
|
{
|
|
tCarSetupItem FRWeightRep, FRLWeightRep, RRLWeightRep;
|
|
tCarSetupItem fuel;
|
|
tCarSetupItem tireSet;
|
|
tCarSetupItem tireCompound;
|
|
tCarSetupItem wingAngle[2];
|
|
tCarSetupItem revsLimiter;
|
|
tCarSetupItem gearRatio[MAX_GEARS];
|
|
int differentialType[3];
|
|
tCarSetupItem differentialRatio[3];
|
|
tCarSetupItem differentialMinTqBias[3], differentialMaxTqBias[3], differentialViscosity[3];
|
|
tCarSetupItem differentialLockingTq[3], differentialMaxSlipBias[3], differentialCoastMaxSlipBias[3];
|
|
tCarSetupItem steerLock, steerWheelRot;
|
|
tCarSetupItem brakeRepartition, brakePressure;
|
|
tCarSetupItem rideHeight[4], toe[4], camber[4];
|
|
tCarSetupItem tirePressure[4], tireOpLoad[4]; //note: pressure is unused now
|
|
tCarSetupItem arbSpring[2], arbBellcrank[2];
|
|
tCarSetupItem heaveSpring[2], heaveBellcrank[2], heaveInertance[2];
|
|
tCarSetupItem heaveFastBump[2], heaveSlowBump[2], heaveBumpLvel[2];
|
|
tCarSetupItem heaveFastRebound[2], heaveSlowRebound[2], heaveReboundLvel[2];
|
|
tCarSetupItem suspSpring[4], suspBellcrank[4], suspInertance[4];
|
|
tCarSetupItem suspCourse[4], suspPacker[4];
|
|
tCarSetupItem suspFastBump[4], suspSlowBump[4], suspBumpLvel[4];
|
|
tCarSetupItem suspFastRebound[4], suspSlowRebound[4], suspReboundLvel[4];
|
|
tCarSetupItem reqRepair, reqTireset, reqTirecompound, reqPenalty; //used for pit stop repair, tire set and stop & go request
|
|
} tCarSetup;
|
|
|
|
/** Command issued by the car during pit stop */
|
|
typedef struct CarPitCmd
|
|
{
|
|
tdble fuel;
|
|
int repair;
|
|
#define RM_PIT_REPAIR 0
|
|
#define RM_PIT_STOPANDGO 1
|
|
int stopType;
|
|
bool setupChanged; /* TRUE if setup has changed during the pit stop */
|
|
|
|
enum TireChange { NONE = 0, ALL = 1};
|
|
TireChange tireChange;
|
|
enum TireSetChange { NON_CHANGE = 0, SOFT = 1, MEDIUM = 2, HARD = 3, WET = 4, EXTREM_WET = 5};
|
|
TireSetChange tiresetChange;
|
|
} tCarPitCmd;
|
|
/* structure access */
|
|
#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 */
|
|
tCarSetup setup; /**< 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_FRNTWINGSHORT "Front Wing Short"
|
|
#define SECT_FRNTWINGLONG "Front Wing Long"
|
|
#define SECT_FRNTWINGROAD "Front Wing Road"
|
|
#define SECT_FRNTAXLE "Front Axle"
|
|
#define SECT_FRNTARB "Front Anti-Roll Bar"
|
|
#define SECT_FRNTHEAVE "Front Heave Spring"
|
|
#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_REARWINGSHORT "Rear Wing Short"
|
|
#define SECT_REARWINGLONG "Rear Wing Long"
|
|
#define SECT_REARWINGROAD "Rear Wing Road"
|
|
#define SECT_REARAXLE "Rear Axle"
|
|
#define SECT_REARARB "Rear Anti-Roll Bar"
|
|
#define SECT_REARHEAVE "Rear Heave Spring"
|
|
#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"
|
|
#define SECT_TIRESET "Tires Set"
|
|
#define SECT_COMPOUNDS "Compounds"
|
|
#define SECT_FEATURES "Features"
|
|
|
|
/* Parameter 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_ROLLROTINERTIA "roll rotational inertia"
|
|
#define PRM_PITCHROTINERTIA "pitch rotational inertia"
|
|
#define PRM_YAWROTINERTIA "yaw rotational inertia"
|
|
#define PRM_INERTIA "inertia"
|
|
#define PRM_EFFICIENCY "efficiency"
|
|
#define PRM_TYPE "type"
|
|
#define PRM_SIZE "size"
|
|
#define PRM_COMPOUNDS_SET "compound set"
|
|
|
|
/* Tires */
|
|
#define PRM_MU "mu"
|
|
#define PRM_RIMDIAM "rim diameter"
|
|
#define PRM_TIREWIDTH "tire width"
|
|
#define PRM_TIREHEIGHT "tire height"
|
|
#define PRM_TIRERATIO "tire height-width ratio"
|
|
#define PRM_RIDEHEIGHT "ride height"
|
|
#define PRM_ROLLINGRESIST "rolling resistance"
|
|
#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_TREADTHICKNESS "tread thickness"
|
|
#define PRM_RIMMASS "rim mass"
|
|
#define PRM_HYSTERESIS "hysteresis"
|
|
#define PRM_TIRECOOLING "tire cooling factor"
|
|
#define PRM_LATMUHEATING "lateral mu heat factor"
|
|
#define PRM_LONGMUHEATING "longitudinal mu heat factor"
|
|
#define PRM_TIRESPDCOOLING "tire speed cooling factor"
|
|
#define PRM_ALIGNTQFACTOR "aligning torque factor"
|
|
#define PRM_OPTTEMP "optimal temperature"
|
|
#define PRM_INITTEMP "initial temperature"
|
|
#define PRM_WEAR "wear"
|
|
|
|
/* Compounds */
|
|
#define SECT_SOFT "soft"
|
|
#define SECT_MEDIUM "medium"
|
|
#define SECT_HARD "hard"
|
|
#define SECT_WET "wet"
|
|
#define SECT_EXTREM_WET "extrem wet"
|
|
|
|
#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_BUMPLVEL "bump limit velocity"
|
|
#define PRM_REBOUNDLVEL "rebound limit velocity"
|
|
|
|
#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_STEERROT "steering wheel rotation"
|
|
|
|
#define PRM_BRKDIAM "disk diameter"
|
|
#define PRM_BRKAREA "piston area"
|
|
#define PRM_BRKREP "front-rear brake repartition"
|
|
#define PRM_BRKPRESS "max pressure"
|
|
#define PRM_EBRKPRESS "emergency brake pressure"
|
|
#define PRM_BRKCOR_LR "brake corr lr"
|
|
#define PRM_BRKCOR_FR "brake corr fr"
|
|
|
|
#define PRM_CX "Cx"
|
|
#define PRM_CL "Clift"
|
|
#define PRM_CLBIAS "Clift bias"
|
|
#define PRM_FCL "front Clift"
|
|
#define PRM_RCL "rear Clift"
|
|
#define PRM_FRNTAREA "front area"
|
|
#define PRM_WINGAREA "area"
|
|
#define PRM_WINGANGLE "angle"
|
|
#define PRM_WINGANGLEVARIABLE "variable"
|
|
|
|
#define PRM_WINGTYPE "wing type"
|
|
#define PRM_AOAATMAX "aoa at max"
|
|
#define PRM_AOAATZERO "aoa at zero"
|
|
#define PRM_AOAOFFSET "aoa offset"
|
|
|
|
#define PRM_CLMAX "clift max"
|
|
#define PRM_CLATZERO "clift at zero"
|
|
#define PRM_CLASYMP "clift asymptotic"
|
|
#define PRM_DELAYDECREASE "clift delay"
|
|
#define PRM_CURVEDECREASE "clift curve"
|
|
|
|
#define PRM_ANGLEOFSTALL "angle of stall"
|
|
#define PRM_STALLWIDTH "stall width"
|
|
#define PRM_ASPECTRATIO "aspect ratio"
|
|
|
|
/* 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_ENGBRKLINCOEFF "brake linear coefficient"
|
|
#define PRM_ENGINEMAXTEMPWATER "max temperature water"
|
|
#define PRM_ENGINETEMPCOEFF "engine temperature 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_CAPACITY "capacity"
|
|
#define PRM_CYLINDERS "cylinders"
|
|
#define PRM_ENGSHAPE "shape"
|
|
#define PRM_ENGPOS "position"
|
|
|
|
#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_TEMPLATE "template"
|
|
#define PRM_ENV "env"
|
|
#define PRM_BONNET "bonnet"
|
|
#define PRM_WHEEL_TEXTURE "wheel texture"
|
|
#define PRM_SHADOW_TEXTURE "shadow texture"
|
|
|
|
#define SECT_STEERWHEEL "Steer Wheel"
|
|
#define PRM_SW_MODEL "model"
|
|
#define PRM_SW_MODELHR "hi res model"
|
|
#define PRM_SW_ANGLE "angle"
|
|
|
|
#define SECT_COMPOUND_MODEL "compound model"
|
|
#define PRM_SOFTMODEL "model soft"
|
|
#define PRM_MEDIUMMODEL "model medium"
|
|
#define PRM_HARDMODEL "model hard"
|
|
#define PRM_WETMODEL "model wet"
|
|
#define PRM_EXTWETMODEL "model extrem wet"
|
|
|
|
#define LST_DRIVER "Driver"
|
|
#define PRM_DRIVERSTEER "steer"
|
|
#define PRM_DRIVERMODEL "driver"
|
|
|
|
#define SECT_INSTRUMENTS "Instruments"
|
|
#define PRM_RPM_A_MODEL "rpm analogic model"
|
|
#define PRM_SPEED_A_MODEL "speed analogic model"
|
|
#define PRM_FUEL_A_MODEL "fuel analogic model"
|
|
#define PRM_ABS_A_MODEL "abs analogic model"
|
|
#define PRM_TCL_A_MODEL "tcl analogic model"
|
|
#define PRM_WATER_A_MODEL "water analogique model"
|
|
#define PRM_OIL_A_MODEL "oil analogic model"
|
|
|
|
#define LST_RPM_LED "rpm led"
|
|
#define PRM_RPM_LED_OFF "rpm led model off"
|
|
#define PRM_RPM_LED_ON "rpm led model on"
|
|
|
|
#define LST_DIGIT_GEAR "digit gear"
|
|
#define PRM_GEAR_MODEL "gear model"
|
|
|
|
#define PRM_SPEED_D_MODEL "speed digital model"
|
|
#define PRM_SPD_D_MODEL "spd digital model"
|
|
#define PRM_FUEL_D_MODEL "fuel digital model"
|
|
#define PRM_ABS_D_MODEL "abs digital model"
|
|
#define PRM_TCL_D_MODEL "tcl digital model"
|
|
#define PRM_WATER_D_MODEL "water digital model"
|
|
#define PRM_OIL_D_MODEL "oil digital model"
|
|
|
|
#define LST_REARWING "RearWing"
|
|
#define PRM_REARWINGANGLE "angle"
|
|
#define PRM_REARWINGMODEL "rearwing"
|
|
|
|
#define SECT_COCKPIT "cockpit"
|
|
#define PRM_MODELCOCKPIT "model cockpit"
|
|
|
|
#define SECT_SEPARATE_MODEL "separate model"
|
|
#define PRM_METAL_BODY "metal model"
|
|
#define PRM_CARBON_BODY "carbon model"
|
|
#define PRM_MIRROR "mirror model"
|
|
|
|
#define SECT_WING_MODEL "wing model"
|
|
#define PRM_WING_1 "model short oval"
|
|
#define PRM_WING_2 "model long oval"
|
|
#define PRM_WING_3 "model road"
|
|
|
|
#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_COAST_MAX_SLIP_BIAS "coast max slip bias"
|
|
#define PRM_LOCKING_TQ "locking 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_LOCKING "LOCKING"
|
|
#define VAL_DIFF_VISCOUS_COUPLER "VISCOUS COUPLER"
|
|
#define VAL_DIFF_15WAY_LSD "1.5 WAY LSD"
|
|
#define VAL_DIFF_ELECTRONIC_LSD "ELECTRONIC LSD"
|
|
|
|
typedef enum
|
|
{
|
|
TRANS_RWD,
|
|
TRANS_FWD,
|
|
TRANS_4WD,
|
|
} tDriveType;
|
|
|
|
#define VAL_TRANS_RWD "RWD"
|
|
#define VAL_TRANS_FWD "FWD"
|
|
#define VAL_TRANS_4WD "4WD"
|
|
|
|
typedef enum
|
|
{
|
|
ENGSHAPE_V,
|
|
ENGSHAPE_L,
|
|
ENGSHAPE_H,
|
|
ENGSHAPE_W
|
|
|
|
} tEngineShape;
|
|
|
|
#define VAL_ENGSHAPE_V "v"
|
|
#define VAL_ENGSHAPE_L "l"
|
|
#define VAL_ENGSHAPE_H "h"
|
|
#define VAL_ENGSHAPE_W "w"
|
|
|
|
typedef enum
|
|
{
|
|
ENGPOS_FRONT,
|
|
ENGPOS_FRONTMID,
|
|
ENGPOS_MID,
|
|
ENGPOS_REARMID,
|
|
ENGPOS_REAR,
|
|
} tEnginePosition;
|
|
|
|
#define VAL_ENGPOS_FRONT "front"
|
|
#define VAL_ENGPOS_FRONTMID "front-mid"
|
|
#define VAL_ENGPOS_MID "mid"
|
|
#define VAL_ENGPOS_REARMID "rear-mid"
|
|
#define VAL_ENGPOS_REAR "rear"
|
|
|
|
/* 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_NEEDLE_RED "needle red"
|
|
#define PRM_NEEDLE_GREEN "needle green"
|
|
#define PRM_NEEDLE_BLUE "needle blue"
|
|
#define PRM_NEEDLE_ALPHA "needle alpha"
|
|
|
|
#define PRM_WHEEL_3D "3d wheel"
|
|
#define PRM_FRONT_WHEEL_3D "3d front wheel"
|
|
#define PRM_REAR_WHEEL_3D "3d rear wheel"
|
|
|
|
#define PRM_WHEELSOFT_3D "3d wheel soft"
|
|
#define PRM_WHEELMEDIUM_3D "3d wheel medium"
|
|
#define PRM_WHEELHARD_3D "3d wheel hard"
|
|
#define PRM_WHEELWET_3D "3d wheel wet"
|
|
#define PRM_WHEELEXTWET_3D "3d wheel extrem wet"
|
|
|
|
/* 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_DAMAGE_ENGINE "damage/engine"
|
|
#define PRM_MODEL_AEROFLOW "model/aero/flow"
|
|
#define PRM_MODEL_AERO_FACTOR "model/aero/factor"
|
|
#define PRM_MODEL_TYRE_TEMPERATURE "model/tyres/temperature"
|
|
#define PRM_MODEL_TYRE_COMPOUNDS "model/tyres/compounds"
|
|
#define PRM_MODEL_ENGINE_TEMPERATURE "model/engine/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
|
|
|
|
/* features */
|
|
#define PRM_AEROTOCG "shifting aero coordinates"
|
|
#define PRM_SLOWGRIP "fixed low speed grip"
|
|
#define PRM_REALGEARCHANGE "realistic gear change"
|
|
#define PRM_REVLIMIT "realistic rev limiter"
|
|
#define PRM_TIRETEMPDEG "tire temperature and degradation"
|
|
#define PRM_TIRECOMPOUNDS "tire compounds"
|
|
#define PRM_FIXEDWHEELFORCE "fixed wheel force"
|
|
#define PRM_TCLINSIMU "enable tcl"
|
|
#define PRM_ABSINSIMU "enable abs"
|
|
#define PRM_ESPINSIMU "enable esp"
|
|
#define PRM_LIMITEDGROUNDEFFECT "enable cliftlimit"
|
|
#define PRM_TCLBRAKESCALE "tcl brake scale"
|
|
#define PRM_TCLACCELSCALE "tcl accel scale"
|
|
#define PRM_TCLSLIPSCALE "tcl slip scale"
|
|
#define PRM_ABSBRAKESCALE "abs brake scale"
|
|
#define PRM_ABSSLIPSCALE "abs slip scale"
|
|
#define VAL_YES "yes"
|
|
#define VAL_NO "no"
|
|
#define FEAT_AEROTOCG 0x01 //shift aero coordinates with the CG
|
|
#define FEAT_SLOWGRIP 0x02 //fix magic formula divergence at low speeds
|
|
#define FEAT_REALGEARCHANGE 0x04 //neutral between old and new gears without autoclutch
|
|
#define FEAT_REVLIMIT 0x08 //rev drop when hitting the limit
|
|
#define FEAT_TIRETEMPDEG 0x10 //tire temperature and degradation
|
|
#define FEAT_FIXEDWHEELFORCE 0x20 //fixed wheel force in SimWheelUpdateForce
|
|
#define FEAT_TCLINSIMU 0x40 //TCL simulation with 500 Hz at single wheels and engine
|
|
#define FEAT_ABSINSIMU 0x80 //ABS simulation with 500 Hz at single wheels
|
|
#define FEAT_ESPINSIMU 0x100 //ESP simulation with 500 Hz at single wheels
|
|
#define FEAT_LIMITEDGROUNDEFFECT 0x200 //Limit for Clift is enabled
|
|
#define FEAT_COMPOUNDS 0x400 //Tire compounds
|
|
|
|
#endif /* __CARV1_H__ */
|