diff --git a/stepmania/src/GameConstantsAndTypes.cpp b/stepmania/src/GameConstantsAndTypes.cpp index e213037076..932ce1c0ce 100644 --- a/stepmania/src/GameConstantsAndTypes.cpp +++ b/stepmania/src/GameConstantsAndTypes.cpp @@ -23,6 +23,11 @@ CString CategoryToString( RadarCategory cat ) case RADAR_AIR: return "air"; case RADAR_FREEZE: return "freeze"; case RADAR_CHAOS: return "chaos"; + case RADAR_NUM_TAPS_AND_HOLDS: return "taps"; + case RADAR_NUM_JUMPS: return "jumps"; + case RADAR_NUM_HOLDS: return "holds"; + case RADAR_NUM_MINES: return "mines"; + case RADAR_NUM_HANDS: return "hands"; default: ASSERT(0); return ""; // invalid } } diff --git a/stepmania/src/GameConstantsAndTypes.h b/stepmania/src/GameConstantsAndTypes.h index 44e32d3472..2a1676d541 100644 --- a/stepmania/src/GameConstantsAndTypes.h +++ b/stepmania/src/GameConstantsAndTypes.h @@ -39,13 +39,20 @@ // const int MAX_METER = 12; -enum RadarCategory // starting from 12-o'clock rotating clockwise +/* This is just cached song data. Not all of it may actually be displayed + * in the radar. */ +enum RadarCategory { RADAR_STREAM = 0, RADAR_VOLTAGE, RADAR_AIR, RADAR_FREEZE, RADAR_CHAOS, + RADAR_NUM_TAPS_AND_HOLDS, + RADAR_NUM_JUMPS, + RADAR_NUM_HOLDS, + RADAR_NUM_MINES, + RADAR_NUM_HANDS, NUM_RADAR_CATEGORIES // leave this at the end }; diff --git a/stepmania/src/NoteData.cpp b/stepmania/src/NoteData.cpp index 41b1536b73..a73299d9ce 100644 --- a/stepmania/src/NoteData.cpp +++ b/stepmania/src/NoteData.cpp @@ -321,7 +321,7 @@ int NoteData::GetNumTapNotes( float fStartBeat, float fEndBeat ) const { for( int i=iStartIndex; i<=iEndIndex; i++ ) { - if( GetTapNote(t, i) != TAP_EMPTY ) + if( GetTapNote(t, i) != TAP_EMPTY && GetTapNote(t, i) != TAP_MINE ) iNumNotes++; } } @@ -344,6 +344,24 @@ int NoteData::GetNumRowsWithTap( float fStartBeat, float fEndBeat ) const return iNumNotes; } +int NoteData::GetNumMines( float fStartBeat, float fEndBeat ) const +{ + int iNumMines = 0; + + if(fEndBeat == -1) fEndBeat = GetMaxBeat(); + int iStartIndex = BeatToNoteRow( fStartBeat ); + int iEndIndex = BeatToNoteRow( fEndBeat ); + + for( int t=0; t= 2 ) - iNumDoubles++; + if( iNumNotesThisIndex >= MinTaps ) + iNum++; } - return iNumDoubles; + return iNum; } int NoteData::GetNumHoldNotes( float fStartBeat, float fEndBeat ) const diff --git a/stepmania/src/NoteData.h b/stepmania/src/NoteData.h index 7237934ed6..63f5db6b0d 100644 --- a/stepmania/src/NoteData.h +++ b/stepmania/src/NoteData.h @@ -167,9 +167,12 @@ public: float GetLastBeat() const; // return the beat number of the last note int GetLastRow() const; int GetNumTapNotes( const float fStartBeat = 0, const float fEndBeat = -1 ) const; + int GetNumMines( const float fStartBeat = 0, const float fEndBeat = -1 ) const; int GetNumRowsWithTap( const float fStartBeat = 0, const float fEndBeat = -1 ) const; int GetNumRowsWithTapOrHoldHead( const float fStartBeat = 0, const float fEndBeat = -1 ) const; - int GetNumDoubles( const float fStartBeat = 0, const float fEndBeat = -1 ) const; + int GetNumN( int MinTaps, const float fStartBeat = 0, const float fEndBeat = -1 ) const; + int GetNumDoubles( const float fStartBeat = 0, const float fEndBeat = -1 ) const { return GetNumN( 2, fStartBeat, fEndBeat ); } + int GetNumTriples( const float fStartBeat = 0, const float fEndBeat = -1 ) const { return GetNumN( 3, fStartBeat, fEndBeat ); } /* optimization: for the default of start to end, use the second (faster) */ int GetNumHoldNotes( const float fStartBeat, const float fEndBeat = -1 ) const; int GetNumHoldNotes() const { return m_HoldNotes.size(); } diff --git a/stepmania/src/NoteDataUtil.cpp b/stepmania/src/NoteDataUtil.cpp index ba760bc40e..486db66417 100644 --- a/stepmania/src/NoteDataUtil.cpp +++ b/stepmania/src/NoteDataUtil.cpp @@ -277,6 +277,11 @@ float NoteDataUtil::GetRadarValue( const NoteData &in, RadarCategory rv, float f case RADAR_AIR: return GetAirRadarValue( in, fSongSeconds ); case RADAR_FREEZE: return GetFreezeRadarValue( in, fSongSeconds ); case RADAR_CHAOS: return GetChaosRadarValue( in, fSongSeconds ); + case RADAR_NUM_TAPS_AND_HOLDS: return (float) in.GetNumRowsWithTapOrHoldHead(); + case RADAR_NUM_JUMPS: return (float) in.GetNumDoubles(); // should hands also count as a jump? + case RADAR_NUM_HOLDS: return (float) in.GetNumHoldNotes(); + case RADAR_NUM_MINES: return (float) in.GetNumMines(); + case RADAR_NUM_HANDS: return (float) in.GetNumTriples(); default: ASSERT(0); return 0; } } diff --git a/stepmania/src/NoteDataWithScoring.cpp b/stepmania/src/NoteDataWithScoring.cpp index d885dec232..93b4d91910 100644 --- a/stepmania/src/NoteDataWithScoring.cpp +++ b/stepmania/src/NoteDataWithScoring.cpp @@ -177,6 +177,12 @@ float NoteDataWithScoring::GetActualRadarValue( RadarCategory rv, PlayerNumber p case RADAR_AIR: return GetActualAirRadarValue( fSongSeconds, pn ); break; case RADAR_FREEZE: return GetActualFreezeRadarValue( fSongSeconds, pn ); break; case RADAR_CHAOS: return GetActualChaosRadarValue( fSongSeconds, pn ); break; + /* XXX: TODO */ + case RADAR_NUM_TAPS_AND_HOLDS: return 0; + case RADAR_NUM_JUMPS: return 0; + case RADAR_NUM_HOLDS: return 0; + case RADAR_NUM_MINES: return 0; + case RADAR_NUM_HANDS: return 0; default: ASSERT(0); return 0; } }