From 4ac1e0ee459bcd5a07b5b69c9c21ea2522bdacba Mon Sep 17 00:00:00 2001 From: Chris Danford Date: Mon, 26 Apr 2004 06:47:03 +0000 Subject: [PATCH] move Random "don't lock after choose" logic to a separate wheel item, "LEAP" --- stepmania/Themes/default/metrics.ini | 1 + stepmania/src/Banner.cpp | 12 ++++- stepmania/src/Banner.h | 1 + stepmania/src/FadingBanner.cpp | 6 +++ stepmania/src/FadingBanner.h | 1 + stepmania/src/MusicWheel.cpp | 79 +++++++++++++++------------- stepmania/src/MusicWheel.h | 1 + stepmania/src/MusicWheelItem.cpp | 15 +++++- stepmania/src/MusicWheelItem.h | 2 +- stepmania/src/PrefsManager.cpp | 3 -- stepmania/src/PrefsManager.h | 1 - stepmania/src/ScreenSelectMusic.cpp | 5 ++ 12 files changed, 82 insertions(+), 45 deletions(-) diff --git a/stepmania/Themes/default/metrics.ini b/stepmania/Themes/default/metrics.ini index 6359079a42..46266924a2 100644 --- a/stepmania/Themes/default/metrics.ini +++ b/stepmania/Themes/default/metrics.ini @@ -2732,6 +2732,7 @@ SongRealExtraColor=0.9,0.9,0,1 // yellow SortMenuColor=1,1,0,1 ShowRoulette=1 ShowRandom=1 +ShowLeap=0 Use3D=0 Wheel3DRadius=200 # Possibly safe defaults? CirclePercent=0.5 diff --git a/stepmania/src/Banner.cpp b/stepmania/src/Banner.cpp index e4541b5338..7bfbb69b51 100644 --- a/stepmania/src/Banner.cpp +++ b/stepmania/src/Banner.cpp @@ -20,13 +20,15 @@ #include "Course.h" #include "Character.h" -CachedThemeMetricB SCROLL_RANDOM ("Banner","ScrollRandom"); -CachedThemeMetricB SCROLL_ROULETTE ("Banner","ScrollRoulette"); +CachedThemeMetricB SCROLL_RANDOM ("Banner","ScrollRandom"); +CachedThemeMetricB SCROLL_ROULETTE ("Banner","ScrollRoulette"); +CachedThemeMetricB SCROLL_LEAP ("Banner","ScrollLeap"); Banner::Banner() { SCROLL_RANDOM.Refresh(); SCROLL_ROULETTE.Refresh(); + SCROLL_LEAP.Refresh(); m_bScrolling = false; m_fPercentScrolling = 0; @@ -176,3 +178,9 @@ void Banner::LoadRandom() Load( THEME->GetPathToG("Banner random") ); m_bScrolling = (bool)SCROLL_ROULETTE; } + +void Banner::LoadLeap() +{ + Load( THEME->GetPathToG("Banner leap") ); + m_bScrolling = (bool)SCROLL_LEAP; +} diff --git a/stepmania/src/Banner.h b/stepmania/src/Banner.h index 47ccd029d9..1bf2ffeae5 100644 --- a/stepmania/src/Banner.h +++ b/stepmania/src/Banner.h @@ -38,6 +38,7 @@ public: void LoadTABreakFromCharacter( Character* pCharacter ); void LoadRoulette(); void LoadRandom(); + void LoadLeap(); void LoadFallback(); void SetScrolling( bool bScroll, float Percent = 0); diff --git a/stepmania/src/FadingBanner.cpp b/stepmania/src/FadingBanner.cpp index 8f0914beec..be0dbbadaa 100644 --- a/stepmania/src/FadingBanner.cpp +++ b/stepmania/src/FadingBanner.cpp @@ -200,6 +200,12 @@ void FadingBanner::LoadRandom() m_Banner[GetBackIndex()].LoadRandom(); } +void FadingBanner::LoadLeap() +{ + BeforeChange(); + m_Banner[GetBackIndex()].LoadLeap(); +} + void FadingBanner::LoadFallback() { BeforeChange(); diff --git a/stepmania/src/FadingBanner.h b/stepmania/src/FadingBanner.h index bbf3d96044..a589284266 100644 --- a/stepmania/src/FadingBanner.h +++ b/stepmania/src/FadingBanner.h @@ -31,6 +31,7 @@ public: void LoadFromCourse( Course* pCourse ); void LoadRoulette(); void LoadRandom(); + void LoadLeap(); void LoadFallback(); void SetMovingFast( bool fast ) { m_bMovingFast=fast; } diff --git a/stepmania/src/MusicWheel.cpp b/stepmania/src/MusicWheel.cpp index 45b40050fb..a7645be793 100644 --- a/stepmania/src/MusicWheel.cpp +++ b/stepmania/src/MusicWheel.cpp @@ -54,6 +54,7 @@ CachedThemeMetricF CIRCLE_PERCENT ("MusicWheel","CirclePercent"); #define SORT_MENU_COLOR THEME->GetMetricC("MusicWheel","SortMenuColor") #define SHOW_ROULETTE THEME->GetMetricB("MusicWheel","ShowRoulette") #define SHOW_RANDOM THEME->GetMetricB("MusicWheel","ShowRandom") +#define SHOW_LEAP THEME->GetMetricB("MusicWheel","ShowLeap") CachedThemeMetricB USE_3D ("MusicWheel","Use3D"); CachedThemeMetricI NUM_WHEEL_ITEMS_METRIC ("MusicWheel","NumWheelItems"); #define NUM_WHEEL_ITEMS min( MAX_WHEEL_ITEMS, (int) NUM_WHEEL_ITEMS_METRIC ) @@ -579,10 +580,15 @@ void MusicWheel::BuildWheelItemDatas( vector &arrayWheelItemDatas } } - if( so != SORT_ROULETTE && SHOW_ROULETTE ) - arrayWheelItemDatas.push_back( WheelItemData(TYPE_ROULETTE, NULL, "", NULL, RageColor(1,0,0,1), SORT_INVALID) ); - if( so != SORT_ROULETTE && SHOW_RANDOM ) - arrayWheelItemDatas.push_back( WheelItemData(TYPE_RANDOM, NULL, "", NULL, RageColor(1,0,0,1), SORT_INVALID) ); + if( so != SORT_ROULETTE ) + { + if( SHOW_ROULETTE ) + arrayWheelItemDatas.push_back( WheelItemData(TYPE_ROULETTE, NULL, "", NULL, RageColor(1,0,0,1), SORT_INVALID) ); + if( SHOW_RANDOM ) + arrayWheelItemDatas.push_back( WheelItemData(TYPE_RANDOM, NULL, "", NULL, RageColor(1,0,0,1), SORT_INVALID) ); + if( SHOW_LEAP ) + arrayWheelItemDatas.push_back( WheelItemData(TYPE_LEAP, NULL, "", NULL, RageColor(1,0,0,1), SORT_INVALID) ); + } // HACK: Add extra stage item if it isn't already present on the music wheel if( GAMESTATE->IsExtraStage() || GAMESTATE->IsExtraStage2() ) @@ -1257,6 +1263,9 @@ bool MusicWheel::Select() // return true if this selection ends the screen case TYPE_RANDOM: StartRandom(); return false; + case TYPE_LEAP: + StartLeap(); + return false; case TYPE_SONG: if( !GAMESTATE->IsExtraStage() && !GAMESTATE->IsExtraStage2() ) UNLOCKMAN->UnlockSong( m_CurWheelItemData[m_iSelection]->m_pSong ); @@ -1285,41 +1294,39 @@ void MusicWheel::StartRoulette() void MusicWheel::StartRandom() { - if( PREFSMAN->m_bLockWheelAfterRandom ) + /* Shuffle the roulette wheel. */ + RandomGen rnd; + random_shuffle( m_WheelItemDatas[SORT_ROULETTE].begin(), m_WheelItemDatas[SORT_ROULETTE].end(), rnd ); + + SetOpenGroup("", SortOrder(SORT_ROULETTE)); + + m_Moving = -1; + m_TimeBeforeMovingBegins = 0; + m_SpinSpeed = 1.0f/ROULETTE_SWITCH_SECONDS; + m_SpinSpeed *= 20.0f; /* faster! */ + m_WheelState = STATE_RANDOM_SPINNING; + + this->Select(); + RebuildMusicWheelItems(); +} + +void MusicWheel::StartLeap() +{ + /* If we're in SORT_SORT_MENU or SORT_MODE_MENU, then the timer probably ran + * out. Make sure we're in a sort with actual selections. */ + switch( GAMESTATE->m_SortOrder ) { - /* Shuffle the roulette wheel. */ - RandomGen rnd; - random_shuffle( m_WheelItemDatas[SORT_ROULETTE].begin(), m_WheelItemDatas[SORT_ROULETTE].end(), rnd ); - - SetOpenGroup("", SortOrder(SORT_ROULETTE)); - - m_Moving = -1; - m_TimeBeforeMovingBegins = 0; - m_SpinSpeed = 1.0f/ROULETTE_SWITCH_SECONDS; - m_SpinSpeed *= 20.0f; /* faster! */ - m_WheelState = STATE_RANDOM_SPINNING; - - this->Select(); - RebuildMusicWheelItems(); + case SORT_SORT_MENU: + case SORT_MODE_MENU: + SetOpenGroup("", SortOrder(m_LastSortOrder)); } - else - { - /* If we're in SORT_SORT_MENU or SORT_MODE_MENU, then the timer probably ran - * out. Make sure we're in a sort with actual selections. */ - switch( GAMESTATE->m_SortOrder ) - { - case SORT_SORT_MENU: - case SORT_MODE_MENU: - SetOpenGroup("", SortOrder(m_LastSortOrder)); - } - m_iSelection = rand() % m_CurWheelItemData.size(); - m_fPositionOffsetFromSelection = 0; - m_WheelState = STATE_SELECTING_MUSIC; - m_soundStart.Play(); - SCREENMAN->PostMessageToTopScreen( SM_SongChanged, 0 ); - RebuildMusicWheelItems(); - } + m_iSelection = rand() % m_CurWheelItemData.size(); + m_fPositionOffsetFromSelection = 0; + m_WheelState = STATE_SELECTING_MUSIC; + m_soundStart.Play(); + SCREENMAN->PostMessageToTopScreen( SM_SongChanged, 0 ); + RebuildMusicWheelItems(); } void MusicWheel::SetOpenGroup(CString group, SortOrder so) diff --git a/stepmania/src/MusicWheel.h b/stepmania/src/MusicWheel.h index 52005cb8b7..3c851a9102 100644 --- a/stepmania/src/MusicWheel.h +++ b/stepmania/src/MusicWheel.h @@ -58,6 +58,7 @@ public: bool NextSort(); // return true if change successful void StartRoulette(); void StartRandom(); + void StartLeap(); bool IsRouletting() const; /* Return true if we're moving fast automatically. */ int IsMoving() const; diff --git a/stepmania/src/MusicWheelItem.cpp b/stepmania/src/MusicWheelItem.cpp index c0aeb33a36..5da66e9781 100644 --- a/stepmania/src/MusicWheelItem.cpp +++ b/stepmania/src/MusicWheelItem.cpp @@ -174,11 +174,15 @@ void MusicWheelItem::LoadFromWheelItemData( WheelItemData* pWID ) } break; case TYPE_ROULETTE: - m_textRoulette.SetText( "ROULETTE" ); + m_textRoulette.SetText( THEME->GetMetric("MusicWheel","Roulette") ); break; case TYPE_RANDOM: - m_textRoulette.SetText( "RANDOM" ); + m_textRoulette.SetText( THEME->GetMetric("MusicWheel","Random") ); + break; + + case TYPE_LEAP: + m_textRoulette.SetText( THEME->GetMetric("MusicWheel","Leap") ); break; default: @@ -227,6 +231,7 @@ void MusicWheelItem::Update( float fDeltaTime ) break; case TYPE_ROULETTE: case TYPE_RANDOM: + case TYPE_LEAP: m_sprSectionBar.Update( fDeltaTime ); m_textRoulette.Update( fDeltaTime ); break; @@ -260,6 +265,7 @@ void MusicWheelItem::DrawPrimitives() case TYPE_SECTION: case TYPE_ROULETTE: case TYPE_RANDOM: + case TYPE_LEAP: case TYPE_SORT: bar = &m_sprSectionBar; break; @@ -279,6 +285,7 @@ void MusicWheelItem::DrawPrimitives() break; case TYPE_ROULETTE: case TYPE_RANDOM: + case TYPE_LEAP: m_textRoulette.Draw(); break; case TYPE_SONG: @@ -338,6 +345,7 @@ bool WheelItemData::HasBanner() const /* XXX: These are special cases. */ case TYPE_ROULETTE: case TYPE_RANDOM: + case TYPE_LEAP: case TYPE_SORT: return false; @@ -362,6 +370,9 @@ CString WheelItemData::GetBanner() const case TYPE_RANDOM: return THEME->GetPathToG("Banner roulette"); + case TYPE_LEAP: + return THEME->GetPathToG("Banner leap"); + default: ASSERT(0); return ""; } } diff --git a/stepmania/src/MusicWheelItem.h b/stepmania/src/MusicWheelItem.h index 781d897754..adc70209ee 100644 --- a/stepmania/src/MusicWheelItem.h +++ b/stepmania/src/MusicWheelItem.h @@ -60,7 +60,7 @@ public: ActorFrame m_All; }; -enum WheelItemType { TYPE_SECTION, TYPE_SONG, TYPE_ROULETTE, TYPE_RANDOM, TYPE_COURSE, TYPE_SORT }; +enum WheelItemType { TYPE_SECTION, TYPE_SONG, TYPE_ROULETTE, TYPE_RANDOM, TYPE_LEAP, TYPE_COURSE, TYPE_SORT }; struct WheelItemData { diff --git a/stepmania/src/PrefsManager.cpp b/stepmania/src/PrefsManager.cpp index af8db5cf07..91acaadab8 100644 --- a/stepmania/src/PrefsManager.cpp +++ b/stepmania/src/PrefsManager.cpp @@ -214,7 +214,6 @@ PrefsManager::PrefsManager() m_iAttractSoundFrequency = 1; m_bAllowExtraStage = true; - m_bLockWheelAfterRandom = true; m_bHideDefaultNoteSkin = false; m_iMaxHighScoresPerList = 10; m_fPadStickSeconds = 0; @@ -503,7 +502,6 @@ void PrefsManager::ReadGlobalPrefsFromDisk() ini.GetValue( "Options", "CenterImageScaleY", m_fCenterImageScaleY ); ini.GetValue( "Options", "AttractSoundFrequency", m_iAttractSoundFrequency ); ini.GetValue( "Options", "AllowExtraStage", m_bAllowExtraStage ); - ini.GetValue( "Options", "LockWheelAfterRandom", m_bLockWheelAfterRandom ); ini.GetValue( "Options", "HideDefaultNoteSkin", m_bHideDefaultNoteSkin ); ini.GetValue( "Options", "MaxHighScoresPerList", m_iMaxHighScoresPerList ); ini.GetValue( "Options", "PadStickSeconds", m_fPadStickSeconds ); @@ -723,7 +721,6 @@ void PrefsManager::SaveGlobalPrefsToDisk() const ini.SetValue( "Options", "CenterImageScaleY", m_fCenterImageScaleY ); ini.SetValue( "Options", "AttractSoundFrequency", m_iAttractSoundFrequency ); ini.SetValue( "Options", "AllowExtraStage", m_bAllowExtraStage ); - ini.SetValue( "Options", "LockWheelAfterRandom", m_bLockWheelAfterRandom ); ini.SetValue( "Options", "HideDefaultNoteSkin", m_bHideDefaultNoteSkin ); ini.SetValue( "Options", "MaxHighScoresPerList", m_iMaxHighScoresPerList ); ini.SetValue( "Options", "PadStickSeconds", m_fPadStickSeconds ); diff --git a/stepmania/src/PrefsManager.h b/stepmania/src/PrefsManager.h index f714526d6e..afd587f489 100644 --- a/stepmania/src/PrefsManager.h +++ b/stepmania/src/PrefsManager.h @@ -190,7 +190,6 @@ public: float m_fCenterImageScaleY; int m_iAttractSoundFrequency; // 0 = never, 1 = every time bool m_bAllowExtraStage; - bool m_bLockWheelAfterRandom; bool m_bHideDefaultNoteSkin; int m_iMaxHighScoresPerList; diff --git a/stepmania/src/ScreenSelectMusic.cpp b/stepmania/src/ScreenSelectMusic.cpp index e84afcef2c..447af620df 100644 --- a/stepmania/src/ScreenSelectMusic.cpp +++ b/stepmania/src/ScreenSelectMusic.cpp @@ -1393,10 +1393,12 @@ void ScreenSelectMusic::AfterMusicChange() break; case TYPE_ROULETTE: case TYPE_RANDOM: + case TYPE_LEAP: switch(m_MusicWheel.GetSelectedType()) { case TYPE_ROULETTE: m_Banner.LoadRoulette(); break; case TYPE_RANDOM: m_Banner.LoadRandom(); break; + case TYPE_LEAP: m_Banner.LoadLeap(); break; default: ASSERT(0); } @@ -1415,6 +1417,9 @@ void ScreenSelectMusic::AfterMusicChange() case TYPE_RANDOM: SampleMusicToPlay = THEME->GetPathToS("ScreenSelectMusic random music"); break; + case TYPE_LEAP: + SampleMusicToPlay = THEME->GetPathToS("ScreenSelectMusic leap music"); + break; default: ASSERT(0); }