fix stats glitches

add StageStats::FullCombo
This commit is contained in:
Glenn Maynard
2003-10-30 04:41:03 +00:00
parent 9ca223f7aa
commit fc97fba3b3
2 changed files with 35 additions and 2 deletions
+33 -2
View File
@@ -21,8 +21,12 @@ StageStats::StageStats()
{
memset( this, 0, sizeof(StageStats) );
for( int p=0; p<NUM_PLAYERS; p++ )
{
for( int i = 0; i < LIFE_RECORD_RESOLUTION; ++i )
fLifeRecord[p][i] = -1;
fFirstPos[p] = 1;
fLastPos[p] = 0;
}
}
void StageStats::AddStats( const StageStats& other )
@@ -175,6 +179,10 @@ void StageStats::GetLifeRecord( PlayerNumber pn, float *life, int nout ) const
void StageStats::UpdateComboList( PlayerNumber pn, float pos )
{
pos = clamp( pos, 0, 1 );
fFirstPos[pn] = min( pos, fFirstPos[pn] );
fLastPos[pn] = max( pos, fLastPos[pn] );
const int cnt = iCurCombo[pn];
if( !cnt )
return; /* no combo */
@@ -205,8 +213,9 @@ void StageStats::Finish()
if( ComboList[pn].size() == 0 )
continue;
const float First = ComboList[pn].front().start;
const float Last = ComboList[pn].back().start + ComboList[pn].back().size;
const float First = fFirstPos[pn];
const float Last = fLastPos[pn];
if( fabsf(First-Last) < 0.0001f )
continue;
@@ -226,6 +235,28 @@ void StageStats::Finish()
NewLifeRecord[i] = fLifeRecord[pn][from];
}
memcpy( fLifeRecord[pn], NewLifeRecord, sizeof(fLifeRecord[pn]) );
fFirstPos[pn] = 0;
fLastPos[pn] = 1;
}
}
bool StageStats::FullCombo( PlayerNumber pn ) const
{
if( ComboList[pn].size() != 1 )
{
LOG->Trace("FullCombo(%i): %i != 1", pn, ComboList[pn].size() );
return false;
}
const float ComboStart = ComboList[pn][0].start;
const float ComboEnd = ComboList[pn][0].start + ComboList[pn][0].size;
const bool ComboStartsAtBeginning = fabs( ComboStart - fFirstPos[pn] ) < 0.001f;
const bool ComboEndsAtEnd = fabs( ComboEnd - fLastPos[pn] ) < 0.001f;
LOG->Trace("FullCombo(%i): %f .. %f, %f .. %f, %i, %i",
pn, ComboStart, ComboEnd, fFirstPos[pn], fLastPos[pn], ComboStartsAtBeginning, ComboEndsAtEnd );
return ComboStartsAtBeginning && ComboEndsAtEnd;
}