move Missed notes iterator into Player instead of reinstantiating the iterator every Update, which causes a lot of searching. Increases multiplayer frame rate by about 40%.
This commit is contained in:
+22
-21
@@ -157,6 +157,7 @@ Player::Player( NoteData &nd, bool bVisible ) : m_NoteData(nd)
|
|||||||
m_pPrimaryScoreKeeper = NULL;
|
m_pPrimaryScoreKeeper = NULL;
|
||||||
m_pSecondaryScoreKeeper = NULL;
|
m_pSecondaryScoreKeeper = NULL;
|
||||||
m_pInventory = NULL;
|
m_pInventory = NULL;
|
||||||
|
m_pIterNotJudged = NULL;
|
||||||
|
|
||||||
m_bPaused = false;
|
m_bPaused = false;
|
||||||
|
|
||||||
@@ -187,6 +188,7 @@ Player::~Player()
|
|||||||
for( unsigned i = 0; i < m_vpHoldJudgment.size(); ++i )
|
for( unsigned i = 0; i < m_vpHoldJudgment.size(); ++i )
|
||||||
SAFE_DELETE( m_vpHoldJudgment[i] );
|
SAFE_DELETE( m_vpHoldJudgment[i] );
|
||||||
SAFE_DELETE( m_pJudgedRows );
|
SAFE_DELETE( m_pJudgedRows );
|
||||||
|
SAFE_DELETE( m_pIterNotJudged );
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 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. */
|
||||||
@@ -373,6 +375,21 @@ void Player::Init(
|
|||||||
*b = false;
|
*b = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool Unjudged( const TapNote &tn )
|
||||||
|
{
|
||||||
|
if( tn.result.tns != TNS_None )
|
||||||
|
return false;
|
||||||
|
switch( tn.type )
|
||||||
|
{
|
||||||
|
case TapNote::tap:
|
||||||
|
case TapNote::hold_head:
|
||||||
|
case TapNote::mine:
|
||||||
|
case TapNote::lift:
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
void Player::Load()
|
void Player::Load()
|
||||||
{
|
{
|
||||||
m_bLoaded = true;
|
m_bLoaded = true;
|
||||||
@@ -495,6 +512,8 @@ void Player::Load()
|
|||||||
|
|
||||||
if( m_pPlayerStageStats )
|
if( m_pPlayerStageStats )
|
||||||
SendComboMessages( m_pPlayerStageStats->m_iCurCombo, m_pPlayerStageStats->m_iCurMissCombo );
|
SendComboMessages( m_pPlayerStageStats->m_iCurCombo, m_pPlayerStageStats->m_iCurMissCombo );
|
||||||
|
|
||||||
|
m_pIterNotJudged = new NoteData::all_tracks_iterator( m_NoteData.GetTapNoteRangeAllTracks(iNoteRow, MAX_NOTE_ROW, Unjudged) );
|
||||||
}
|
}
|
||||||
|
|
||||||
void Player::SendComboMessages( int iOldCombo, int iOldMissCombo )
|
void Player::SendComboMessages( int iOldCombo, int iOldMissCombo )
|
||||||
@@ -618,6 +637,7 @@ void Player::Update( float fDeltaTime )
|
|||||||
//
|
//
|
||||||
UpdateTapNotesMissedOlderThan( GetMaxStepDistanceSeconds() );
|
UpdateTapNotesMissedOlderThan( GetMaxStepDistanceSeconds() );
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// update pressed flag
|
// update pressed flag
|
||||||
//
|
//
|
||||||
@@ -2074,21 +2094,6 @@ done_checking_hopo:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool Unjudged( const TapNote &tn )
|
|
||||||
{
|
|
||||||
if( tn.result.tns != TNS_None )
|
|
||||||
return false;
|
|
||||||
switch( tn.type )
|
|
||||||
{
|
|
||||||
case TapNote::tap:
|
|
||||||
case TapNote::hold_head:
|
|
||||||
case TapNote::mine:
|
|
||||||
case TapNote::lift:
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Player::UpdateTapNotesMissedOlderThan( float fMissIfOlderThanSeconds )
|
void Player::UpdateTapNotesMissedOlderThan( float fMissIfOlderThanSeconds )
|
||||||
{
|
{
|
||||||
//LOG->Trace( "Steps::UpdateTapNotesMissedOlderThan(%f)", fMissIfOlderThanThisBeat );
|
//LOG->Trace( "Steps::UpdateTapNotesMissedOlderThan(%f)", fMissIfOlderThanThisBeat );
|
||||||
@@ -2110,13 +2115,9 @@ void Player::UpdateTapNotesMissedOlderThan( float fMissIfOlderThanSeconds )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NoteData::all_tracks_iterator &iter = *m_pIterNotJudged;
|
||||||
|
|
||||||
// m_iRowLastJudged and m_iMineRowLastJudged have already been judged.
|
for( ; iter.Row() < iMissIfOlderThanThisIndex; ++iter )
|
||||||
const int iStartIndex = min( m_iRowLastJudged, m_iMineRowLastJudged ) + 1;
|
|
||||||
|
|
||||||
NoteData::all_tracks_iterator iter = m_NoteData.GetTapNoteRangeAllTracks( iStartIndex, iMissIfOlderThanThisIndex-1, Unjudged );
|
|
||||||
|
|
||||||
for( ; !iter.IsAtEnd(); ++iter )
|
|
||||||
{
|
{
|
||||||
TapNote &tn = *iter;
|
TapNote &tn = *iter;
|
||||||
|
|
||||||
|
|||||||
@@ -169,6 +169,7 @@ protected:
|
|||||||
|
|
||||||
int m_iFirstUncrossedRow;
|
int m_iFirstUncrossedRow;
|
||||||
int m_iFirstUncrossedMineRow;
|
int m_iFirstUncrossedMineRow;
|
||||||
|
NoteData::all_tracks_iterator *m_pIterNotJudged;
|
||||||
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