diff --git a/stepmania/src/WheelBase.cpp b/stepmania/src/WheelBase.cpp index 4461c7893e..dad500e63b 100644 --- a/stepmania/src/WheelBase.cpp +++ b/stepmania/src/WheelBase.cpp @@ -1,7 +1,6 @@ #include "global.h" #include "WheelBase.h" #include "RageUtil.h" -#include "SongManager.h" #include "GameManager.h" #include "PrefsManager.h" #include "ScreenManager.h" // for sending SM_PlayMusicSample @@ -10,23 +9,13 @@ #include "GameState.h" #include "RageMath.h" #include "ThemeManager.h" -#include "song.h" -#include "Course.h" -#include "RageDisplay.h" #include "RageTextureManager.h" -#include "Banner.h" -#include "Steps.h" -#include "UnlockManager.h" #include "GameCommand.h" #include "ActorUtil.h" -#include "SongUtil.h" -#include "CourseUtil.h" #include "Foreach.h" #include "Style.h" #include "ThemeMetric.h" -#include "PlayerState.h" #include "ScreenDimensions.h" -#include "RageUtil.h" #define NUM_WHEEL_ITEMS ((int)ceil(NUM_WHEEL_ITEMS_TO_DRAW+2)) @@ -56,37 +45,10 @@ WheelBase::~WheelBase() void WheelBase::Load( CString sType ) { - m_isEmpty = true; - LOG->Trace( "MusicWheel::Load('%s')", sType.c_str() ); + LOG->Trace( "WheelBase::Load('%s')", sType.c_str() ); - SWITCH_SECONDS .Load(sType,"SwitchSeconds"); - ROULETTE_SWITCH_SECONDS .Load(sType,"RouletteSwitchSeconds"); - ROULETTE_SLOW_DOWN_SWITCHES .Load(sType,"RouletteSlowDownSwitches"); - LOCKED_INITIAL_VELOCITY .Load(sType,"LockedInitialVelocity"); - SCROLL_BAR_X .Load(sType,"ScrollBarX"); - SCROLL_BAR_HEIGHT .Load(sType,"ScrollBarHeight"); - ITEM_CURVE_X .Load(sType,"ItemCurveX"); - USE_LINEAR_WHEEL .Load(sType,"NoCurving"); - ITEM_SPACING_Y .Load(sType,"ItemSpacingY"); - WHEEL_3D_RADIUS .Load(sType,"Wheel3DRadius"); - CIRCLE_PERCENT .Load(sType,"CirclePercent"); - NUM_SECTION_COLORS .Load(sType,"NumSectionColors"); - SONG_REAL_EXTRA_COLOR .Load(sType,"SongRealExtraColor"); - SORT_MENU_COLOR .Load(sType,"SortMenuColor"); - SHOW_ROULETTE .Load(sType,"ShowRoulette"); - SHOW_RANDOM .Load(sType,"ShowRandom"); - SHOW_PORTAL .Load(sType,"ShowPortal"); - USE_3D .Load(sType,"Use3D"); - NUM_WHEEL_ITEMS_TO_DRAW .Load(sType,"NumWheelItems"); - MOST_PLAYED_SONGS_TO_SHOW .Load(sType,"MostPlayedSongsToShow"); - MODE_MENU_CHOICE_NAMES .Load(sType,"ModeMenuChoiceNames"); - vector vsModeChoiceNames; - split( MODE_MENU_CHOICE_NAMES, ",", vsModeChoiceNames ); - CHOICE .Load(sType,CHOICE_NAME,vsModeChoiceNames); - WHEEL_ITEM_ON_DELAY_CENTER .Load(sType,"WheelItemOnDelayCenter"); - WHEEL_ITEM_ON_DELAY_OFFSET .Load(sType,"WheelItemOnDelayOffset"); - WHEEL_ITEM_OFF_DELAY_CENTER .Load(sType,"WheelItemOffDelayCenter"); - WHEEL_ITEM_OFF_DELAY_OFFSET .Load(sType,"WheelItemOffDelayOffset"); + LoadFromMetrics( sType ); + LoadVariables(); // SECTION_COLORS .Load(sType,SECTION_COLORS_NAME,NUM_SECTION_COLORS); FOREACH( WheelItemBase*, m_WheelBaseItems, i ) @@ -97,7 +59,32 @@ void WheelBase::Load( CString sType ) m_WheelBaseItems.push_back( new WheelItemBase ); } - m_LastSelection = NULL; + m_WheelState = STATE_SELECTING_GENERIC; + + BuildWheelItemsData(m_WheelBaseItemsData); + RebuildWheelItems(); +} + +void WheelBase::LoadFromMetrics( CString sType ) { + + SWITCH_SECONDS .Load(sType,"SwitchSeconds"); + LOCKED_INITIAL_VELOCITY .Load(sType,"LockedInitialVelocity"); + SCROLL_BAR_X .Load(sType,"ScrollBarX"); + SCROLL_BAR_HEIGHT .Load(sType,"ScrollBarHeight"); + ITEM_CURVE_X .Load(sType,"ItemCurveX"); + USE_LINEAR_WHEEL .Load(sType,"NoCurving"); + ITEM_SPACING_Y .Load(sType,"ItemSpacingY"); + WHEEL_3D_RADIUS .Load(sType,"Wheel3DRadius"); + CIRCLE_PERCENT .Load(sType,"CirclePercent"); + USE_3D .Load(sType,"Use3D"); + NUM_WHEEL_ITEMS_TO_DRAW .Load(sType,"NumWheelItems"); + WHEEL_ITEM_ON_DELAY_CENTER .Load(sType,"WheelItemOnDelayCenter"); + WHEEL_ITEM_ON_DELAY_OFFSET .Load(sType,"WheelItemOnDelayOffset"); + WHEEL_ITEM_OFF_DELAY_CENTER .Load(sType,"WheelItemOffDelayCenter"); + WHEEL_ITEM_OFF_DELAY_OFFSET .Load(sType,"WheelItemOffDelayOffset"); + + m_soundChangeMusic.Load( THEME->GetPathS(sType,"change"), true ); + m_soundLocked.Load( THEME->GetPathS(sType,"locked"), true ); m_sprHighlight.Load( THEME->GetPathG(sType,"highlight") ); m_sprHighlight->SetName( "Highlight" ); @@ -107,21 +94,16 @@ void WheelBase::Load( CString sType ) m_ScrollBar.SetX( SCROLL_BAR_X ); m_ScrollBar.SetBarHeight( SCROLL_BAR_HEIGHT ); this->AddChild( &m_ScrollBar ); +} - m_soundChangeMusic.Load( THEME->GetPathS(sType,"change"), true ); - m_soundLocked.Load( THEME->GetPathS(sType,"locked"), true ); - +void WheelBase::LoadVariables() { + m_isEmpty = true; + m_LastSelection = NULL; m_iSelection = 0; - - m_WheelState = STATE_SELECTING_GENERIC; m_fTimeLeftInState = 0; m_fPositionOffsetFromSelection = 0; - m_iSwitchesLeftInSpinDown = 0; m_Moving = 0; - - BuildWheelItemsData(m_WheelBaseItemsData); - RebuildWheelItems(); } void WheelBase::GetItemPosition( float fPosOffsetsFromMiddle, float& fX_out, float& fY_out, float& fZ_out, float& fRotationX_out ) @@ -267,7 +249,9 @@ void WheelBase::Update( float fDeltaTime ) { m_WheelBaseItems[i]->Update( fDeltaTime ); } - +/* + //Moved to CommonUpdateProcedure, seems to work fine + //Revert if it happens to break something UpdateScrollbar(); if( m_Moving ) @@ -275,7 +259,7 @@ void WheelBase::Update( float fDeltaTime ) m_TimeBeforeMovingBegins -= fDeltaTime; m_TimeBeforeMovingBegins = max(m_TimeBeforeMovingBegins, 0); } - +*/ // update wheel state m_fTimeLeftInState -= fDeltaTime; if( m_fTimeLeftInState <= 0 ) // time to go to a new state @@ -312,6 +296,21 @@ void WheelBase::Update( float fDeltaTime ) } } + CommonUpdateProcedure(fDeltaTime); +} + +void WheelBase::CommonUpdateProcedure(float fDeltaTime) { + + //This bit of code now happens after it's normal execution, but it seems to work fine. + UpdateScrollbar(); + + if( m_Moving ) + { + m_TimeBeforeMovingBegins -= fDeltaTime; + m_TimeBeforeMovingBegins = max(m_TimeBeforeMovingBegins, 0); + } + + //The following code is just fine here. if( m_WheelState == STATE_LOCKED ) { /* Do this in at most .1 sec chunks, so we don't get weird if we @@ -402,7 +401,7 @@ bool WheelBase::Select() // return true if this selection ends the screen case TYPE_GENERIC: m_LastSelection = m_WheelBaseItemsData[m_iSelection]; return false; - case TYPE_GROUP: + case TYPE_SECTION: { CString sThisItemSectionName = m_WheelBaseItemsData[m_iSelection]->m_sText; if( m_sExpandedSectionName == sThisItemSectionName ) // already expanded @@ -558,7 +557,7 @@ void WheelBase::Move(int n) /* Make sure the user always gets an SM_SongChanged when * Moving() is 0, so the final banner, etc. always gets set. */ - SCREENMAN->PostMessageToTopScreen( SM_SongChanged, 0 ); +// SCREENMAN->PostMessageToTopScreen( SM_SongChanged, 0 ); } m_TimeBeforeMovingBegins = 1/4.0f; @@ -600,7 +599,7 @@ void WheelBase::ChangeMusic(int dist) m_fPositionOffsetFromSelection += dist; - SCREENMAN->PostMessageToTopScreen( SM_SongChanged, 0 ); +// SCREENMAN->PostMessageToTopScreen( SM_SongChanged, 0 ); /* If we're moving automatically, don't play this; it'll be called in Update. */ if(!IsMoving()) diff --git a/stepmania/src/WheelBase.h b/stepmania/src/WheelBase.h index ac41130bda..a623bdf8c8 100644 --- a/stepmania/src/WheelBase.h +++ b/stepmania/src/WheelBase.h @@ -6,17 +6,14 @@ #include "AutoActor.h" #include "ActorFrame.h" #include "RageSound.h" -#include "RandomSample.h" #include "GameConstantsAndTypes.h" -#include "MusicSortDisplay.h" #include "ScreenMessage.h" -#include "ScoreDisplayNormal.h" #include "ScrollBar.h" #include "RageTimer.h" #include "WheelItemBase.h" #include "ThemeMetric.h" -AutoScreenMessage( SM_SongChanged ); // TODO: Replace this with a Message and MESSAGEMAN +//AutoScreenMessage( SM_SongChanged ); // TODO: Replace this with a Message and MESSAGEMAN //struct CompareSongPointerArrayBySectionName; @@ -37,7 +34,7 @@ public: virtual void TweenOffScreen() { TweenOffScreen(false); } void Move(int n); - void ChangeMusic(int dist); /* +1 or -1 */ + virtual void ChangeMusic(int dist); /* +1 or -1 */ /* Return true if we're moving fast automatically. */ int IsMoving() const; @@ -56,6 +53,10 @@ public: WheelItemBaseData* LastSelected(); protected: + virtual void LoadFromMetrics( CString sType ); + void LoadVariables(); + void CommonUpdateProcedure(float fDeltaTime); + virtual void BuildWheelItemsData( vector &arrayWheelItemDatas ); // bool SelectModeMenuItem(); int FirstVisibleIndex(); @@ -81,11 +82,15 @@ protected: float m_SpinSpeed; enum WheelState { STATE_SELECTING_GENERIC, + STATE_SELECTING_MUSIC, STATE_FLYING_OFF_BEFORE_NEXT_SORT, STATE_FLYING_ON_AFTER_NEXT_SORT, STATE_TWEENING_ON_SCREEN, STATE_TWEENING_OFF_SCREEN, STATE_WAITING_OFF_SCREEN, + STATE_ROULETTE_SPINNING, + STATE_ROULETTE_SLOWING_DOWN, + STATE_RANDOM_SPINNING, STATE_LOCKED, }; WheelState m_WheelState; @@ -100,8 +105,6 @@ protected: void UpdateScrollbar(); ThemeMetric SWITCH_SECONDS; - ThemeMetric ROULETTE_SWITCH_SECONDS; - ThemeMetric ROULETTE_SLOW_DOWN_SWITCHES; ThemeMetric LOCKED_INITIAL_VELOCITY; ThemeMetric SCROLL_BAR_X; ThemeMetric SCROLL_BAR_HEIGHT; @@ -110,17 +113,8 @@ protected: ThemeMetric ITEM_SPACING_Y; ThemeMetric WHEEL_3D_RADIUS; ThemeMetric CIRCLE_PERCENT; - ThemeMetric NUM_SECTION_COLORS; - ThemeMetric SONG_REAL_EXTRA_COLOR; - ThemeMetric SORT_MENU_COLOR; - ThemeMetric SHOW_ROULETTE; - ThemeMetric SHOW_RANDOM; - ThemeMetric SHOW_PORTAL; ThemeMetric USE_3D; ThemeMetric NUM_WHEEL_ITEMS_TO_DRAW; - ThemeMetric MOST_PLAYED_SONGS_TO_SHOW; - ThemeMetric MODE_MENU_CHOICE_NAMES; - ThemeMetricMap CHOICE; ThemeMetric WHEEL_ITEM_ON_DELAY_CENTER; ThemeMetric WHEEL_ITEM_ON_DELAY_OFFSET; ThemeMetric WHEEL_ITEM_OFF_DELAY_CENTER;