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 ...
|
// 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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Reference in a new issue