add several cached note data values
This commit is contained in:
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
};
|
||||
|
||||
|
||||
@@ -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<m_iNumTracks; t++ )
|
||||
{
|
||||
for( int i=iStartIndex; i<=iEndIndex; i++ )
|
||||
if( GetTapNote(t, i) == TAP_MINE )
|
||||
iNumMines++;
|
||||
}
|
||||
|
||||
return iNumMines;
|
||||
}
|
||||
|
||||
int NoteData::GetNumRowsWithTapOrHoldHead( float fStartBeat, float fEndBeat ) const
|
||||
{
|
||||
int iNumNotes = 0;
|
||||
@@ -359,27 +377,30 @@ int NoteData::GetNumRowsWithTapOrHoldHead( float fStartBeat, float fEndBeat ) co
|
||||
return iNumNotes;
|
||||
}
|
||||
|
||||
int NoteData::GetNumDoubles( float fStartBeat, float fEndBeat ) const
|
||||
int NoteData::GetNumN( int MinTaps, float fStartBeat, float fEndBeat ) const
|
||||
{
|
||||
int iNumDoubles = 0;
|
||||
if( fEndBeat == -1 )
|
||||
fEndBeat = GetMaxBeat();
|
||||
|
||||
if(fEndBeat == -1) fEndBeat = GetMaxBeat();
|
||||
int iStartIndex = BeatToNoteRow( fStartBeat );
|
||||
int iEndIndex = BeatToNoteRow( fEndBeat );
|
||||
const int iStartIndex = BeatToNoteRow( fStartBeat );
|
||||
const int iEndIndex = BeatToNoteRow( fEndBeat );
|
||||
|
||||
int iNum = 0;
|
||||
for( int i=iStartIndex; i<=iEndIndex; i++ )
|
||||
{
|
||||
int iNumNotesThisIndex = 0;
|
||||
for( int t=0; t<m_iNumTracks; t++ )
|
||||
{
|
||||
if( GetTapNote(t, i) == TAP_MINE )
|
||||
continue; // mines don't count
|
||||
if( GetTapNote(t, i) != TAP_EMPTY )
|
||||
iNumNotesThisIndex++;
|
||||
}
|
||||
if( iNumNotesThisIndex >= 2 )
|
||||
iNumDoubles++;
|
||||
if( iNumNotesThisIndex >= MinTaps )
|
||||
iNum++;
|
||||
}
|
||||
|
||||
return iNumDoubles;
|
||||
return iNum;
|
||||
}
|
||||
|
||||
int NoteData::GetNumHoldNotes( float fStartBeat, float fEndBeat ) const
|
||||
|
||||
@@ -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(); }
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user