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

View file

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