23 #include <sys/types.h> 63 ssgNormalArray *shd_nrm;
77 shd_nrm =
new ssgNormalArray(1);
78 nrm[0] = nrm[1] = 0.0;
90 skidState->setColourMaterial(GL_AMBIENT_AND_DIFFUSE);
91 skidState->setTexture (
"data/textures/grey-tracks.rgb", TRUE, TRUE, TRUE);
96 for (i = 0; i<4; i++) {
103 *
sizeof( ssgColourArray *));
151 ssgVertexArray *basevtx = NULL;
153 ssgTexCoordArray* texcoords = NULL;
154 tdble skid_sensitivity = 0.75f;
160 cur_clr[0] = cur_clr[1] = cur_clr[2] = 1.0f;
162 for (i = 0; i < 4; i++) {
164 tdble sling_mud = 1.0f;
168 if (strstr(s,
"sand")) {
172 skid_sensitivity = 0.9f;
173 }
else if (strstr(s,
"dirt")) {
177 skid_sensitivity = 0.9f;
178 }
else if (strstr(s,
"mud")) {
182 skid_sensitivity = 1.0f;
183 }
else if (strstr(s,
"grass")) {
187 skid_sensitivity = 0.8f;
188 }
else if (strstr(s,
"gravel")) {
192 skid_sensitivity = 0.7f;
198 skid_sensitivity = 0.5f;
202 if (car->_skid[i] > 0.1f) {
203 cur_clr[3] = tanh(skid_sensitivity*car->_skid[i]);
208 for (
int c = 0; c < 3; c++) {
219 if (cur_clr[3] > 0.1f) {
221 basevtx =
new ssgVertexArray(4 * 2 + 1);
222 tdble sling_left = 0.0f;
223 tdble sling_right = 0.0f;
224 sling_right = sling_mud;
225 sling_left = -sling_mud;
238 tdble z_adjust = 0.95;
244 if (car->_speed_x > 0.0f) {
245 vtx[1] = car->
priv.
wheel[i].
relPos.
y + (sling_right + 1.0)*car->_tireWidth(i) / 2.0;
247 vtx[1] = car->
priv.
wheel[i].
relPos.
y + (sling_left - 1.0)* car->_tireWidth(i) / 2.0;
254 if (car->_speed_x > 0.0f) {
255 vtx[1] = car->
priv.
wheel[i].
relPos.
y + (sling_left - 1.0)* car->_tireWidth(i) / 2.0;
257 vtx[1] = car->
priv.
wheel[i].
relPos.
y + (sling_right + 1.0)*car->_tireWidth(i) / 2.0;
262 texcoords =
new ssgTexCoordArray();
266 TxVtx[1] = 0.75f + sling_right*0.25f;
267 texcoords->add(TxVtx);
269 TxVtx[1] = 0.25f+sling_left*0.25f;
270 texcoords->add(TxVtx);
329 basevtx->removeAll();
362 GfOut(
"-- grShutdownSkidmarks\n");
370 for (i = 0; i<4; i++) {
371 free(
grCarInfo[z].skidmarks->strips[i].vtx);
372 free(
grCarInfo[z].skidmarks->strips[i].vta);
373 free(
grCarInfo[z].skidmarks->strips[i].tex);
374 free(
grCarInfo[z].skidmarks->strips[i].state);
375 free(
grCarInfo[z].skidmarks->strips[i].size);
376 free(
grCarInfo[z].skidmarks->strips[i].clr);
#define GR_ATT_MAXSTRIPBYWHEEL
int grSkidMaxPointByStrip
void grInitSkidmarks(tCarElt *car)
initialize the skidmak structure for a car
int grSkidMaxStripByWheel
The Gaming Framework API (client part).
const char * material
Type of material used.
tPosd relPos
position relative to GC
float tdble
Floating point type used in TORCS.
void grUpdateSkidmarks(tCarElt *car, double t)
update if necessary the skidmarks for a car
Graphic Module Interface Definition.
This is the car structure.
#define GR_ATT_MAXPOINTBYSTRIP
tdble GfParmGetNum(void *handle, const char *path, const char *key, const char *unit, tdble deflt)
Get a numerical parameter from the parameter set handle.
tTrackSeg * seg
Track segment where the wheel is.
void grShutdownSkidmarks(void)
remove the skidmarks information for a car
static ssgSimpleState * skidState
tTrackSurface * surface
Segment surface.
void grDrawSkidmarks(tCarElt *car)
#define MAXPOINT_BY_STRIP
Track Structure and Track Loader Module Definition.
#define GR_ATT_SKIDDELTAT