forked from speed-dreams/speed-dreams-code
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:
parent
f192eb2b71
commit
d2b180b627
2 changed files with 57 additions and 53 deletions
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue