31#include <robottools.h>
53#if defined WIN32 || defined sun
123 memset(car, 0,
sizeof(
tCar));
131 carElt->_pos_X_D = carElt->_pos_X;
132 carElt->_pos_Y_D = carElt->_pos_Y;
133 car->
trkPos = carElt->_trkPos;
135 car->
params = carElt->_carHandle;
140 sgMakeCoordMat4(carElt->
pub.
posMat, carElt->_pos_X, carElt->_pos_Y, carElt->_pos_Z - carElt->_statGC_z,
162 for (i = 0; i < 2; i++) {
167 for (i = 0; i < 4; i++) {
188 static tdble PULL_Z_OFFSET = 3.0;
189 static tdble PULL_SPD = 0.5;
198 sgMakeCoordMat4(carElt->
pub.
posMat, carElt->_pos_X, carElt->_pos_Y, carElt->_pos_Z - carElt->_statGC_z,
201 if (carElt->_pos_Z > (car->
restPos.
pos.
z + PULL_Z_OFFSET)) {
218 carElt->_pos_X = (
tdble)carElt->_pos_X_D;
219 carElt->_pos_Y = (
tdble)carElt->_pos_Y_D;
220 sgMakeCoordMat4(carElt->
pub.
posMat, carElt->_pos_X, carElt->_pos_Y, carElt->_pos_Z - carElt->_statGC_z,
223 if ((fabs(car->
restPos.
pos.
x - carElt->_pos_X_D) < 0.5) && (fabs(car->
restPos.
pos.
y - carElt->_pos_Y_D) < 0.5)) {
233 sgMakeCoordMat4(carElt->
pub.
posMat, carElt->_pos_X, carElt->_pos_Y, carElt->_pos_Z - carElt->_statGC_z,
249 if ((s->_maxDammage) && (car->
dammage > s->_maxDammage)) {
258 if ((s->_maxDammage) && (car->
dammage > s->_maxDammage)) {
268 if (fabs(carElt->_speed_x) > 1.0) {
279 for(i = 0; i < 4; i++) {
280 carElt->_skid[i] = 0;
281 carElt->_wheelSpinVel(i) = 0;
282 carElt->_brakeTemp(i) = 0;
286 carElt->_speed_x = 0;
336 for (ncar = 0; ncar < s->_ncars; ncar++) {
341 for (ncar = 0; ncar < s->_ncars; ncar++) {
348 }
else if (((s->_maxDammage) && (car->
dammage > s->_maxDammage)) ||
380 for (i = 0; i < 2; i++){
384 for (i = 0; i < 4; i++){
388 for (i = 0; i < 2; i++){
392 for (i = 0; i < 4; i++){
397 if (s->_raceState == 0) {
417 for (ncar = 0; ncar < s->_ncars; ncar++) {
439 sgMakeCoordMat4(carElt->
pub.
posMat, carElt->_pos_X, carElt->_pos_Y, carElt->_pos_Z - carElt->_statGC_z,
441 carElt->_trkPos = car->
trkPos;
443 for (i = 0; i < 4; i++) {
460 carElt->_fuel = car->
fuel;
463 carElt->_dammage = car->
dammage;
490 for (ncar = 0; ncar <
SimNbCars; ncar++) {
503 if (fabs(v->
max - v->
min) >= 0.0001f) {
void SimWingUpdate(tCar *car, int index, tSituation *s)
void SimAeroUpdate(tCar *car, tSituation *s)
void SimWingReConfig(tCar *car, int index)
void SimAtmosphereUpdate(tCar *car, tSituation *s)
void SimAxleUpdate(tCar *car, int index)
void SimAxleReConfig(tCar *car, int index)
void SimBrakeSystemUpdate(tCar *car)
void SimBrakeSystemReConfig(tCar *car)
void SimCarUpdateWheelPos(tCar *car)
void SimCarConfig(tCar *car)
void SimCarUpdate2(tCar *car, tSituation *)
void SimCarUpdate(tCar *car, tSituation *)
#define RM_CAR_STATE_OUTOFGAS
Out of Gas.
#define RM_CAR_STATE_PIT
Car currently stopped in pits.
#define RM_CAR_STATE_NO_SIMU
Do not simulate the car.
#define RM_CAR_STATE_PULLSIDE
Car pulled out in the air.
#define RM_CAR_STATE_DNF
Car did not finish.
struct CarElt tCarElt
Car structure (tCarElt).
#define RM_CAR_STATE_PULLUP
Car pulled out in the air.
#define RM_CAR_STATE_FINISH
Car having passed the finish line.
#define RM_CAR_STATE_OUT
Car out of race.
#define RM_CAR_STATE_BROKEN
Engine no more working.
#define RM_CAR_STATE_PULLDN
Car pulled out in the air.
#define RM_CAR_STATE_ELIMINATED
Eliminated due to rules infringement.
void SimCarCollideConfig(tCar *car, tTrack *track)
void SimCarCollideInit(tTrack *track)
void SimCarCollideShutdown(int nbcars)
void SimCarCollideCars(tSituation *s)
void SimCollideRemoveCar(tCar *car, int nbcars)
void SimEngineShutdown(tCar *car)
void SimEngineUpdateTq(tCar *car)
tdble SimEngineUpdateRpm(tCar *car, tdble axleRpm)
float tdble
Floating point type used in TORCS.
struct Situation tSituation
cars situation used to inform the GUI and the drivers
void SimGearboxUpdate(tCar *car)
void SimSteerUpdate(tCar *car)
void SimWheelUpdateRide(tCar *car, int index)
void SimWheelResetWear(tCar *car, int index)
void SimWheelUpdateForce(tCar *car, int index)
void SimWheelReConfig(tCar *car, int index)
void SimWheelUpdateRotation(tCar *car)
void SimTransmissionReConfig(tCar *car)
void SimTransmissionUpdate(tCar *car)
void SimWheelUpdateTire(tCar *car, int index)
void SimSteerReConfig(tCar *car)
static void RemoveCar(tCar *car, tSituation *s)
void SimReConfig(tCarElt *carElt)
void SimConfig(tCarElt *carElt, RmInfo *info)
void SimUpdate(tSituation *s, double deltaTime, int telemetry)
void SimInit(int nbcars, tTrack *track, tdble fuelFactor, tdble damageFactor, tdble tireFactor)
static void ctrlCheck(tCar *car)
bool SimAdjustPitCarSetupParam(tCarPitSetupValue *v)
Race Manager General Info.
tTrack * track
Current track.
int gear
[-1,6] for gear selection
tdble steer
Steer command [-1.0, 1.0].
int brakeRepartitionCmd
Brake balance "clicks", positive is to the front.
tdble clutchCmd
Clutch command [0.0, 1.0].
tdble accelCmd
Accelerator command [0.0, 1.0].
tdble brakeCmd
Brake command [0.0, 1.0].
tTransmission transmission
tdble ay
angle along y axis
tdble ax
angle along x axis
tdble az
angle along z axis
int collision
Collision value for graphics and sound, clearing is managed by consumers.
int simcollision
For rules etc.
tDynPt DynGCg
GC data (world axis)
tDynPt DynGC
GC data (car axis)
sgMat4 posMat
position matrix
Location on the track in local coordinates.
tdble toLeft
Distance (- to left, + to right) relative to left side of segment.
tdble toRight
Distance (+ to left, - to right) relative to the right side of segment.
tTrackSeg * seg
Track segment.
int type
Type of description:
Dynamic wheel information.
tdble brakeTemp
brake temperature from 0 (cool) to 1.0 (hot)
tTrackSeg * seg
Track segment where the wheel is.
tPosd relPos
position relative to GC
tdble width
Width of the segment (if constant width)
int telemetry(tModInfo *modInfo)
#define NORM_PI_PI(x)
Angle normalization between -PI and PI.
#define DIST(x1, y1, x2, y2)
Distance between two points.
#define RAD2DEG(x)
Radian to degree conversion.
#define TR_PIT_STATE_FREE
#define TR_LPOS_SEGMENT
Relative to the segment which the point is located, including border and sides, mostly used for conta...
int track(tModInfo *modInfo)