void ActorScroller::UpdateInternal( float fDeltaTime ) { ActorFrame::UpdateInternal( fDeltaTime ); // If we have no children, the code below will busy loop. if( !m_SubActors.size() ) return; // handle pause if( fDeltaTime > m_fPauseCountdownSeconds ) { fDeltaTime -= m_fPauseCountdownSeconds; m_fPauseCountdownSeconds = 0; } else { m_fPauseCountdownSeconds -= fDeltaTime; fDeltaTime = 0; return; } if( m_fCurrentItem == m_fDestinationItem ) return; // done scrolling float fOldItemAtTop = m_fCurrentItem; if( m_fSecondsPerItem > 0 ) { float fApproachSpeed = fDeltaTime/m_fSecondsPerItem; if( m_bFastCatchup ) { float fDistanceToMove = fabsf(m_fCurrentItem - m_fDestinationItem); if( fDistanceToMove > 1 ) fApproachSpeed *= fDistanceToMove*fDistanceToMove; } fapproach( m_fCurrentItem, m_fDestinationItem, fApproachSpeed ); } // if items changed, then pause if( (int)fOldItemAtTop != (int)m_fCurrentItem ) m_fPauseCountdownSeconds = m_fSecondsPauseBetweenItems; if( m_bLoop ) m_fCurrentItem = fmodf( m_fCurrentItem, (float) m_iNumItems ); }
void PlayerOptions::Approach( const PlayerOptions& other, float fDeltaSeconds ) { #define APPROACH( opt ) \ fapproach( m_ ## opt, other.m_ ## opt, fDeltaSeconds * other.m_Speed ## opt ); #define DO_COPY( x ) \ x = other.x; DO_COPY( m_LifeType ); DO_COPY( m_DrainType ); DO_COPY( m_BatteryLives ); APPROACH( fTimeSpacing ); APPROACH( fScrollSpeed ); APPROACH( fMaxScrollBPM ); fapproach( m_fScrollBPM, other.m_fScrollBPM, fDeltaSeconds * other.m_SpeedfScrollBPM*150 ); for( int i=0; i<NUM_ACCELS; i++ ) APPROACH( fAccels[i] ); for( int i=0; i<NUM_EFFECTS; i++ ) APPROACH( fEffects[i] ); for( int i=0; i<NUM_APPEARANCES; i++ ) APPROACH( fAppearances[i] ); for( int i=0; i<NUM_SCROLLS; i++ ) APPROACH( fScrolls[i] ); APPROACH( fDark ); APPROACH( fBlind ); APPROACH( fCover ); APPROACH( fRandAttack ); APPROACH( fNoAttack ); APPROACH( fPlayerAutoPlay ); APPROACH( fPerspectiveTilt ); APPROACH( fSkew ); APPROACH( fPassmark ); APPROACH( fRandomSpeed ); DO_COPY( m_bSetScrollSpeed ); for( int i=0; i<NUM_TURNS; i++ ) DO_COPY( m_bTurns[i] ); for( int i=0; i<NUM_TRANSFORMS; i++ ) DO_COPY( m_bTransforms[i] ); DO_COPY( m_bMuteOnError ); DO_COPY( m_FailType ); DO_COPY( m_MinTNSToHideNotes ); DO_COPY( m_sNoteSkin ); #undef APPROACH #undef DO_COPY }