optimize CrossedRows (8-11 fps => 10-13 in multiplayer)
This commit is contained in:
+32
-28
@@ -158,6 +158,7 @@ Player::Player( NoteData &nd, bool bVisible ) : m_NoteData(nd)
|
|||||||
m_pSecondaryScoreKeeper = NULL;
|
m_pSecondaryScoreKeeper = NULL;
|
||||||
m_pInventory = NULL;
|
m_pInventory = NULL;
|
||||||
m_pIterNotJudged = NULL;
|
m_pIterNotJudged = NULL;
|
||||||
|
m_pIterUncrossedRows = NULL;
|
||||||
|
|
||||||
m_bPaused = false;
|
m_bPaused = false;
|
||||||
|
|
||||||
@@ -189,6 +190,7 @@ Player::~Player()
|
|||||||
SAFE_DELETE( m_vpHoldJudgment[i] );
|
SAFE_DELETE( m_vpHoldJudgment[i] );
|
||||||
SAFE_DELETE( m_pJudgedRows );
|
SAFE_DELETE( m_pJudgedRows );
|
||||||
SAFE_DELETE( m_pIterNotJudged );
|
SAFE_DELETE( m_pIterNotJudged );
|
||||||
|
SAFE_DELETE( m_pIterUncrossedRows );
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Init() does the expensive stuff: load sounds and note skins. Load() just loads a NoteData. */
|
/* Init() does the expensive stuff: load sounds and note skins. Load() just loads a NoteData. */
|
||||||
@@ -515,6 +517,9 @@ void Player::Load()
|
|||||||
|
|
||||||
SAFE_DELETE( m_pIterNotJudged );
|
SAFE_DELETE( m_pIterNotJudged );
|
||||||
m_pIterNotJudged = new NoteData::all_tracks_iterator( m_NoteData.GetTapNoteRangeAllTracks(iNoteRow, MAX_NOTE_ROW, NotJudged) );
|
m_pIterNotJudged = new NoteData::all_tracks_iterator( m_NoteData.GetTapNoteRangeAllTracks(iNoteRow, MAX_NOTE_ROW, NotJudged) );
|
||||||
|
|
||||||
|
SAFE_DELETE( m_pIterUncrossedRows );
|
||||||
|
m_pIterUncrossedRows = new NoteData::all_tracks_iterator( m_NoteData.GetTapNoteRangeAllTracks(iNoteRow, MAX_NOTE_ROW, NotJudged) );
|
||||||
}
|
}
|
||||||
|
|
||||||
void Player::SendComboMessages( int iOldCombo, int iOldMissCombo )
|
void Player::SendComboMessages( int iOldCombo, int iOldMissCombo )
|
||||||
@@ -691,6 +696,7 @@ void Player::Update( float fDeltaTime )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// update HoldNotes logic
|
// update HoldNotes logic
|
||||||
//
|
//
|
||||||
@@ -2266,38 +2272,37 @@ void Player::CrossedRows( int iFirstRowCrossed, int iLastRowCrossed, const RageT
|
|||||||
{
|
{
|
||||||
//LOG->Trace( "Player::CrossedRows %d %d", iFirstRowCrossed, iLastRowCrossed );
|
//LOG->Trace( "Player::CrossedRows %d %d", iFirstRowCrossed, iLastRowCrossed );
|
||||||
|
|
||||||
/* Apply InitialHoldLife. */
|
NoteData::all_tracks_iterator &iter = *m_pIterUncrossedRows;
|
||||||
|
int iLastSeenRow = -1;
|
||||||
|
for( ; !iter.IsAtEnd() && iter.Row() <= iLastRowCrossed; iter++ )
|
||||||
{
|
{
|
||||||
NoteData::all_tracks_iterator iter = m_NoteData.GetTapNoteRangeAllTracks( iFirstRowCrossed, iLastRowCrossed+1, NULL, false );
|
/* Apply InitialHoldLife. */
|
||||||
for( ; !iter.IsAtEnd(); ++iter )
|
TapNote &tn = *iter;
|
||||||
{
|
int iRow = iter.Row();
|
||||||
TapNote &tn = *iter;
|
int iTrack = iter.Track();
|
||||||
if( tn.type == TapNote::hold_head )
|
if( tn.type == TapNote::hold_head )
|
||||||
tn.HoldResult.fLife = INITIAL_HOLD_LIFE;
|
tn.HoldResult.fLife = INITIAL_HOLD_LIFE;
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// for each index we crossed since the last update
|
if( iRow != iLastSeenRow )
|
||||||
FOREACH_NONEMPTY_ROW_ALL_TRACKS_RANGE( m_NoteData, r, m_iFirstUncrossedRow, iLastRowCrossed+1 )
|
|
||||||
{
|
|
||||||
// If we're doing random vanish, randomise notes on the fly.
|
|
||||||
if( m_pPlayerState->m_PlayerOptions.GetCurrent().m_fAppearances[PlayerOptions::APPEARANCE_RANDOMVANISH]==1 )
|
|
||||||
RandomizeNotes( r );
|
|
||||||
|
|
||||||
// check to see if there's a note at the crossed row
|
|
||||||
if( m_pPlayerState->m_PlayerController == PC_HUMAN )
|
|
||||||
continue;
|
|
||||||
for( int t=0; t<m_NoteData.GetNumTracks(); t++ )
|
|
||||||
{
|
{
|
||||||
const TapNote &tn = m_NoteData.GetTapNote( t, r );
|
// crossed a not-empty row
|
||||||
if( tn.type != TapNote::empty && tn.result.tns == TNS_None )
|
|
||||||
|
// If we're doing random vanish, randomise notes on the fly.
|
||||||
|
if( m_pPlayerState->m_PlayerOptions.GetCurrent().m_fAppearances[PlayerOptions::APPEARANCE_RANDOMVANISH]==1 )
|
||||||
|
RandomizeNotes( iRow );
|
||||||
|
|
||||||
|
// check to see if there's a note at the crossed row
|
||||||
|
if( m_pPlayerState->m_PlayerController != PC_HUMAN )
|
||||||
{
|
{
|
||||||
Step( t, r, now, false, false );
|
if( tn.type != TapNote::empty && tn.result.tns == TNS_None )
|
||||||
if( m_pPlayerState->m_PlayerController == PC_AUTOPLAY )
|
|
||||||
{
|
{
|
||||||
STATSMAN->m_CurStageStats.m_bUsedAutoplay = true;
|
Step( iTrack, iRow, now, false, false );
|
||||||
if( m_pPlayerStageStats )
|
if( m_pPlayerState->m_PlayerController == PC_AUTOPLAY )
|
||||||
m_pPlayerStageStats->m_bDisqualified = true;
|
{
|
||||||
|
STATSMAN->m_CurStageStats.m_bUsedAutoplay = true;
|
||||||
|
if( m_pPlayerStageStats )
|
||||||
|
m_pPlayerStageStats->m_bDisqualified = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2307,7 +2312,6 @@ void Player::CrossedRows( int iFirstRowCrossed, int iLastRowCrossed, const RageT
|
|||||||
//
|
//
|
||||||
// Update hold checkpoints
|
// Update hold checkpoints
|
||||||
//
|
//
|
||||||
|
|
||||||
if( HOLD_CHECKPOINTS )
|
if( HOLD_CHECKPOINTS )
|
||||||
{
|
{
|
||||||
const int CHECKPOINT_FREQUENCY_ROWS = ROWS_PER_BEAT/2;
|
const int CHECKPOINT_FREQUENCY_ROWS = ROWS_PER_BEAT/2;
|
||||||
|
|||||||
@@ -170,6 +170,7 @@ protected:
|
|||||||
int m_iFirstUncrossedRow;
|
int m_iFirstUncrossedRow;
|
||||||
int m_iFirstUncrossedMineRow;
|
int m_iFirstUncrossedMineRow;
|
||||||
NoteData::all_tracks_iterator *m_pIterNotJudged;
|
NoteData::all_tracks_iterator *m_pIterNotJudged;
|
||||||
|
NoteData::all_tracks_iterator *m_pIterUncrossedRows;
|
||||||
int m_iRowLastJudged; // Everything up to and including this row has been judged.
|
int m_iRowLastJudged; // Everything up to and including this row has been judged.
|
||||||
int m_iMineRowLastJudged;
|
int m_iMineRowLastJudged;
|
||||||
int m_iLastSeenCombo;
|
int m_iLastSeenCombo;
|
||||||
|
|||||||
Reference in New Issue
Block a user