diff --git a/stepmania/Themes/default/metrics.ini b/stepmania/Themes/default/metrics.ini index c44c2737e8..17f858ed25 100644 --- a/stepmania/Themes/default/metrics.ini +++ b/stepmania/Themes/default/metrics.ini @@ -2955,6 +2955,7 @@ ShowIcon=0 ShowCursor=0 ShowScroller=0 WrapScroller=0 +LoopScroller=0 ScrollerFastCatchup=0 # All on page 1 by default. NumChoicesOnPage1=999 @@ -3191,6 +3192,7 @@ ShowIcon=0 ShowCursor=0 ShowScroller=0 WrapScroller=0 +LoopScroller=0 ScrollerFastCatchup=0 # All on page 1 by default. NumChoicesOnPage1=999 diff --git a/stepmania/src/ActorScroller.cpp b/stepmania/src/ActorScroller.cpp index 61c203cdb5..5bf16a4527 100644 --- a/stepmania/src/ActorScroller.cpp +++ b/stepmania/src/ActorScroller.cpp @@ -90,7 +90,8 @@ void ActorScroller::Load3( float fNumItemsToDraw, bool bFastCatchup, const CString &sTransformFunction, - bool bUseMask + bool bUseMask, + bool bLoop ) { m_fSecondsPerItem = fSecondsPerItem; @@ -99,6 +100,7 @@ void ActorScroller::Load3( m_exprTransformFunction.SetFromExpression( sTransformFunction ); m_fQuantizePixels = 0; m_bUseMask = bUseMask; + m_bLoop = bLoop; m_bLoaded = true; } @@ -142,6 +144,7 @@ void ActorScroller::LoadFromNode( const CString &sDir, const XNode *pNode ) fNumItemsToDraw, false, sTransformFunction, + false, false ); SetCurrentAndDestinationItem( -fItemPaddingStart ); SetDestinationItem( m_SubActors.size()-1+fItemPaddingEnd ); @@ -260,7 +263,7 @@ void ActorScroller::DrawPrimitives() float fPosition = iItem - m_fCurrentItem; int iIndex = iItem; if( m_bLoop ) - wrap( iIndex, m_SubActors.size()-1 ); + wrap( iIndex, m_SubActors.size() ); else if( iIndex < 0 || iIndex >= (int)m_SubActors.size() ) continue; diff --git a/stepmania/src/ActorScroller.h b/stepmania/src/ActorScroller.h index 526fd33a77..8cd60712c7 100644 --- a/stepmania/src/ActorScroller.h +++ b/stepmania/src/ActorScroller.h @@ -25,10 +25,11 @@ public: float fNumItemsToDraw, bool bFastCatchup, const CString &sTransformFunction, - bool bUseMask ); + bool bUseMask, + bool bLoop ); virtual void UpdateInternal( float fDelta ); - virtual void DrawPrimitives(); // DOES draw + virtual void DrawPrimitives(); // handles drawing and doesn't call ActorFrame::DrawPrimitives void LoadFromNode( const CString &sDir, const XNode *pNode ); virtual Actor *Copy() const; diff --git a/stepmania/src/ScreenCredits.cpp b/stepmania/src/ScreenCredits.cpp index 137d7af2d1..d442cecd36 100644 --- a/stepmania/src/ScreenCredits.cpp +++ b/stepmania/src/ScreenCredits.cpp @@ -179,6 +179,7 @@ ScreenCredits::ScreenCredits( CString sName ) : ScreenAttract( sName ) 4, false, sBackgroundsTransformFunction, + false, false ); SET_XY( m_ScrollerBackgrounds ); this->AddChild( &m_ScrollerBackgrounds ); @@ -189,6 +190,7 @@ ScreenCredits::ScreenCredits( CString sName ) : ScreenAttract( sName ) 4, false, sBackgroundsTransformFunction, + false, false ); SET_XY( m_ScrollerFrames ); this->AddChild( &m_ScrollerFrames ); @@ -239,6 +241,7 @@ ScreenCredits::ScreenCredits( CString sName ) : ScreenAttract( sName ) 40, false, sTextsTransformFunction, + false, false ); SET_XY( m_ScrollerTexts ); this->AddChild( &m_ScrollerTexts ); diff --git a/stepmania/src/ScreenNameEntryTraditional.cpp b/stepmania/src/ScreenNameEntryTraditional.cpp index e55816dd90..2258a0807e 100644 --- a/stepmania/src/ScreenNameEntryTraditional.cpp +++ b/stepmania/src/ScreenNameEntryTraditional.cpp @@ -120,6 +120,7 @@ void HighScoreWheel::Load( const HighScoreList& hsl, int iIndexToFocus ) 10.5, false, sTransformFunction, + false, false ); Scroll(); } diff --git a/stepmania/src/ScreenSelectMaster.cpp b/stepmania/src/ScreenSelectMaster.cpp index e1959b3a0d..0b2fb8de50 100644 --- a/stepmania/src/ScreenSelectMaster.cpp +++ b/stepmania/src/ScreenSelectMaster.cpp @@ -39,6 +39,7 @@ ScreenSelectMaster::ScreenSelectMaster( CString sClassName ) : ScreenSelect( sCl OPTION_ORDER(m_sName,OPTION_ORDER_NAME,NUM_MENU_DIRS), WRAP_CURSOR(m_sName,"WrapCursor"), WRAP_SCROLLER(m_sName,"WrapScroller"), + LOOP_SCROLLER(m_sName,"LoopScroller"), SCROLLER_FAST_CATCHUP(m_sName,"ScrollerFastCatchup"), ALLOW_REPEATING_INPUT(m_sName,"AllowRepeatingInput"), SCROLLER_SECONDS_PER_ITEM(m_sName,"ScrollerSecondsPerItem"), @@ -109,7 +110,8 @@ void ScreenSelectMaster::Init() SCROLLER_NUM_ITEMS_TO_DRAW, SCROLLER_FAST_CATCHUP, SCROLLER_TRANSFORM, - false ); + false, + LOOP_SCROLLER ); m_Scroller[*p].SetName( "Scroller"+PLAYER_APPEND_NO_SPACE(*p) ); this->AddChild( &m_Scroller[*p] ); } diff --git a/stepmania/src/ScreenSelectMaster.h b/stepmania/src/ScreenSelectMaster.h index 8790da9a8c..72b5f2106b 100644 --- a/stepmania/src/ScreenSelectMaster.h +++ b/stepmania/src/ScreenSelectMaster.h @@ -49,6 +49,7 @@ protected: ThemeMetric1D OPTION_ORDER; ThemeMetric WRAP_CURSOR; ThemeMetric WRAP_SCROLLER; + ThemeMetric LOOP_SCROLLER; ThemeMetric SCROLLER_FAST_CATCHUP; ThemeMetric ALLOW_REPEATING_INPUT; ThemeMetric SCROLLER_SECONDS_PER_ITEM;