/***************************************************************************
file : track.h
created : Sun Jan 30 23:00:06 CET 2000
copyright : (C) 2000-2014 by Eric Espie, Bernhard Wymann
email : torcs@free.fr
version : $Id: track.h,v 1.22.2.5 2014/05/19 15:43:36 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
Track Structure and Track Loader Module Definition.
@author Bernhard Wymann, Eric Espie
@version $Id: track.h,v 1.22.2.5 2014/05/19 15:43:36 berniw Exp $
@ingroup trackstruct
@ingroup trackmodint
*/
/**
@defgroup trackmodint Track Loader Module Interface
@brief Interface for track loader modules, the track loader module is discovered and loaded during runtime.
@ingroup modint
*/
#ifndef _TRACKV1_H_
#define _TRACKV1_H_
#include
#include
#define TRK_IDENT 0 /* from 0x01 to 0xFF */
/* Parameters strings for track files */
#define TRK_SECT_HDR "Header"
#define TRK_ATT_WIDTH "width"
#define TRK_ATT_SURF "surface"
#define TRK_ATT_NAME "name"
#define TRK_ATT_VERSION "version"
#define TRK_ATT_AUTHOR "author"
#define TRK_ATT_DESCR "description"
#define TRK_ATT_CAT "category"
#define TRK_SECT_GRAPH "Graphic"
#define TRK_ATT_3DDESC "3d description"
#define TRK_ATT_BKGRND "background image"
#define TRK_ATT_BKGRND2 "background image2"
#define TRK_ATT_BGTYPE "background type"
#define TRK_ATT_BGCLR_R "background color R"
#define TRK_ATT_BGCLR_G "background color G"
#define TRK_ATT_BGCLR_B "background color B"
#define TRK_LST_ENV "Environment Mapping"
#define TRK_ATT_ENVNAME "env map image"
#define TRK_ATT_SPEC_R "specular color R"
#define TRK_ATT_SPEC_G "specular color G"
#define TRK_ATT_SPEC_B "specular color B"
#define TRK_ATT_AMBIENT_R "ambient color R"
#define TRK_ATT_AMBIENT_G "ambient color G"
#define TRK_ATT_AMBIENT_B "ambient color B"
#define TRK_ATT_DIFFUSE_R "diffuse color R"
#define TRK_ATT_DIFFUSE_G "diffuse color G"
#define TRK_ATT_DIFFUSE_B "diffuse color B"
#define TRK_ATT_SHIN "shininess"
#define TRK_ATT_LIPOS_X "light position x"
#define TRK_ATT_LIPOS_Y "light position y"
#define TRK_ATT_LIPOS_Z "light position z"
#define TRK_ATT_FOVFACT "fov factor"
#define TRK_SECT_TURNMARKS "Graphic/Turn Marks"
#define TRK_ATT_HSPACE "horizontal space"
#define TRK_ATT_VSPACE "vertical space"
#define TRK_SECT_TERRAIN "Graphic/Terrain Generation"
#define TRK_ATT_TSTEP "track step"
#define TRK_ATT_BMARGIN "border margin"
#define TRK_ATT_BSTEP "border step"
#define TRK_ATT_ORIENT "orientation"
#define TRK_VAL_CLOCK "clockwise"
#define TRK_VAL_CCLOCK "counter-clockwise"
#define TRK_ATT_SURFRAND "texture randomness"
#define TRK_ATT_RELIEF "relief file"
#define TRK_ATT_ELEVATION "elevation map"
#define TRK_ATT_ALT_MAX "maximum altitude"
#define TRK_ATT_ALT_MIN "minimum altitude"
#define TRK_ATT_GRPSZ "group size"
#define TRK_ATT_OBJMAP "object map"
#define TRK_ATT_COLOR "color"
#define TRK_ATT_OBJECT "object"
#define TRK_ATT_SEED "random seed"
#define TRK_ATT_ORIENTATION_TYPE "orientation type"
#define TRK_ATT_ORIENTATION "orientation"
#define TRK_ATT_DH "delta height"
#define TRK_ATT_DV "delta vert"
#define TRK_SECT_OBJMAP "Object Maps"
#define TRK_SECT_SURFACES "Surfaces"
#define TRK_SECT_OBJECTS "Objects"
#define TRK_ATT_FRICTION "friction"
#define TRK_ATT_ROLLRES "rolling resistance"
#define TRK_ATT_ROUGHT "roughness"
#define TRK_ATT_ROUGHTWL "roughness wavelength"
#define TRK_ATT_DAMMAGE "dammage"
#define TRK_ATT_REBOUND "rebound"
#define TRK_ATT_TEXTURE "texture name"
#define TRK_ATT_BUMPNAME "bump name"
#define TRK_ATT_RACELINENAME "raceline name"
#define TRK_ATT_TEXTYPE "texture type"
#define TRK_ATT_TEXLINK "texture link with previous"
#define TRK_ATT_TEXSIZE "texture size"
#define TRK_ATT_BUMPSIZE "bump size"
#define TRK_ATT_TEXSTARTBOUNDARY "texture start on boundary"
#define TRK_ATT_TEXMIPMAP "texture mipmap"
#define TRK_ATT_R1 "color R1"
#define TRK_ATT_G1 "color G1"
#define TRK_ATT_B1 "color B1"
#define TRK_ATT_R2 "color R2"
#define TRK_ATT_G2 "color G2"
#define TRK_ATT_B2 "color B2"
#define TRK_ATT_STEPLEN "steps length"
#define TRK_VAL_YES "yes"
#define TRK_VAL_NO "no"
#define TRK_SECT_MAIN "Main Track"
#define TRK_LST_SEGMENTS "Track Segments"
#define TRK_ATT_TYPE "type"
#define TRK_ATT_RLEXT "raceline ext"
#define TRK_ATT_RLINT "raceline int"
#define TRK_ATT_RLWIDTHSCALE "raceline widthscale"
#define TRK_VAL_STR "str"
#define TRK_VAL_LFT "lft"
#define TRK_VAL_RGT "rgt"
#define TRK_ATT_LG "lg"
#define TRK_ATT_RADIUS "radius"
#define TRK_ATT_RADIUSEND "end radius"
#define TRK_ATT_ARC "arc"
#define TRK_ATT_ZS "z start"
#define TRK_ATT_ZE "z end"
#define TRK_ATT_ZSL "z start left"
#define TRK_ATT_ZSR "z start right"
#define TRK_ATT_ZEL "z end left"
#define TRK_ATT_ZER "z end right"
#define TRK_ATT_GRADE "grade"
#define TRK_ATT_BKS "banking start"
#define TRK_ATT_BKE "banking end"
#define TRK_ATT_ID "id"
#define TRK_ATT_PROFIL "profil"
#define TRK_ATT_PROFSTEPS "profil steps"
#define TRK_ATT_PROFSTEPSLEN "profil steps length"
#define TRK_ATT_PROFTGTS "profil start tangent"
#define TRK_ATT_PROFTGTE "profil end tangent"
#define TRK_ATT_PROFTGTSL "profil start tangent left"
#define TRK_ATT_PROFTGTEL "profil end tangent left"
#define TRK_ATT_PROFTGTSR "profil start tangent right"
#define TRK_ATT_PROFTGTER "profil end tangent right"
#define TRK_ATT_MARKS "marks"
#define TRK_ATT_ENVMAP "env map"
#define TRK_ATT_DOVFACTOR "DoV factor"
#define TRK_SECT_PITS "Pits"
#define TRK_ATT_ENTRY "entry"
#define TRK_ATT_EXIT "exit"
#define TRK_ATT_START "start"
#define TRK_ATT_END "end"
#define TRK_ATT_SIDE "side"
#define TRK_ATT_LEN "length"
#define TRK_ATT_SPD_LIM "speed limit"
#define TRK_SECT_LSIDE "Left Side"
#define TRK_SECT_RSIDE "Right Side"
#define TRK_SECT_LBORDER "Left Border"
#define TRK_SECT_RBORDER "Right Border"
#define TRK_SECT_LBARRIER "Left Barrier"
#define TRK_SECT_RBARRIER "Right Barrier"
#define TRK_ATT_SWIDTH "start width"
#define TRK_ATT_EWIDTH "end width"
#define TRK_ATT_STYLE "style"
#define TRK_ATT_HEIGHT "height"
#define TRK_ATT_BANKTYPE "banking type"
#define TRK_VAL_PLAN "plan"
#define TRK_VAL_WALL "wall"
#define TRK_VAL_CURB "curb"
#define TRK_VAL_FENCE "fence"
#define TRK_SECT_CAM "Cameras"
#define TRK_ATT_SEGMENT "segment"
#define TRK_ATT_TORIGHT "to right"
#define TRK_ATT_TOSTART "to start"
#define TRK_ATT_HEIGHT "height"
#define TRK_ATT_CAM_FOV "fov start"
#define TRK_ATT_CAM_FOVE "fov end"
#define TRK_VAL_ASPHALT "asphalt"
#define TRK_VAL_CONCRETE "concrete"
#define TRK_VAL_GRASS "grass"
#define TRK_VAL_SAND "sand"
#define TRK_VAL_DIRT "dirt"
#define TRK_VAL_BARRIER "barrier"
#define TRK_VAL_LINEAR "linear"
#define TRK_VAL_SPLINE "spline"
#define TRK_VAL_TANGENT "tangent"
#define TRK_VAL_LEVEL "level"
/** road camera */
typedef struct RoadCam
{
char *name;
t3Dd pos;
struct RoadCam *next;
} tRoadCam;
/** Extended track segment */
typedef struct SegExt
{
int nbMarks; /**< turn marks */
int *marks; /**< marks array */
} tSegExt;
/** Surface */
typedef struct trackSurface {
struct trackSurface *next; /**< Next surface in list */
const char *material; /**< Type of material used */
tdble kFriction; /**< Coefficient of friction */
tdble kRebound; /**< Coefficient of energy restitution */
tdble kRollRes; /**< Rolling resistance */
tdble kRoughness; /**< Roughtness in m of the surface (wave height) */
tdble kRoughWaveLen; /**< Wave length in m of the surface */
tdble kDammage; /**< Dammages in case of collision */
} tTrackSurface;
/** Barrier */
typedef struct trackBarrier {
int style; /**< Barrier style */
tdble width; /**< Barrier width */
tdble height; /**< Barrier height */
tTrackSurface *surface; /**< Barrier surface */
vec2f normal; // Normal on the vertical track inside pointing towards the track middle.
} tTrackBarrier;
/** Track segment (tTrackSeg)
The segments can be straights (type TR_STR): (the track goes from the right to the left)
@image html straight-desc.png
Or can be turn segments (type TR_RGT or TR_LFT): (the track goes from the left to the right)
@image html turn-1-desc.png
The reference angle is the orientation of the first segment of the track.
@ingroup trackstruct
*/
typedef struct trackSeg {
const char *name; /**< Segment name */
int id; /**< Segment number */
int type; /**< Geometrical type:
- TR_RGT
- TR_LFT
- TR_STR
*/
#define TR_RGT 1 /**< Right curve */
#define TR_LFT 2 /**< Left curve */
#define TR_STR 3 /**< Straight */
int type2; /**< Position type:
- TR_MAIN
- TR_LSIDE
- TR_RSIDE
- TR_LBORDER
- TR_RBORDER
*/
#define TR_MAIN 1 /**< Main track segment (ie road part) */
#define TR_LSIDE 2 /**< Left side segment (outer segment) */
#define TR_RSIDE 3 /**< Right side segment (outer segment) */
#define TR_LBORDER 4 /**< Left border segment (inner segment) */
#define TR_RBORDER 5 /**< Right border segment (inner segment) */
int style; /**< Border and barrier segments style:
- TR_PLAN
- TR_CURB
- TR_WALL
- TR_FENCE
- TR_PITBUILDING
*/
#define TR_PLAN 0 /**< Flat (border only) */
#define TR_CURB 1 /**< Curb (border only) */
#define TR_WALL 2 /**< Wall (barrier only) */
#define TR_FENCE 3 /**< Fence (no width) (barrier only) */
#define TR_PITBUILDING 4 /**< Pit building wall (barrier only) */
tdble length; /**< Length in meters of the middle of the track */
tdble width; /**< Width of the segment (if constant width) */
tdble startWidth; /**< Width of the beginning of the segment */
tdble endWidth; /**< Width of the end of the segment */
tdble lgfromstart; /**< Length of begining of segment from starting line */
tdble radius; /**< Radius in meters of the middle of the track (>0) */
tdble radiusr; /**< Radius in meters of the right side of the track (>0) */
tdble radiusl; /**< Radius in meters of the left side of the track (>0) */
tdble arc; /**< Arc in rad of the curve (>0) */
t3Dd center; /**< Center of the curve */
t3Dd vertex[4]; /**< Coord of the 4 corners of the segment.
Index in:
- TR_SL
- TR_SL
- TR_EL
- TR_ER
*/
#define TR_SL 0 /**< Start-Left corner */
#define TR_SR 1 /**< Start-Right corner */
#define TR_EL 2 /**< End-Left corner */
#define TR_ER 3 /**< End_Right corner */
tdble angle[7]; /** Rotation angles of the track in rad anti-clockwise:
Index in:
- TR_ZS
- TR_ZE
- TR_YL
- TR_YR
- TR_XS
- TR_XE
- TR_CS
*/
#define TR_ZS 0 /**< Z Start angle */
#define TR_ZE 1 /**< Z End angle */
#define TR_YL 2 /**< Y Left angle */
#define TR_YR 3 /**< Y Right angle */
#define TR_XS 4 /**< X Start angle */
#define TR_XE 5 /**< X End angle */
#define TR_CS 6 /**< Center start angle */
/* constants used to find the height of a point */
tdble Kzl; /* long constant */
tdble Kzw; /* width constant */
/* constant used to find the width of a segment */
tdble Kyl; /* find y along x */
t3Dd rgtSideNormal; /* normal to the right side in case of straight segment */
int envIndex; /* Environment mapping image index */
tdble height; /**< Max height for curbs */
unsigned int raceInfo; /**< Type of segment regarding the race:
Mask value in:
- TR_NORMAL
- TR_LAST
- TR_START
- TR_PITLANE
- TR_SPEEDLIMIT
- TR_PITENTRY
- TR_PITEXIT
- TR_PIT
*/
#define TR_NORMAL 0x00000000 /**< Normal segment */
#define TR_LAST 0x00000001 /**< Segment before start line */
#define TR_START 0x00000002 /**< Segment after start line */
#define TR_PITLANE 0x00000004 /**< Pit lane segment */
#define TR_SPEEDLIMIT 0x00000008 /**< Segment where the speed is limited */
#define TR_PITENTRY 0x00000010 /**< Segment where the pit lane cross the main track */
#define TR_PITEXIT 0x00000020 /**< Segment where the pit lane cross the main track */
#define TR_PIT 0x00000040 /**< Car pit */
#define TR_PITSTART 0x00000080 /**< Car pit Star */
#define TR_PITEND 0x00000100 /**< Car pit End */
tdble DoVfactor; /* the factor to use in calculating DoV for this Seg */
/* pointers */
/* optionnal extensions */
tSegExt *ext;
tTrackSurface *surface; /**< Segment surface */
tTrackBarrier *barrier[2]; /**< Segment barriers */
tRoadCam *cam; /* current camera */
struct trackSeg *next; /**< Next segment */
struct trackSeg *prev; /**< Previous segment */
// Union to avoid code duplication for left/right side cases and to
// keep compatibility of code. The side definition is so ugly to
// match the one of the barrier[].
#define TR_SIDE_LFT 1
#define TR_SIDE_RGT 0
union {
struct { struct trackSeg *rside, *lside; };
struct trackSeg* side[2];
};
} tTrackSeg;
/* selection for local position structure */
#define TR_TORIGHT 0
#define TR_TOMIDDLE 1
#define TR_TOLEFT 2
/** Location on the track in local coordinates */
typedef struct
{
tTrackSeg *seg; /**< Track segment */
int type; /**< Type of description:
- TR_LPOS_MAIN
- TR_LPOS_SEGMENT
- TR_LPOS_TRACK
*/
#define TR_LPOS_MAIN 0 /**< Relative to the main segment */
#define TR_LPOS_SEGMENT 1 /**< If the point is on a side, relative to this side */
#define TR_LPOS_TRACK 2 /**< Local pos includes all the track width */
tdble toStart; /**< Distance to start of segment (or arc if turn) */
tdble toRight; /**< Distance to right side of segment (+ to inside of track - to outside) */
tdble toMiddle; /**< Distance to middle of segment (+ to left - to right) */
tdble toLeft; /**< Distance to left side of segment (+ to inside of track - to outside) */
} tTrkLocPos;
struct CarElt;
/** Driver's pit */
typedef struct TrackOwnPit
{
tTrkLocPos pos; /**< Center of the pit position */
int pitCarIndex; /**< Index of the car in the car array below which occupies the pit. If the pit is free the value is TR_PIT_STATE_FREE */
#define TR_PIT_STATE_FREE -1
#define TR_PIT_MAXCARPERPIT 4 // maximum cars per pit
tdble lmin; /**< Pitting area length min */
tdble lmax; /**< Pitting area length max */
int freeCarIndex; // Index of next free car entry (look at the next line).
struct CarElt *car[TR_PIT_MAXCARPERPIT]; /**< Car links for pit */
} tTrackOwnPit;
/** Pits Info Structure */
typedef struct
{
int type; /**< Type of Pit:
- TR_PIT_NONE
- TR_PIT_ON_TRACK_SIDE
*/
#define TR_PIT_NONE 0 /**< No pits for that tracks */
#define TR_PIT_ON_TRACK_SIDE 1 /**< The pits are on the track side */
#define TR_PIT_ON_SEPARATE_PATH 2
int nMaxPits; /**< number max of pits */
int nPitSeg; /**< actual number of pits */
int side; /**< Pits side:
- TR_RGT
- TR_LFT
*/
tdble len; /**< Lenght of each pit stop */
tdble width; /**< Width of each pit stop */
tdble speedLimit; /**< Speed limit between pitStart and pitEnd */
tTrackSeg *pitEntry; /**< Pit lane segment */
tTrackSeg *pitStart; /**< Pit lane segment */
tTrackSeg *pitEnd; /**< Pit lane segment */
tTrackSeg *pitExit; /**< Pit lane segment */
tTrackOwnPit *driversPits; /**< List of pits by driver */
int carsPerPit;
int driversPitsNb; /**< Number of drivers */
} tTrackPitInfo;
typedef struct
{
tdble height;
tdble width;
tdble hSpace;
tdble vSpace;
} tTurnMarksInfo;
typedef struct
{
const char *background;
char *background2;
int bgtype;
float bgColor[3];
int envnb;
const char **env;
tTurnMarksInfo turnMarksInfo;
} tTrackGraphicInfo;
/** Track structure
@ingroup trackstruct
*/
typedef struct
{
const char *name; /**< Name of the track */
const char *author; /**< Author's name */
char *filename; /**< Filename of the track description */
void *params; /**< Parameters handle */
char *internalname; /**< Internal name of the track */
const char *category; /**< Category of the track */
int nseg; /**< Number of segments */
int version; /**< Version of the track type */
tdble length; /**< main track length */
tdble width; /**< main track width */
tTrackPitInfo pits; /**< Pits information */
tTrackSeg *seg; /**< Main track */
tTrackSurface *surfaces; /**< Segment surface list */
t3Dd min;
t3Dd max;
tTrackGraphicInfo graphic;
} tTrack;
/** @brief Read given track from @e filename into tTrack struct.
* @ingroup trackmodint
* @param[in] filename filename including path to file
* @return tTrack structure on success
* @note The given file must exist and must be correct
*/
typedef tTrack*(*tfTrackBuild)(char* filename);
/** @brief Returns the absolute height in meters of the road at the given global position.
* @ingroup trackmodint
* @param[in] seg Segment tTrackSeg to start search for coordinates
* @param[in] X Global X coordinate
* @param[in] Y Global Y coordinate
* @return Height in meters
* @see RtTrackHeightG
* @see RtTrackHeightL
*/
typedef tdble(*tfTrackHeightG)(tTrackSeg* seg, tdble X, tdble Y);
/** @brief Returns the absolute height in meters of the road at the local position
* @ingroup trackmodint
* @param[in] pos tTrkLocPos containing the loacal position
* @return Height in meters
* @see RtTrackHeightL
*/
typedef tdble(*tfTrackHeightL)(tTrkLocPos* pos);
/** @brief Convert a global position (segment, X, Y) into a local position (segment, toRight, toStart)
* @ingroup trackmodint
* @param[in] seg Segment tTrackSeg to start search for coordinates
* @param[in] X Global X coordinate
* @param[in] Y Global Y coordinate
* @param[in,out] pos tTrkLocPos passed from the caller to fill in the local position
* @param[in] type Type of local position desired:
* - #TR_LPOS_MAIN Relative to the main segment
* - #TR_LPOS_SEGMENT If the point is on a side, relative to this side
* - #TR_LPOS_TRACK Local position includes all the track width (distance to barrier)
* @see RtTrackGlobal2Local
*/
typedef void(*tfTrackGlobal2Local)(tTrackSeg* seg, tdble X, tdble Y, tTrkLocPos* pos, int type);
/** @brief Convert a local position (segment, toRight, toStart) into a global one (X, Y)
* @ingroup trackmodint
* @param[in] pos Local position
* @param[in,out] X Pointer to tdble passed by the caller to fill in X position
* @param[in,out] Y Pointer to tdble passed by the caller to fill in Y position
* @see RtTrackLocal2Global
*/
typedef void(*tfTrackLocal2Global)(tTrkLocPos* pos, tdble* X, tdble* Y);
/** @brief Get the normal vector (in global coordinate system) of the border of the track including the sides.
* @ingroup trackmodint
* @param[in] seg Current segment
* @param[in] X Global X position
* @param[in] Y Global Y position
* @param[in] side Side where the normal is wanted
* - #TR_LFT for left side
* - #TR_RGT for right side
* @param[in,out] norm t3Dd passed from the caller to fill in the normalized side normal vector
* @see RtTrackSideNormalG
*/
typedef void(*tfTrackSideNormal)(tTrackSeg* seg, tdble X, tdble Y, int side, t3Dd* norm);
/** @brief Get the normal vector of the road (pointing upward).
* @ingroup trackmodint
* @param[in] pos Local position
* @param[in,out] norm t3Dd passed from the caller to fill in the normal vector
* @see RtTrackSurfaceNormalL
*/
typedef void(*tfTrackSurfaceNormal)(tTrkLocPos *pos, t3Dd* norm);
/** @brief Release current track and all its resources
* @ingroup trackmodint
*/
typedef void(*tfTrackShutdown)(void);
/** @brief Interface Structure for Track Loader
* @ingroup trackmodint
*/
typedef struct {
tfTrackBuild trkBuild; /**< build track structure for simu */
tfTrackBuild trkBuildEx; /**< build with graphic extensions (used by trackgen tool) */
tfTrackHeightG trkHeightG;
tfTrackHeightL trkHeightL;
tfTrackGlobal2Local trkGlobal2Local;
tfTrackLocal2Global trkLocal2Global;
tfTrackSideNormal trkSideNormal;
tfTrackSurfaceNormal trkSurfaceNormal;
tfTrackShutdown trkShutdown;
} tTrackItf;
/* For Type 3 tracks (now obsolete) */
#define TRK_LST_SURF "List"
#define TRK_LST_CAM "list"
#define TRK_ATT_PIT_ENTRY "pit entry"
#define TRK_ATT_PIT_EXIT "pit exit"
#define TRK_ATT_PIT_START "pit start"
#define TRK_ATT_PIT_END "pit end"
#define TRK_ATT_PIT_TYPE "pit type"
#define TRK_ATT_PIT_SIDE "pit side"
#define TRK_ATT_PIT_LEN "pit length"
#define TRK_ATT_PIT_WIDTH "pit width"
#define TRK_LST_SEG "segments"
#define TRK_ATT_ENVIND "env map index"
#define TRK_ATT_LST "lside type"
#define TRK_ATT_LSW "lside width"
#define TRK_ATT_LSWS "lside start width"
#define TRK_ATT_LSWE "lside end width"
#define TRK_ATT_LSSURF "lside surface"
#define TRK_ATT_RST "rside type"
#define TRK_ATT_RSW "rside width"
#define TRK_ATT_RSWS "rside start width"
#define TRK_ATT_RSWE "rside end width"
#define TRK_ATT_RSSURF "rside surface"
#define TRK_ATT_LBS "lborder style"
#define TRK_ATT_LBW "lborder width"
#define TRK_ATT_LBH "lborder height"
#define TRK_ATT_LBSURF "lborder surface"
#define TRK_ATT_RBS "rborder style"
#define TRK_ATT_RBW "rborder width"
#define TRK_ATT_RBH "rborder height"
#define TRK_ATT_RBSURF "rborder surface"
#define TRK_ATT_BHEIGHT "border height"
#define TRK_ATT_LBAS "lbarrier style"
#define TRK_ATT_LBAW "lbarrier width"
#define TRK_ATT_LBAH "lbarrier height"
#define TRK_ATT_LBAFRCT "lbarrier friction"
#define TRK_ATT_LBASURF "lbarrier surface"
#define TRK_ATT_RBAS "rbarrier style"
#define TRK_ATT_RBAW "rbarrier width"
#define TRK_ATT_RBAH "rbarrier height"
#define TRK_ATT_LBAFRCT "lbarrier friction"
#define TRK_ATT_RBASURF "rbarrier surface"
#define TRK_VAL_PIT_TYPE_NONE "no pit"
#define TRK_VAL_PIT_TYPE_SIDE "track side"
#define TRK_VAL_PIT_TYPE_SEP_PATH "seperate path"
#define TRK_ATT_FINISH "finish segment"
#endif /* _TRACKV1_H_ */