diff --git a/stepmania/src/NoteDataUtil.cpp b/stepmania/src/NoteDataUtil.cpp index a9d18541e6..a4cd7a8fd7 100644 --- a/stepmania/src/NoteDataUtil.cpp +++ b/stepmania/src/NoteDataUtil.cpp @@ -522,7 +522,7 @@ void NoteDataUtil::LoadTransformedLights( const NoteData &in, NoteData &out, int } } -void NoteDataUtil::GetRadarValues( const NoteData &in, float fSongSeconds, RadarValues& out ) +void NoteDataUtil::CalculateRadarValues( const NoteData &in, float fSongSeconds, RadarValues& out ) { // The for loop and the assert are used to ensure that all fields of // RadarValue get set in here. diff --git a/stepmania/src/NoteDataUtil.h b/stepmania/src/NoteDataUtil.h index f924be2447..f3ce315eb0 100644 --- a/stepmania/src/NoteDataUtil.h +++ b/stepmania/src/NoteDataUtil.h @@ -31,7 +31,7 @@ namespace NoteDataUtil float GetFreezeRadarValue( const NoteData &in, float fSongSeconds ); float GetChaosRadarValue( const NoteData &in, float fSongSeconds ); - void GetRadarValues( const NoteData &in, float fSongSeconds, RadarValues& out ); + void CalculateRadarValues( const NoteData &in, float fSongSeconds, RadarValues& out ); void RemoveHoldNotes( NoteData &inout, int iStartIndex = 0, int iEndIndex = MAX_NOTE_ROW ); void ChangeRollsToHolds( NoteData &in, int iStartIndex, int iEndIndex ); diff --git a/stepmania/src/NotesLoaderSM.cpp b/stepmania/src/NotesLoaderSM.cpp index 8685662468..b5b120050a 100644 --- a/stepmania/src/NotesLoaderSM.cpp +++ b/stepmania/src/NotesLoaderSM.cpp @@ -51,7 +51,7 @@ void SMLoader::LoadFromSMTokens( RadarValues v; FOREACH_RadarCategory(rc) v[rc] = strtof( saValues[rc], NULL ); - out.SetRadarValues( v ); + out.SetCachedRadarValues( v ); } out.SetSMNoteData(sNoteData); diff --git a/stepmania/src/PlayerStageStats.cpp b/stepmania/src/PlayerStageStats.cpp index 252ff8abe2..1aa02b6d53 100644 --- a/stepmania/src/PlayerStageStats.cpp +++ b/stepmania/src/PlayerStageStats.cpp @@ -9,6 +9,7 @@ #include #include "GameState.h" #include "Course.h" +#include "Steps.h" #define GRADE_PERCENT_TIER(i) THEME->GetMetricF("PlayerStageStats",ssprintf("GradePercent%s",GradeToString((Grade)i).c_str())) #define GRADE_TIER02_IS_ALL_PERFECTS THEME->GetMetricB("PlayerStageStats","GradeTier02IsAllPerfects") @@ -129,7 +130,14 @@ Grade PlayerStageStats::GetGrade() const /* XXX: This entire calculation should be in ScoreKeeper, but final evaluation * is tricky since at that point the ScoreKeepers no longer exist. */ - float Possible = 0, Actual = 0; + float fPossible = 0; + FOREACH_CONST( Steps*, vpPossibleSteps, s ) + { + fPossible += (*s)->GetRadarValues().m_Values.v.fNumTapsAndHolds * PREFSMAN->m_iGradeWeightMarvelous; + fPossible += (*s)->GetRadarValues().m_Values.v.fNumHolds * PREFSMAN->m_iGradeWeightOK; + } + + float fActual = 0; FOREACH_TapNoteScore( tns ) { int iTapScoreValue; @@ -146,9 +154,7 @@ Grade PlayerStageStats::GetGrade() const case TNS_MARVELOUS: iTapScoreValue = PREFSMAN->m_iGradeWeightMarvelous; break; default: FAIL_M( ssprintf("%i", tns) ); break; } - Actual += iTapNoteScores[tns] * iTapScoreValue; - if( tns != TNS_HIT_MINE ) - Possible += iTapNoteScores[tns] * PREFSMAN->m_iGradeWeightMarvelous; + fActual += iTapNoteScores[tns] * iTapScoreValue; } FOREACH_HoldNoteScore( hns ) @@ -161,14 +167,13 @@ Grade PlayerStageStats::GetGrade() const case HNS_OK: iHoldScoreValue = PREFSMAN->m_iGradeWeightOK; break; default: FAIL_M( ssprintf("%i", hns) ); break; } - Actual += iHoldNoteScores[hns] * iHoldScoreValue; - Possible += iHoldNoteScores[hns] * PREFSMAN->m_iGradeWeightOK; + fActual += iHoldNoteScores[hns] * iHoldScoreValue; } - LOG->Trace( "GetGrade: Actual: %f, Possible: %f", Actual, Possible ); + LOG->Trace( "GetGrade: fActual: %f, fPossible: %f", fActual, fPossible ); - float fPercent = (Possible == 0) ? 0 : Actual / Possible; + float fPercent = (fPossible == 0) ? 0 : fActual / fPossible; Grade grade = GetGradeFromPercent( fPercent ); diff --git a/stepmania/src/ScoreKeeperMAX2.cpp b/stepmania/src/ScoreKeeperMAX2.cpp index 46e4825626..e215d0a0d0 100644 --- a/stepmania/src/ScoreKeeperMAX2.cpp +++ b/stepmania/src/ScoreKeeperMAX2.cpp @@ -60,7 +60,7 @@ void ScoreKeeperMAX2::Load( */ NoteDataUtil::TransformNoteData( nd, aa, pSteps->m_StepsType, pSong ); RadarValues rvPre; - NoteDataUtil::GetRadarValues( nd, pSong->m_fMusicLengthSeconds, rvPre ); + NoteDataUtil::CalculateRadarValues( nd, pSong->m_fMusicLengthSeconds, rvPre ); /* Apply user transforms to find out how the notes will really look. * @@ -71,7 +71,7 @@ void ScoreKeeperMAX2::Load( * mean moving the queues in ScreenGameplay to GameState ... */ NoteDataUtil::TransformNoteData( nd, m_pPlayerState->m_PlayerOptions, pSteps->m_StepsType ); RadarValues rvPost; - NoteDataUtil::GetRadarValues( nd, pSong->m_fMusicLengthSeconds, rvPost ); + NoteDataUtil::CalculateRadarValues( nd, pSong->m_fMusicLengthSeconds, rvPost ); iTotalPossibleDancePoints += this->GetPossibleDancePoints( rvPre, rvPost ); } diff --git a/stepmania/src/ScreenGameplay.cpp b/stepmania/src/ScreenGameplay.cpp index db46d68666..394ab46ef0 100644 --- a/stepmania/src/ScreenGameplay.cpp +++ b/stepmania/src/ScreenGameplay.cpp @@ -2145,7 +2145,7 @@ void ScreenGameplay::SongFinished() * not for the percentages (RADAR_AIR). */ RadarValues v; - NoteDataUtil::GetRadarValues( m_Player[p].m_NoteData, GAMESTATE->m_pCurSong->m_fMusicLengthSeconds, v ); + NoteDataUtil::CalculateRadarValues( m_Player[p].m_NoteData, GAMESTATE->m_pCurSong->m_fMusicLengthSeconds, v ); STATSMAN->m_CurStageStats.m_player[p].radarPossible += v; NoteDataWithScoring::GetActualRadarValues( m_Player[p].m_NoteData, p, GAMESTATE->m_pCurSong->m_fMusicLengthSeconds, v ); diff --git a/stepmania/src/Steps.cpp b/stepmania/src/Steps.cpp index 5b8c3953cf..fedbc5653a 100644 --- a/stepmania/src/Steps.cpp +++ b/stepmania/src/Steps.cpp @@ -153,7 +153,7 @@ void Steps::TidyUpData() void Steps::CalculateRadarValues( float fMusicLengthSeconds ) { - m_RadarValues = RadarValues(); + m_CachedRadarValues = RadarValues(); // If we're autogen, don't calculate values. GetRadarValues will take from our parent. if( parent != NULL ) @@ -165,7 +165,7 @@ void Steps::CalculateRadarValues( float fMusicLengthSeconds ) NoteData tempNoteData; this->GetNoteData( tempNoteData ); - NoteDataUtil::GetRadarValues( tempNoteData, fMusicLengthSeconds, m_RadarValues ); + NoteDataUtil::CalculateRadarValues( tempNoteData, fMusicLengthSeconds, m_CachedRadarValues ); } void Steps::Decompress() const @@ -270,7 +270,7 @@ void Steps::DeAutogen() m_sDescription = Real()->m_sDescription; m_Difficulty = Real()->m_Difficulty; m_iMeter = Real()->m_iMeter; - m_RadarValues = Real()->m_RadarValues; + m_CachedRadarValues = Real()->m_CachedRadarValues; parent = NULL; @@ -347,10 +347,10 @@ void Steps::SetMeter(int meter) m_iMeter = meter; } -void Steps::SetRadarValues( const RadarValues& v ) +void Steps::SetCachedRadarValues( const RadarValues& v ) { DeAutogen(); - m_RadarValues = v; + m_CachedRadarValues = v; } diff --git a/stepmania/src/Steps.h b/stepmania/src/Steps.h index 52d3fba9c9..baca3dbfca 100644 --- a/stepmania/src/Steps.h +++ b/stepmania/src/Steps.h @@ -38,7 +38,7 @@ public: Difficulty GetDifficulty() const { return Real()->m_Difficulty; } ProfileSlot GetLoadedFromProfile() const { return m_LoadedFromProfile; } int GetMeter() const { return Real()->m_iMeter; } - const RadarValues& GetRadarValues() const { return Real()->m_RadarValues; } + const RadarValues& GetRadarValues() const { return Real()->m_CachedRadarValues; } void SetFile( CString fn ); void SetSavedToDisk( bool b ) { m_bSavedToDisk = b; } @@ -50,7 +50,7 @@ public: void SetLoadedFromProfile( ProfileSlot slot ) { m_LoadedFromProfile = slot; } void SetMeter(int meter); - void SetRadarValues( const RadarValues& v ); + void SetCachedRadarValues( const RadarValues& v ); bool IsAutogen() const; // Was created by autogen? float PredictMeter() const; @@ -90,7 +90,7 @@ protected: CString m_sDescription; // Step author, edit name, or something meaningful Difficulty m_Difficulty; // difficulty classification int m_iMeter; // difficulty rating from MIN_METER to MAX_METER - RadarValues m_RadarValues; + RadarValues m_CachedRadarValues; }; #endif diff --git a/stepmania/src/Trail.cpp b/stepmania/src/Trail.cpp index 513f7ecf38..23dbb2e7c3 100644 --- a/stepmania/src/Trail.cpp +++ b/stepmania/src/Trail.cpp @@ -75,14 +75,14 @@ RadarValues Trail::GetRadarValues() const NoteData nd; pSteps->GetNoteData( nd ); RadarValues rv_orig; - NoteDataUtil::GetRadarValues( nd, e->pSong->m_fMusicLengthSeconds, rv_orig ); + NoteDataUtil::CalculateRadarValues( nd, e->pSong->m_fMusicLengthSeconds, rv_orig ); PlayerOptions po; po.FromString( e->Modifiers ); if( po.ContainsTransformOrTurn() ) NoteDataUtil::TransformNoteData( nd, po, pSteps->m_StepsType ); NoteDataUtil::TransformNoteData( nd, e->Attacks, pSteps->m_StepsType, e->pSong ); RadarValues transformed_rv; - NoteDataUtil::GetRadarValues( nd, e->pSong->m_fMusicLengthSeconds, transformed_rv ); + NoteDataUtil::CalculateRadarValues( nd, e->pSong->m_fMusicLengthSeconds, transformed_rv ); rv += transformed_rv; } else