From 601e561ec9a88a9419974e0df02247c17f113e40 Mon Sep 17 00:00:00 2001 From: Glenn Maynard Date: Thu, 25 Sep 2003 01:21:01 +0000 Subject: [PATCH] Cleanup, fix rare div/0 errors. --- stepmania/src/NoteDataWithScoring.cpp | 57 ++++++++++++++------------- 1 file changed, 30 insertions(+), 27 deletions(-) diff --git a/stepmania/src/NoteDataWithScoring.cpp b/stepmania/src/NoteDataWithScoring.cpp index 9d43aee5ab..b9a7a79d2e 100644 --- a/stepmania/src/NoteDataWithScoring.cpp +++ b/stepmania/src/NoteDataWithScoring.cpp @@ -190,21 +190,22 @@ float NoteDataWithScoring::GetActualStreamRadarValue( float fSongSeconds, Player return min( fReturn, 1.0f ); */ - int totalnotes = GetNumTapNotes(); - int perfects = GetNumTapNotesWithScore(TNS_PERFECT) + GetNumTapNotesWithScore(TNS_MARVELOUS); - - float result = float(perfects)/totalnotes; - return result; + int TotalSteps = GetNumTapNotes(); + if( !TotalSteps ) + return 1; + const int Perfects = GetNumTapNotesWithScore(TNS_PERFECT) + GetNumTapNotesWithScore(TNS_MARVELOUS); + return clamp( float(Perfects)/TotalSteps, 0.0f, 1.0f ); } float NoteDataWithScoring::GetActualVoltageRadarValue( float fSongSeconds, PlayerNumber pn ) const { + const int TotalSteps = GetNumTapNotes(); + if( !TotalSteps ) + return 1; - int MaxCombo = GAMESTATE->m_CurStageStats.iMaxCombo[pn]; - int TotalSteps = GetNumTapNotes(); - - return min( (float)MaxCombo/TotalSteps, 1.0f); + const int MaxCombo = GAMESTATE->m_CurStageStats.iMaxCombo[pn]; + return clamp( (float)MaxCombo/TotalSteps, 0.0f, 1.0f ); // voltage is essentialy perfects divided by # of steps /* float fAvgBPS = GetLastBeat() / fSongSeconds; @@ -233,17 +234,16 @@ float NoteDataWithScoring::GetActualVoltageRadarValue( float fSongSeconds, Playe float NoteDataWithScoring::GetActualAirRadarValue( float fSongSeconds, PlayerNumber pn ) const { - // number of doubles - int iNumDoubles = - GetNumDoublesWithScore(TNS_MARVELOUS) + - GetNumDoublesWithScore(TNS_PERFECT); - // float fReturn = iNumDoubles / fSongSeconds; - int iTotalDoubles = GetNumDoubles(); + const int iTotalDoubles = GetNumDoubles(); + if (iTotalDoubles == 0) + return 1; // no jumps in song - if (iTotalDoubles == 0) return 1.0f; // no jumps in song - float fReturn = (float)iNumDoubles / iTotalDoubles; - return min( fReturn, 1.0f ); + // number of doubles + const int iNumDoubles = + GetNumDoublesWithScore(TNS_MARVELOUS) + GetNumDoublesWithScore(TNS_PERFECT); + + return clamp( (float)iNumDoubles / iTotalDoubles, 0.0f, 1.0f ); } float NoteDataWithScoring::GetActualChaosRadarValue( float fSongSeconds, PlayerNumber pn ) const @@ -260,21 +260,24 @@ float NoteDataWithScoring::GetActualChaosRadarValue( float fSongSeconds, PlayerN return min( fReturn, 1.0f ); */ - int PossibleDP = GAMESTATE->m_CurStageStats.iPossibleDancePoints[pn]; - int ActualDP = GAMESTATE->m_CurStageStats.iActualDancePoints[pn]; + const int PossibleDP = GAMESTATE->m_CurStageStats.iPossibleDancePoints[pn]; + if ( PossibleDP == 0 ) + return 1; // no jumps in song - float fResult = float(ActualDP)/PossibleDP; - - return clamp( fResult, 0.0f, 1.0f ); + const int ActualDP = GAMESTATE->m_CurStageStats.iActualDancePoints[pn]; + return clamp( float(ActualDP)/PossibleDP, 0.0f, 1.0f ); } float NoteDataWithScoring::GetActualFreezeRadarValue( float fSongSeconds, PlayerNumber pn ) const { // number of hold steps - float totalsteps = (float)GetNumHoldNotes(); - if (totalsteps == 0) return 1.0f; - float fReturn = GetNumHoldNotesWithScore(HNS_OK) / totalsteps; - return min( fReturn, 1.0f ); + const int TotalHolds = GetNumHoldNotes(); + if ( TotalHolds == 0 ) + return 1.0f; + + const int ActualHolds = GetNumHoldNotesWithScore(HNS_OK); + + return clamp( float(ActualHolds) / TotalHolds, 0.0f, 1.0f ); } template