37#include <tmath/linalg_t.h>
43#define TRK_SECT_HDR "Header"
45#define TRK_ATT_WIDTH "width"
46#define TRK_ATT_SURF "surface"
47#define TRK_ATT_NAME "name"
48#define TRK_ATT_VERSION "version"
49#define TRK_ATT_AUTHOR "author"
50#define TRK_ATT_DESCR "description"
51#define TRK_ATT_CAT "category"
53#define TRK_SECT_GEOREFERENCE "Georeference"
54#define TRK_ATT_GEO_LATITUDE "latitude"
55#define TRK_ATT_GEO_LONGITUDE "longitude"
56#define TRK_ATT_GEO_ALTITUDE "altitude"
57#define TRK_ATT_GEO_HEADING "heading"
59#define TRK_SECT_GRAPH "Graphic"
61#define TRK_ATT_3DDESC "3d description"
62#define TRK_ATT_BKGRND "background image"
63#define TRK_ATT_BKGRND2 "background image2"
64#define TRK_ATT_BGTYPE "background type"
65#define TRK_ATT_BGCLR_R "background color R"
66#define TRK_ATT_BGCLR_G "background color G"
67#define TRK_ATT_BGCLR_B "background color B"
68#define TRK_LST_ENV "Environment Mapping"
69#define TRK_ATT_ENVNAME "env map image"
70#define TRK_ATT_SPEC_R "specular color R"
71#define TRK_ATT_SPEC_G "specular color G"
72#define TRK_ATT_SPEC_B "specular color B"
73#define TRK_ATT_AMBIENT_R "ambient color R"
74#define TRK_ATT_AMBIENT_G "ambient color G"
75#define TRK_ATT_AMBIENT_B "ambient color B"
76#define TRK_ATT_DIFFUSE_R "diffuse color R"
77#define TRK_ATT_DIFFUSE_G "diffuse color G"
78#define TRK_ATT_DIFFUSE_B "diffuse color B"
79#define TRK_ATT_SHIN "shininess"
80#define TRK_ATT_LIPOS_X "light position x"
81#define TRK_ATT_LIPOS_Y "light position y"
82#define TRK_ATT_LIPOS_Z "light position z"
83#define TRK_ATT_FOVFACT "fov factor"
85#define TRK_SECT_TURNMARKS "Graphic/Turn Marks"
86#define TRK_ATT_HSPACE "horizontal space"
87#define TRK_ATT_VSPACE "vertical space"
89#define TRK_SECT_TERRAIN "Graphic/Terrain Generation"
91#define TRK_ATT_TSTEP "track step"
92#define TRK_ATT_BMARGIN "border margin"
93#define TRK_ATT_BSTEP "border step"
94#define TRK_ATT_TTRANSITION "terrain transition"
95#define TRK_ATT_CROSSING_BRIDGE_SOCKET_GAP "crossing bridge socket gap"
96#define TRK_ATT_CROSSING_BRIDGE_THICKNESS "crossing bridge thickness"
97#define TRK_ATT_CROSSING_UNDERSIDE_SURFACE "crossing bridge underside surface"
98#define TRK_ATT_CROSSING_SIDE_SURFACE "crossing bridge side surface"
99#define TRK_ATT_CROSSING_SOCKET_SURFACE "crossing bridge socket surface"
100#define TRK_ATT_CROSSING_FLOOR_SURFACE "crossing bridge floor surface"
101#define TRK_ATT_ORIENT "orientation"
102#define TRK_VAL_CLOCK "clockwise"
103#define TRK_VAL_CCLOCK "counter-clockwise"
104#define TRK_ATT_SURFRAND "texture randomness"
105#define TRK_ATT_RELIEF "relief file"
106#define TRK_ATT_ELEVATION "elevation map"
107#define TRK_ATT_ALT_MAX "maximum altitude"
108#define TRK_ATT_ALT_MIN "minimum altitude"
109#define TRK_ATT_GRPSZ "group size"
110#define TRK_ATT_OBJMAP "object map"
111#define TRK_ATT_COLOR "color"
112#define TRK_ATT_OBJECT "object"
113#define TRK_ATT_SEED "random seed"
114#define TRK_ATT_ORIENTATION_TYPE "orientation type"
115#define TRK_ATT_ORIENTATION "orientation"
116#define TRK_ATT_DH "delta height"
117#define TRK_ATT_DV "delta vert"
118#define TRK_SECT_OBJMAP "Object Maps"
119#define TRK_SECT_SURFACES "Surfaces"
120#define TRK_SECT_OBJECTS "Objects"
122#define TRK_ATT_FRICTION "friction"
123#define TRK_ATT_ROLLRES "rolling resistance"
124#define TRK_ATT_ROUGHT "roughness"
125#define TRK_ATT_ROUGHTWL "roughness wavelength"
126#define TRK_ATT_DAMMAGE "dammage"
127#define TRK_ATT_REBOUND "rebound"
128#define TRK_ATT_TEXTURE "texture name"
129#define TRK_ATT_BUMPNAME "bump name"
130#define TRK_ATT_RACELINENAME "raceline name"
131#define TRK_ATT_TEXTYPE "texture type"
132#define TRK_ATT_TEXLINK "texture link with previous"
133#define TRK_ATT_TEXSIZE "texture size"
134#define TRK_ATT_TEXSIZE_V "texture size v"
135#define TRK_ATT_BUMPSIZE "bump size"
136#define TRK_ATT_TEXSTARTBOUNDARY "texture start on boundary"
137#define TRK_ATT_TEXMIPMAP "texture mipmap"
138#define TRK_ATT_R1 "color R1"
139#define TRK_ATT_G1 "color G1"
140#define TRK_ATT_B1 "color B1"
141#define TRK_ATT_R2 "color R2"
142#define TRK_ATT_G2 "color G2"
143#define TRK_ATT_B2 "color B2"
145#define TRK_ATT_STEPLEN "steps length"
147#define TRK_VAL_YES "yes"
148#define TRK_VAL_NO "no"
150#define TRK_SECT_MAIN "Main Track"
151#define TRK_LST_SEGMENTS "Track Segments"
152#define TRK_ATT_TYPE "type"
153#define TRK_ATT_RLEXT "raceline ext"
154#define TRK_ATT_RLINT "raceline int"
155#define TRK_ATT_RLWIDTHSCALE "raceline widthscale"
157#define TRK_VAL_STR "str"
158#define TRK_VAL_LFT "lft"
159#define TRK_VAL_RGT "rgt"
161#define TRK_ATT_LG "lg"
162#define TRK_ATT_RADIUS "radius"
163#define TRK_ATT_RADIUSEND "end radius"
164#define TRK_ATT_ARC "arc"
165#define TRK_ATT_ZS "z start"
166#define TRK_ATT_ZE "z end"
167#define TRK_ATT_ZSL "z start left"
168#define TRK_ATT_ZSR "z start right"
169#define TRK_ATT_ZEL "z end left"
170#define TRK_ATT_ZER "z end right"
171#define TRK_ATT_GRADE "grade"
172#define TRK_ATT_BKS "banking start"
173#define TRK_ATT_BKE "banking end"
174#define TRK_ATT_ID "id"
175#define TRK_ATT_PROFIL "profil"
176#define TRK_ATT_PROFSTEPS "profil steps"
177#define TRK_ATT_PROFSTEPSLEN "profil steps length"
178#define TRK_ATT_PROFTGTS "profil start tangent"
179#define TRK_ATT_PROFTGTE "profil end tangent"
180#define TRK_ATT_PROFTGTSL "profil start tangent left"
181#define TRK_ATT_PROFTGTEL "profil end tangent left"
182#define TRK_ATT_PROFTGTSR "profil start tangent right"
183#define TRK_ATT_PROFTGTER "profil end tangent right"
184#define TRK_ATT_MARKS "marks"
185#define TRK_ATT_ENVMAP "env map"
187#define TRK_SECT_PITS "Pits"
189#define TRK_ATT_ENTRY "entry"
190#define TRK_ATT_EXIT "exit"
191#define TRK_ATT_START "start"
192#define TRK_ATT_END "end"
193#define TRK_ATT_SIDE "side"
194#define TRK_ATT_LEN "length"
195#define TRK_ATT_SPD_LIM "speed limit"
197#define TRK_SECT_LSIDE "Left Side"
198#define TRK_SECT_RSIDE "Right Side"
199#define TRK_SECT_LBORDER "Left Border"
200#define TRK_SECT_RBORDER "Right Border"
201#define TRK_SECT_LBARRIER "Left Barrier"
202#define TRK_SECT_RBARRIER "Right Barrier"
204#define TRK_ATT_SWIDTH "start width"
205#define TRK_ATT_EWIDTH "end width"
206#define TRK_ATT_STYLE "style"
207#define TRK_ATT_HEIGHT "height"
208#define TRK_ATT_BANKTYPE "banking type"
210#define TRK_VAL_PLAN "plan"
211#define TRK_VAL_WALL "wall"
212#define TRK_VAL_CURB "curb"
213#define TRK_VAL_FENCE "fence"
216#define TRK_SECT_CAM "Cameras"
218#define TRK_ATT_SEGMENT "segment"
219#define TRK_ATT_TORIGHT "to right"
220#define TRK_ATT_TOSTART "to start"
221#define TRK_ATT_HEIGHT "height"
222#define TRK_ATT_CAM_FOV "fov start"
223#define TRK_ATT_CAM_FOVE "fov end"
225#define TRK_VAL_ASPHALT "asphalt"
226#define TRK_VAL_CONCRETE "concrete"
227#define TRK_VAL_BRIDGE_UNDERSIDE "bridge-underside"
228#define TRK_VAL_BRIDGE_SIDE "bridge-side"
229#define TRK_VAL_BRIDGE_SOCKET "bridge-socket"
230#define TRK_VAL_BRIDGE_FLOOR "bridge-floor"
231#define TRK_VAL_GRASS "grass"
232#define TRK_VAL_SAND "sand"
233#define TRK_VAL_DIRT "dirt"
234#define TRK_VAL_BARRIER "barrier"
236#define TRK_VAL_LINEAR "linear"
237#define TRK_VAL_SPLINE "spline"
239#define TRK_VAL_TANGENT "tangent"
240#define TRK_VAL_LEVEL "level"
330#define TR_PITBUILDING 4
393#define TR_NORMAL 0x00000000
394#define TR_LAST 0x00000001
395#define TR_START 0x00000002
396#define TR_PITLANE 0x00000004
397#define TR_SPEEDLIMIT 0x00000008
398#define TR_PITENTRY 0x00000010
399#define TR_PITEXIT 0x00000020
400#define TR_PIT 0x00000040
401#define TR_PITSTART 0x00000080
402#define TR_PITEND 0x00000100
442#define TR_LPOS_MAIN 0
443#define TR_LPOS_SEGMENT 1
444#define TR_LPOS_TRACK 2
459#define TR_PIT_STATE_FREE -1
460#define TR_PIT_MAXCARPERPIT 4
475#define TR_PIT_ON_TRACK_SIDE 1
476#define TR_PIT_ON_SEPARATE_PATH 2
561typedef tTrack*(*tfTrackBuild)(
char* filename);
649#define TRK_LST_SURF "List"
650#define TRK_LST_CAM "list"
651#define TRK_ATT_PIT_ENTRY "pit entry"
652#define TRK_ATT_PIT_EXIT "pit exit"
653#define TRK_ATT_PIT_START "pit start"
654#define TRK_ATT_PIT_END "pit end"
655#define TRK_ATT_PIT_TYPE "pit type"
656#define TRK_ATT_PIT_SIDE "pit side"
657#define TRK_ATT_PIT_LEN "pit length"
658#define TRK_ATT_PIT_WIDTH "pit width"
660#define TRK_LST_SEG "segments"
661#define TRK_ATT_ENVIND "env map index"
664#define TRK_ATT_LST "lside type"
665#define TRK_ATT_LSW "lside width"
666#define TRK_ATT_LSWS "lside start width"
667#define TRK_ATT_LSWE "lside end width"
668#define TRK_ATT_LSSURF "lside surface"
669#define TRK_ATT_RST "rside type"
670#define TRK_ATT_RSW "rside width"
671#define TRK_ATT_RSWS "rside start width"
672#define TRK_ATT_RSWE "rside end width"
673#define TRK_ATT_RSSURF "rside surface"
674#define TRK_ATT_LBS "lborder style"
675#define TRK_ATT_LBW "lborder width"
676#define TRK_ATT_LBH "lborder height"
677#define TRK_ATT_LBSURF "lborder surface"
678#define TRK_ATT_RBS "rborder style"
679#define TRK_ATT_RBW "rborder width"
680#define TRK_ATT_RBH "rborder height"
681#define TRK_ATT_RBSURF "rborder surface"
683#define TRK_ATT_BHEIGHT "border height"
685#define TRK_ATT_LBAS "lbarrier style"
686#define TRK_ATT_LBAW "lbarrier width"
687#define TRK_ATT_LBAH "lbarrier height"
688#define TRK_ATT_LBAFRCT "lbarrier friction"
689#define TRK_ATT_LBASURF "lbarrier surface"
690#define TRK_ATT_RBAS "rbarrier style"
691#define TRK_ATT_RBAW "rbarrier width"
692#define TRK_ATT_RBAH "rbarrier height"
693#define TRK_ATT_LBAFRCT "lbarrier friction"
694#define TRK_ATT_RBASURF "rbarrier surface"
696#define TRK_VAL_PIT_TYPE_NONE "no pit"
697#define TRK_VAL_PIT_TYPE_SIDE "track side"
698#define TRK_VAL_PIT_TYPE_SEP_PATH "seperate path"
700#define TRK_ATT_FINISH "finish segment"
float tdble
Floating point type used in TORCS.
void(* tfTrackShutdown)(void)
Release current track and all its resources.
tTrack *(* tfTrackBuild)(char *filename)
Read given track from filename into tTrack struct.
void(* tfTrackGlobal2Local)(tTrackSeg *seg, tdble X, tdble Y, tTrkLocPos *pos, int type)
Convert a global position (segment, X, Y) into a local position (segment, toRight,...
tdble(* tfTrackHeightL)(tTrkLocPos *pos)
Returns the absolute height in meters of the road at the local position.
void(* tfTrackSideNormal)(tTrackSeg *seg, tdble X, tdble Y, int side, t3Dd *norm)
Get the normal vector (in global coordinate system) of the border of the track including the sides.
tdble(* tfTrackHeightG)(tTrackSeg *seg, tdble X, tdble Y)
Returns the absolute height in meters of the road at the given global position.
void(* tfTrackLocal2Global)(tTrkLocPos *pos, tdble *X, tdble *Y)
Convert a local position (segment, toRight, toStart) into a global one (X, Y)
void(* tfTrackSurfaceNormal)(tTrkLocPos *pos, t3Dd *norm)
Get the normal vector of the road (pointing upward).
struct trackSeg tTrackSeg
Track segment (tTrackSeg) The segments can be straights (type TR_STR): (the track goes from the right...
tdble lmin
Pitting area length min.
int pitCarIndex
Index of the car in the car array below which occupies the pit.
tTrkLocPos pos
Center of the pit position.
struct CarElt * car[TR_PIT_MAXCARPERPIT]
Car links for pit.
tdble lmax
Pitting area length max.
Optional v4 geographic reference at the main road centre at the start of the first segment (seg->next...
tdble heading
Radians clockwise from true north, [0, 2*pi)
tdble altitude
Metres above mean sea level at reference road centre.
int hasLocation
Both latitude and longitude are available.
tdble longitude
Degrees east, [-180, 180].
tdble latitude
Degrees north, [-90, 90].
tTurnMarksInfo turnMarksInfo
const char * name
Name of the track.
tTrackGraphicInfo graphic
tTrackSeg * seg
Main track.
const char * author
Author's name.
tTrackSurface * surfaces
Segment surface list.
const char * category
Category of the track.
tdble width
main track width
tdble length
main track length
void * params
Parameters handle.
char * internalname
Internal name of the track.
int version
Version of the track type.
int nseg
Number of segments.
char * filename
Filename of the track description.
tTrackPitInfo pits
Pits information.
tTrackGeoreference georeference
Interface Structure for Track Loader.
tfTrackBuild trkBuild
build track structure for simu
tfTrackSurfaceNormal trkSurfaceNormal
tfTrackShutdown trkShutdown
tfTrackHeightL trkHeightL
tfTrackHeightG trkHeightG
tfTrackSideNormal trkSideNormal
tfTrackBuild trkBuildEx
build with graphic extensions (used by trackgen tool)
tfTrackGlobal2Local trkGlobal2Local
tfTrackLocal2Global trkLocal2Global
tTrackSeg * pitStart
Pit lane segment.
tTrackSeg * pitEntry
Pit lane segment.
int nPitSeg
actual number of pits
tTrackOwnPit * driversPits
List of pits by driver.
tTrackSeg * pitExit
Pit lane segment.
tdble len
Lenght of each pit stop.
tTrackSeg * pitEnd
Pit lane segment.
tdble speedLimit
Speed limit between pitStart and pitEnd.
int nMaxPits
number max of pits
tdble width
Width of each pit stop.
int driversPitsNb
Number of drivers.
Location on the track in local coordinates.
tdble toMiddle
Distance (+ to left, - to right) relative to the middle of segment.
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:
tdble toStart
Distance to start of segment (or arc if turn)
tdble width
Barrier width.
tdble height
Barrier height.
tTrackSurface * surface
Barrier surface.
Track segment (tTrackSeg) The segments can be straights (type TR_STR): (the track goes from the right...
int type
Geometrical type:
tTrackSurface * surface
Segment surface.
tdble height
Max height for curbs.
t3Dd vertex[4]
Coordinates of the 4 corners of the segment.
tdble radiusr
Radius in meters of the right side of the track (>0)
unsigned int raceInfo
Type of segment regarding the race: Mask value in:
tdble radius
Radius in meters of the middle of the track (>0)
tdble arc
Arc in rad of the curve (>0)
tdble lgfromstart
Length of beginning of segment from starting line.
t3Dd center
Center of the curve.
const char * name
Segment name.
tdble length
Length in meters of the middle of the track.
tdble radiusl
Radius in meters of the left side of the track (>0)
tTrackBarrier * barrier[2]
Segment barriers.
struct trackSeg * next
Next segment.
tdble startWidth
Width of the beginning of the segment.
struct trackSeg * prev
Previous segment.
int style
Border and barrier segments style:
struct trackSeg * side[2]
tdble width
Width of the segment (if constant width)
tdble endWidth
Width of the end of the segment.
tdble kRebound
Coefficient of energy restitution.
tdble kDammage
Dammages in case of collision.
tdble kFriction
Coefficient of friction.
tdble kRollRes
Rolling resistance.
const char * material
Type of material used.
struct trackSurface * next
Next surface in list.
tdble kRoughWaveLen
Wave length in m of the surface.
tdble kRoughness
Roughtness in m of the surface (wave height)
struct TrackOwnPit tTrackOwnPit
Driver's pit.
struct trackSurface tTrackSurface
Surface.
struct RoadCam tRoadCam
road camera
struct SegExt tSegExt
Extended track segment.
struct trackBarrier tTrackBarrier
Barrier.
#define TR_PIT_MAXCARPERPIT