|
|
@ -2208,9 +2208,11 @@ bool hsBounds3Ext::ISectBoxBS(const hsBounds3Ext &other, const hsVector3 &myVel, |
|
|
|
hsVector3 tstAxis; |
|
|
|
hsVector3 tstAxis; |
|
|
|
float tstDepth; |
|
|
|
float tstDepth; |
|
|
|
int i; |
|
|
|
int i; |
|
|
|
|
|
|
|
|
|
|
|
for( i = 0; i < 3; i++ ) |
|
|
|
for( i = 0; i < 3; i++ ) |
|
|
|
{ |
|
|
|
{ |
|
|
|
bool tryAxis; |
|
|
|
bool tryAxis = false; |
|
|
|
|
|
|
|
|
|
|
|
if( other.fExtFlags & kAxisAligned ) |
|
|
|
if( other.fExtFlags & kAxisAligned ) |
|
|
|
{ |
|
|
|
{ |
|
|
|
// first try the other box axes
|
|
|
|
// first try the other box axes
|
|
|
@ -2229,25 +2231,22 @@ bool hsBounds3Ext::ISectBoxBS(const hsBounds3Ext &other, const hsVector3 &myVel, |
|
|
|
if( effMin > other.fMaxs[i] ) |
|
|
|
if( effMin > other.fMaxs[i] ) |
|
|
|
return false; |
|
|
|
return false; |
|
|
|
|
|
|
|
|
|
|
|
if( (other.fMins[i] <= effMin) |
|
|
|
if ((other.fMins[i] <= effMin) && |
|
|
|
&&(other.fMaxs[i] <= effMax) ) |
|
|
|
(other.fMaxs[i] <= effMax)) |
|
|
|
{ |
|
|
|
{ |
|
|
|
tstDepth = other.fMaxs[i] - effMin; |
|
|
|
tstDepth = other.fMaxs[i] - effMin; |
|
|
|
hsAssert(tstDepth > -kRealSmall, "Late to be finding sep axis"); |
|
|
|
hsAssert(tstDepth > -kRealSmall, "Late to be finding sep axis"); |
|
|
|
tstAxis.Set(i == 0 ? 1.f : 0, i & 1 ? 1.f : 0, i & 2 ? 1.f : 0); |
|
|
|
tstAxis.Set(i == 0 ? 1.f : 0, i & 1 ? 1.f : 0, i & 2 ? 1.f : 0); |
|
|
|
tryAxis = true; |
|
|
|
tryAxis = true; |
|
|
|
} |
|
|
|
} |
|
|
|
else |
|
|
|
else if ((other.fMins[i] >= effMin) && |
|
|
|
if( (other.fMins[i] >= effMin) |
|
|
|
(other.fMaxs[i] >= effMax)) |
|
|
|
&&(other.fMaxs[i] >= effMax) ) |
|
|
|
|
|
|
|
{ |
|
|
|
{ |
|
|
|
tstDepth = effMax - other.fMins[i]; |
|
|
|
tstDepth = effMax - other.fMins[i]; |
|
|
|
hsAssert(tstDepth > -kRealSmall, "Late to be finding sep axis"); |
|
|
|
hsAssert(tstDepth > -kRealSmall, "Late to be finding sep axis"); |
|
|
|
tstAxis.Set(i == 0 ? -1.f : 0, i & 1 ? -1.f : 0, i & 2 ? -1.f : 0); |
|
|
|
tstAxis.Set(i == 0 ? -1.f : 0, i & 1 ? -1.f : 0, i & 2 ? -1.f : 0); |
|
|
|
tryAxis = true; |
|
|
|
tryAxis = true; |
|
|
|
} |
|
|
|
} |
|
|
|
else
|
|
|
|
|
|
|
|
tryAxis = false; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
else |
|
|
|
else |
|
|
|
{ |
|
|
|
{ |
|
|
@ -2278,17 +2277,14 @@ bool hsBounds3Ext::ISectBoxBS(const hsBounds3Ext &other, const hsVector3 &myVel, |
|
|
|
tstAxis = -other.fAxes[i]; |
|
|
|
tstAxis = -other.fAxes[i]; |
|
|
|
hsAssert(tstDepth > -kRealSmall, "Late to be finding sep axis"); |
|
|
|
hsAssert(tstDepth > -kRealSmall, "Late to be finding sep axis"); |
|
|
|
} |
|
|
|
} |
|
|
|
else |
|
|
|
else if (centerDist >= other.fDists[i].fY) |
|
|
|
if( centerDist >= other.fDists[i].fY ) |
|
|
|
|
|
|
|
{ |
|
|
|
{ |
|
|
|
tstDepth = other.fDists[i].fY - effMin; |
|
|
|
tstDepth = other.fDists[i].fY - effMin; |
|
|
|
tstAxis = other.fAxes[i]; |
|
|
|
tstAxis = other.fAxes[i]; |
|
|
|
hsAssert(tstDepth > -kRealSmall, "Late to be finding sep axis"); |
|
|
|
hsAssert(tstDepth > -kRealSmall, "Late to be finding sep axis"); |
|
|
|
} |
|
|
|
} |
|
|
|
else
|
|
|
|
|
|
|
|
tryAxis = false; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if( tryAxis ) |
|
|
|
if( tryAxis ) |
|
|
|
{ |
|
|
|
{ |
|
|
|
float magSq = tstAxis.MagnitudeSquared(); |
|
|
|
float magSq = tstAxis.MagnitudeSquared(); |
|
|
|