update grcar.cpp for fix bug with animated driver

git-svn-id: https://svn.code.sf.net/p/speed-dreams/code/trunk@5602 30fe4595-0a0c-4342-8851-515496e4dcbd

Former-commit-id: 60788b822985bd18911c72922946ae07714f0ccc
Former-commit-id: 423ffc51153f50fe5a446e076334c6593a712c63
This commit is contained in:
torcs-ng 2013-07-16 16:44:21 +00:00
parent f192eb2b71
commit d2b180b627
2 changed files with 57 additions and 53 deletions

View file

@ -1015,16 +1015,16 @@ grInitCar(tCarElt *car)
// Separate rear wing models for animation according to rear wing angle ...
snprintf(path, 256, "%s/%s", SECT_GROBJECTS, LST_REARWING);
nranges = GfParmGetEltNb(handle, path) + 1;
grCarInfo[index].nDRM = nranges - 1;
grCarInfo[index].DRMSelector = NULL;
grCarInfo[index].nDRM2 = nranges - 1;
grCarInfo[index].DRMSelector2 = NULL;
if (nranges > 1)
{
// We have at least one separate rearwing model to add...
ssgEntity *rearwingEntity;
ssgSelector *DRMSel;
grCarInfo[index].DRMSelector = DRMSel = new ssgSelector;
grCarInfo[index].carTransform->addKid(DRMSel);
ssgSelector *DRMSel2;
grCarInfo[index].DRMSelector2 = DRMSel2 = new ssgSelector;
grCarInfo[index].carTransform->addKid(DRMSel2);
selIndex = 0;
@ -1037,7 +1037,7 @@ grInitCar(tCarElt *car)
snprintf(buf, nMaxTexPathSize, "%s/%s/%d", SECT_GROBJECTS, LST_REARWING, i);
param = GfParmGetStr(handle, buf, PRM_REARWINGMODEL, "");
grCarInfo[index].DRMThreshold[selIndex] = GfParmGetNum(handle, buf, PRM_REARWINGANGLE, NULL, 0.0);
grCarInfo[index].DRMThreshold2[selIndex] = GfParmGetNum(handle, buf, PRM_REARWINGANGLE, NULL, 0.0);
tdble xpos = GfParmGetNum(handle, buf, PRM_XPOS, NULL, 0.0);
tdble ypos = GfParmGetNum(handle, buf, PRM_YPOS, NULL, 0.0);
@ -1046,27 +1046,27 @@ grInitCar(tCarElt *car)
rearwingLoc->setTransform( &rearwingpos);
rearwingEntity = grssgCarLoadAC3D(param, NULL, index);
DBG_SET_NAME(rearwingEntity, "DRM", index, i-1);
DBG_SET_NAME(rearwingEntity, "DRM2", index, i-1);
rearwingLoc->addKid(rearwingEntity);
rearwingBody->addKid(rearwingLoc);
DRMSel->addKid(rearwingBody);
grCarInfo[index].DRMSelectMask[i-1] = 1 << selIndex;
DRMSel2->addKid(rearwingBody);
grCarInfo[index].DRMSelectMask2[i-1] = 1 << selIndex;
selIndex++;
}
// select a default rearwing - angle value of 0.0 is desired...
for (i = 1; i < nranges; i++)
{
if (grCarInfo[index].DRMThreshold[i-1] == 0.0f)
if (grCarInfo[index].DRMThreshold2[i-1] == 0.0f)
{
DRMSel->select( grCarInfo[index].DRMSelectMask[i-1] );
DRMSel2->select( grCarInfo[index].DRMSelectMask2[i-1] );
break;
}
}
if (i == nranges)
DRMSel->select( grCarInfo[index].DRMSelectMask[0] );
DRMSel2->select( grCarInfo[index].DRMSelectMask2[0] );
}
CarsAnchor->addKid(grCarInfo[index].carTransform);
@ -1208,48 +1208,48 @@ grDrawCar(tSituation *s, tCarElt *car, tCarElt *curCar, int dispCarFlag, int dis
grCarInfo[index].rearwingSelector->select(1);
// Animated rearwing model selection according to wing angle
if (grCarInfo[index].nDRM > 0)
if (grCarInfo[index].nDRM2 > 0)
{
// choose a rearwing model to display
int curDRM = 0;
//float curAngle = 0.0f;
//int lastDRM = grCarInfo[index].DRMSelector->getSelect();
for (i=0; i<grCarInfo[index].nDRM; i++)
for (i=0; i<grCarInfo[index].nDRM2; i++)
{
float wingangle = car->_wingRCmd * 180 / PI;
if ((wingangle > 0.0)
&& (wingangle < 10.0)
&& (grCarInfo[index].DRMThreshold[i] >= 0.0)
&& (grCarInfo[index].DRMThreshold[i] <= 10.0))
&& (grCarInfo[index].DRMThreshold2[i] >= 0.0)
&& (grCarInfo[index].DRMThreshold2[i] <= 10.0))
{
curDRM = i;
//curAngle = grCarInfo[index].DRMThreshold[i];
}
else if ((wingangle > 10.0)
&& (wingangle < 35.0)
&& (grCarInfo[index].DRMThreshold[i] >= 10.0)
&& (grCarInfo[index].DRMThreshold[i] <= 35.0))
&& (grCarInfo[index].DRMThreshold2[i] >= 10.0)
&& (grCarInfo[index].DRMThreshold2[i] <= 35.0))
{
curDRM = i;
//curAngle = grCarInfo[index].DRMThreshold[i];
}
else if ((wingangle > 35.0)
&& (grCarInfo[index].DRMThreshold[i] > 35.0))
&& (grCarInfo[index].DRMThreshold2[i] > 35.0))
{
curDRM = i;
//curAngle = grCarInfo[index].DRMThreshold[i];
}
}
grCarInfo[index].DRMSelector->select( grCarInfo[index].DRMSelectMask[curDRM] );
grCarInfo[index].DRMSelector2->select( grCarInfo[index].DRMSelectMask2[curDRM] );
}
}
else
{
grCarInfo[index].rearwingSelector->select(0);
if (grCarInfo[index].nDRM > 0)
grCarInfo[index].DRMSelector->select(0);
if (grCarInfo[index].nDRM2 > 0)
grCarInfo[index].DRMSelector2->select(0);
}
}

View file

@ -51,44 +51,48 @@ public:
class tgrCarInfo
{
public:
float iconColor[4];
ssgTransform *carTransform;
ssgSelector *LODSelector;
ssgSelector *DRMSelector;
ssgEntity *carEntity;
float iconColor[4];
ssgTransform *carTransform;
ssgSelector *LODSelector;
ssgSelector *DRMSelector;
ssgSelector *DRMSelector2;
ssgEntity *carEntity;
int nSteer;
int LODSelectMask[32];
float LODThreshold[32];
int DRMSelectMask[32];
int LODSelectMask[32];
float LODThreshold[32];
int DRMSelectMask[32];
int DRMSelectMask2[32];
int nDRM;
float DRMThreshold[32];
float lastDRMswitch;
ssgSelector *driverSelector;
ssgSelector *steerSelector;
ssgSelector *rearwingSelector;
bool driverSelectorinsg;
bool rearwingSelectorinsg;
int nDRM2;
float DRMThreshold[32];
float DRMThreshold2[32];
float lastDRMswitch;
ssgSelector *driverSelector;
ssgSelector *steerSelector;
ssgSelector *rearwingSelector;
bool driverSelectorinsg;
bool rearwingSelectorinsg;
ssgStateSelector *envSelector;
ssgTransform *wheelPos[4];
ssgTransform *wheelRot[4];
ssgTransform *steerRot[2];
ssgTransform *wheelPos[4];
ssgTransform *wheelRot[4];
ssgTransform *steerRot[2];
ssgColourArray *brkColor[4];
ssgSelector *wheelselector[4];
ssgState *wheelTexture;
ssgSelector *wheelselector[4];
ssgState *wheelTexture;
ssgVtxTableShadow *shadowBase;
ssgVtxTableShadow *shadowCurr;
ssgBranch *shadowAnchor;
cGrSkidmarks *skidmarks;
sgMat4 carPos;
ssgBranch *shadowAnchor;
cGrSkidmarks *skidmarks;
sgMat4 carPos;
tgrCarInstrument instrument[2];
tdble distFromStart;
tdble envAngle;
int fireCount;
tdble steerMovt;
tdble px;
tdble py;
tdble sx;
tdble sy;
tdble distFromStart;
tdble envAngle;
int fireCount;
tdble steerMovt;
tdble px;
tdble py;
tdble sx;
tdble sy;
};
extern tgrCarInfo *grCarInfo;