diff --git a/stepmania/src/NoteDataWithScoring.cpp b/stepmania/src/NoteDataWithScoring.cpp index dd82d6084c..ab4dc5f155 100644 --- a/stepmania/src/NoteDataWithScoring.cpp +++ b/stepmania/src/NoteDataWithScoring.cpp @@ -11,6 +11,7 @@ */ #include "NoteDataWithScoring.h" +#include "GameState.h" NoteDataWithScoring::NoteDataWithScoring() { @@ -28,35 +29,6 @@ void NoteDataWithScoring::Init() m_fHoldNoteLife.clear(); } -int NoteDataWithScoring::GetMaxCombo() const -{ - int iNumSuccessfulTapNotes = 0; - int fEndBeat = GetMaxBeat()+1; - - unsigned iStartIndex = BeatToNoteRow( (float)0 ); - unsigned iEndIndex = BeatToNoteRow( fEndBeat ); - - int combo = 0; - int maxcombo = 0; - - for( unsigned i=iStartIndex; iGetTapNote(t, i) != TAP_EMPTY ) - if (GetTapNoteScore(t, i) >= TNS_GREAT) - combo++; - else - { - if (combo > maxcombo) maxcombo = combo; - combo = 0; - } - } - } - - return max(combo, maxcombo); -} - int NoteDataWithScoring::GetNumTapNotesWithScore( TapNoteScore tns, const float fStartBeat, float fEndBeat ) const { int iNumSuccessfulTapNotes = 0; @@ -89,7 +61,7 @@ int NoteDataWithScoring::GetNumDoublesWithScore( TapNoteScore tns, const float f unsigned iStartIndex = BeatToNoteRow( fStartBeat ); unsigned iEndIndex = BeatToNoteRow( fEndBeat ); - for( unsigned i=iStartIndex; i(iEndIndex), static_cast(m_TapNoteScores[0].size())); i++ ) + for( unsigned i=iStartIndex; im_CurStageStats.iMaxCombo[pn]; + int TotalSteps = GetNumTapNotes(); return min( (float)MaxCombo/TotalSteps, 1.0f); } -float NoteDataWithScoring::GetActualVoltageRadarValue( float fSongSeconds ) const +float NoteDataWithScoring::GetActualVoltageRadarValue( float fSongSeconds, PlayerNumber pn ) const { // voltage is essentialy perfects divided by # of steps - float totalnotes = GetNumTapNotes(); - float perfects = GetNumTapNotesWithScore(TNS_PERFECT) + GetNumTapNotesWithScore(TNS_MARVELOUS); + int totalnotes = GetNumTapNotes(); + int perfects = GetNumTapNotesWithScore(TNS_PERFECT) + GetNumTapNotesWithScore(TNS_MARVELOUS); - float result = perfects/totalnotes; + float result = float(perfects)/totalnotes; return result; /* float fAvgBPS = GetLastBeat() / fSongSeconds; @@ -243,7 +215,7 @@ float NoteDataWithScoring::GetActualVoltageRadarValue( float fSongSeconds ) cons */ } -float NoteDataWithScoring::GetActualAirRadarValue( float fSongSeconds ) const +float NoteDataWithScoring::GetActualAirRadarValue( float fSongSeconds, PlayerNumber pn ) const { // number of doubles int iNumDoubles = @@ -258,7 +230,7 @@ float NoteDataWithScoring::GetActualAirRadarValue( float fSongSeconds ) const return min( fReturn, 1.0f ); } -float NoteDataWithScoring::GetActualChaosRadarValue( float fSongSeconds ) const +float NoteDataWithScoring::GetActualChaosRadarValue( float fSongSeconds, PlayerNumber pn ) const { /* // count number of triplets int iNumChaosNotesCompleted = 0; @@ -272,32 +244,15 @@ float NoteDataWithScoring::GetActualChaosRadarValue( float fSongSeconds ) const return min( fReturn, 1.0f ); */ - float marvelous = GetNumTapNotesWithScore(TNS_MARVELOUS); - float perfect = GetNumTapNotesWithScore(TNS_PERFECT); - float great = GetNumTapNotesWithScore(TNS_GREAT); - float good = GetNumTapNotesWithScore(TNS_GOOD); - float boo = GetNumTapNotesWithScore(TNS_BOO); - float miss = GetNumTapNotesWithScore(TNS_MISS); + int PossibleDP = GAMESTATE->m_CurStageStats.iPossibleDancePoints[pn]; + int ActualDP = GAMESTATE->m_CurStageStats.iActualDancePoints[pn]; - float ok = GetNumHoldNotesWithScore(HNS_OK); - float holdnotes = GetNumHoldNotes(); + float fResult = float(ActualDP)/PossibleDP; - float DPEarned = 2 * (marvelous + perfect) - + (great) - - 4 * (boo) - - 8 * (miss) - + 6 * (ok); - - float TotalDP = 2 * (marvelous + perfect + great - + good + boo + miss) - + 6 * holdnotes; - - float fResult = DPEarned/TotalDP; - - return min( fResult, 1.0f); + return min( fResult, 1.0f ); } -float NoteDataWithScoring::GetActualFreezeRadarValue( float fSongSeconds ) const +float NoteDataWithScoring::GetActualFreezeRadarValue( float fSongSeconds, PlayerNumber pn ) const { // number of hold steps float totalsteps = (float)GetNumHoldNotes(); diff --git a/stepmania/src/NoteDataWithScoring.h b/stepmania/src/NoteDataWithScoring.h index 16ac0bee08..365858a801 100644 --- a/stepmania/src/NoteDataWithScoring.h +++ b/stepmania/src/NoteDataWithScoring.h @@ -13,6 +13,7 @@ #include "GameConstantsAndTypes.h" #include "NoteData.h" +#include "PlayerNumber.h" class NoteDataWithScoring : public NoteData { @@ -54,14 +55,14 @@ public: int LastTapNoteScoreTrack(unsigned row) const; TapNoteScore LastTapNoteScore(unsigned row) const; - float GetActualRadarValue( RadarCategory rv, float fSongSeconds ) const; - float GetActualStreamRadarValue( float fSongSeconds ) const; - float GetActualVoltageRadarValue( float fSongSeconds ) const; - float GetActualAirRadarValue( float fSongSeconds ) const; - float GetActualFreezeRadarValue( float fSongSeconds ) const; - float GetActualChaosRadarValue( float fSongSeconds ) const; + float GetActualRadarValue( RadarCategory rv, PlayerNumber pn, float fSongSeconds ) const; - int GetMaxCombo() const; // used for groove radar calculations +private: + float GetActualStreamRadarValue( float fSongSeconds, PlayerNumber pn ) const; + float GetActualVoltageRadarValue( float fSongSeconds, PlayerNumber pn ) const; + float GetActualAirRadarValue( float fSongSeconds, PlayerNumber pn ) const; + float GetActualFreezeRadarValue( float fSongSeconds, PlayerNumber pn ) const; + float GetActualChaosRadarValue( float fSongSeconds, PlayerNumber pn ) const; }; #endif diff --git a/stepmania/src/ScreenGameplay.cpp b/stepmania/src/ScreenGameplay.cpp index 001a1cbce7..4b54b74f79 100644 --- a/stepmania/src/ScreenGameplay.cpp +++ b/stepmania/src/ScreenGameplay.cpp @@ -1514,7 +1514,7 @@ void ScreenGameplay::HandleScreenMessage( const ScreenMessage SM ) { RadarCategory rc = (RadarCategory)r; GAMESTATE->m_CurStageStats.fRadarPossible[p][r] = NoteDataUtil::GetRadarValue( m_Player[p], rc, GAMESTATE->m_pCurSong->m_fMusicLengthSeconds ); - GAMESTATE->m_CurStageStats.fRadarActual[p][r] = m_Player[p].GetActualRadarValue( rc, GAMESTATE->m_pCurSong->m_fMusicLengthSeconds ); + GAMESTATE->m_CurStageStats.fRadarActual[p][r] = m_Player[p].GetActualRadarValue( rc, (PlayerNumber)p, GAMESTATE->m_pCurSong->m_fMusicLengthSeconds ); } } }