From c28845a8dca8e62e7b5998264ccd059e654abb7b Mon Sep 17 00:00:00 2001 From: AJ Kelly Date: Tue, 8 Mar 2011 19:28:40 -0600 Subject: [PATCH] Added custom MusicWheel items. [ScreenSelectMusic] Add GetMusicWheel Lua binding. --- Docs/Changelog_sm-ssc.txt | 6 ++++ .../Fonts/MusicWheelItem Custom.redir | 1 + .../MusicWheelItem Custom ColorPart.redir | 1 + .../MusicWheelItem Custom NormalPart.redir | 1 + .../MusicWheelItem Custom OverPart.redir | 1 + Themes/_fallback/metrics.ini | 8 ++++- src/MusicWheel.cpp | 35 +++++++++++++++++-- src/MusicWheel.h | 5 ++- src/MusicWheelItem.cpp | 5 +++ src/MusicWheelItem.h | 1 + src/ScreenSelectMusic.cpp | 12 +++++++ src/WheelItemBase.h | 2 +- 12 files changed, 73 insertions(+), 5 deletions(-) create mode 100644 Themes/_fallback/Fonts/MusicWheelItem Custom.redir create mode 100644 Themes/_fallback/Graphics/MusicWheelItem Custom ColorPart.redir create mode 100644 Themes/_fallback/Graphics/MusicWheelItem Custom NormalPart.redir create mode 100644 Themes/_fallback/Graphics/MusicWheelItem Custom OverPart.redir diff --git a/Docs/Changelog_sm-ssc.txt b/Docs/Changelog_sm-ssc.txt index 64ffa95a85..b60bbd560c 100644 --- a/Docs/Changelog_sm-ssc.txt +++ b/Docs/Changelog_sm-ssc.txt @@ -13,6 +13,12 @@ _____________________________________________________________________________ sm-ssc v1.2.3 | 201103?? -------------------------------------------------------------------------------- +20110308 +-------- +* [WheelBase] Add GetCurrentIndex and GetNumItems Lua bindings. [AJ] +* [ScreenSelectMusic] Add GetMusicWheel Lua binding. [AJ] +* Added custom MusicWheel items. [AJ] + 20110305 -------- * Added #COMBOS tag to the .ssc format. [Wolfman2000] diff --git a/Themes/_fallback/Fonts/MusicWheelItem Custom.redir b/Themes/_fallback/Fonts/MusicWheelItem Custom.redir new file mode 100644 index 0000000000..5c6053f7f1 --- /dev/null +++ b/Themes/_fallback/Fonts/MusicWheelItem Custom.redir @@ -0,0 +1 @@ +Common Normal \ No newline at end of file diff --git a/Themes/_fallback/Graphics/MusicWheelItem Custom ColorPart.redir b/Themes/_fallback/Graphics/MusicWheelItem Custom ColorPart.redir new file mode 100644 index 0000000000..04b2ead777 --- /dev/null +++ b/Themes/_fallback/Graphics/MusicWheelItem Custom ColorPart.redir @@ -0,0 +1 @@ +_blank \ No newline at end of file diff --git a/Themes/_fallback/Graphics/MusicWheelItem Custom NormalPart.redir b/Themes/_fallback/Graphics/MusicWheelItem Custom NormalPart.redir new file mode 100644 index 0000000000..c94ae9b2f3 --- /dev/null +++ b/Themes/_fallback/Graphics/MusicWheelItem Custom NormalPart.redir @@ -0,0 +1 @@ +MusicWheelItem Roulette NormalPart \ No newline at end of file diff --git a/Themes/_fallback/Graphics/MusicWheelItem Custom OverPart.redir b/Themes/_fallback/Graphics/MusicWheelItem Custom OverPart.redir new file mode 100644 index 0000000000..c94ae9b2f3 --- /dev/null +++ b/Themes/_fallback/Graphics/MusicWheelItem Custom OverPart.redir @@ -0,0 +1 @@ +MusicWheelItem Roulette NormalPart \ No newline at end of file diff --git a/Themes/_fallback/metrics.ini b/Themes/_fallback/metrics.ini index 6b3767cb57..713954d943 100644 --- a/Themes/_fallback/metrics.ini +++ b/Themes/_fallback/metrics.ini @@ -843,6 +843,8 @@ ShowPortal=false MostPlayedSongsToShow=30 RecentSongsToShow=30 # +UseEasyMarkerFlag=false +# ModeMenuChoiceNames="Preferred,Group,Title,Bpm,Popularity,TopGrades,Artist,EasyMeter,MediumMeter,HardMeter,ChallengeMeter,DoubleEasyMeter,DoubleMediumMeter,DoubleHardMeter,DoubleChallengeMeter,Genre,Length,Recent" # ModeMenuChoiceNames="Preferred,Group,Title,Bpm,Popularity,TopGrades,Artist,EasyMeter,MediumMeter,HardMeter,ChallengeMeter,DoubleEasyMeter,DoubleMediumMeter,DoubleHardMeter,DoubleChallengeMeter,Genre,Length,Recent,NormalMode,BattleMode" ChoicePreferred="sort,Preferred" @@ -865,8 +867,8 @@ ChoiceLength="sort,Length" ChoiceRecent="sort,Recent" ChoiceNormalMode="playmode,regular" ChoiceBattleMode="playmode,battle" -UseEasyMarkerFlag=false # +CustomWheelItemNames="" [CourseWheel] Fallback="MusicWheel" @@ -930,6 +932,10 @@ ModeX=0 ModeY=0 ModeOnCommand= # +CustomX=0 +CustomY=0 +CustomOnCommand= +# GradeP1X=0 GradeP1Y=0 GradeP2X=0 diff --git a/src/MusicWheel.cpp b/src/MusicWheel.cpp index 2c31041280..d08d8b3df2 100644 --- a/src/MusicWheel.cpp +++ b/src/MusicWheel.cpp @@ -25,10 +25,13 @@ static Preference g_bMoveRandomToEnd( "MoveRandomToEnd", false ); #define NUM_WHEEL_ITEMS ((int)ceil(NUM_WHEEL_ITEMS_TO_DRAW+2)) -#define WHEEL_TEXT(s) THEME->GetString( "MusicWheel", ssprintf("%sText",s.c_str()) ); +#define WHEEL_TEXT(s) THEME->GetString( "MusicWheel", ssprintf("%sText",s.c_str()) ); +#define CUSTOM_ITEM_WHEEL_TEXT(s) THEME->GetString( "MusicWheel", ssprintf("CustomItem%sText",s.c_str()) ); static RString SECTION_COLORS_NAME( size_t i ) { return ssprintf("SectionColor%d",int(i+1)); } static RString CHOICE_NAME( RString s ) { return ssprintf("Choice%s",s.c_str()); } +static RString CUSTOM_WHEEL_ITEM_NAME( RString s ) { return ssprintf("CustomWheelItem%s",s.c_str()); } +static RString CUSTOM_WHEEL_ITEM_COLOR( RString s ) { return ssprintf("%sColor",s.c_str()); } AutoScreenMessage( SM_SongChanged ); // TODO: Replace this with a Message and MESSAGEMAN AutoScreenMessage( SM_SortOrderChanging ); @@ -86,6 +89,12 @@ void MusicWheel::Load( RString sType ) CHOICE .Load(sType,CHOICE_NAME,vsModeChoiceNames); SECTION_COLORS .Load(sType,SECTION_COLORS_NAME,NUM_SECTION_COLORS); + CUSTOM_WHEEL_ITEM_NAMES .Load(sType,"CustomWheelItemNames"); + vector vsCustomItemNames; + split( CUSTOM_WHEEL_ITEM_NAMES, ",", vsCustomItemNames ); + CUSTOM_CHOICES.Load(sType,CUSTOM_WHEEL_ITEM_NAME,vsCustomItemNames); + CUSTOM_CHOICE_COLORS.Load(sType,CUSTOM_WHEEL_ITEM_COLOR,vsCustomItemNames); + ROULETTE_COLOR .Load(sType,"RouletteColor"); RANDOM_COLOR .Load(sType,"RandomColor"); PORTAL_COLOR .Load(sType,"PortalColor"); @@ -572,7 +581,6 @@ void MusicWheel::BuildWheelItemDatas( vector &arrayWheelIt ASSERT(0); // unhandled SortOrder } - // Build an array of WheelItemDatas from the sorted list of Song*'s arrayWheelItemDatas.clear(); // clear out the previous wheel items arrayWheelItemDatas.reserve( arraySongs.size() ); @@ -662,6 +670,23 @@ void MusicWheel::BuildWheelItemDatas( vector &arrayWheelIt if( SHOW_PORTAL && bFoundAnySong ) arrayWheelItemDatas.push_back( new MusicWheelItemData(TYPE_PORTAL, NULL, "", NULL, PORTAL_COLOR, 0) ); + + // add custom wheel items + vector vsNames; + split( CUSTOM_WHEEL_ITEM_NAMES, ",", vsNames ); + for( unsigned i=0; i( new GameCommand ); + wid.m_pAction->m_sName = vsNames[i]; + wid.m_pAction->Load( i, ParseCommands(CUSTOM_CHOICES.GetValue(vsNames[i])) ); + wid.m_sLabel = CUSTOM_ITEM_WHEEL_TEXT( vsNames[i] ); + + if( !wid.m_pAction->IsPlayable() ) + continue; + + arrayWheelItemDatas.push_back( new MusicWheelItemData(wid) ); + } } if( GAMESTATE->IsAnExtraStageAndSelectionLocked() ) @@ -1052,6 +1077,12 @@ bool MusicWheel::Select() // return true if this selection ends the screen ChangeSort( GAMESTATE->m_PreferredSortOrder ); m_sLastModeMenuItem = GetCurWheelItemData(m_iSelection)->m_pAction->m_sName; return false; + case TYPE_CUSTOM: + GetCurWheelItemData(m_iSelection)->m_pAction->ApplyToAllPlayers(); + if( GetCurWheelItemData(m_iSelection)->m_pAction->m_sScreen != "" ) + return true; + else + return false; } return true; } diff --git a/src/MusicWheel.h b/src/MusicWheel.h index 78e6206856..d282473b86 100644 --- a/src/MusicWheel.h +++ b/src/MusicWheel.h @@ -47,6 +47,7 @@ public: // sm-ssc additions RString JumpToNextGroup(); RString JumpToPrevGroup(); + const MusicWheelItemData *GetCurWheelItemData( int i ) { return (const MusicWheelItemData *) m_CurWheelItemData[i]; } protected: MusicWheelItem *MakeItem(); @@ -60,7 +61,6 @@ protected: virtual void UpdateSwitch(); vector m_WheelItemDatas[NUM_SortOrder]; - const MusicWheelItemData *GetCurWheelItemData( int i ) { return (const MusicWheelItemData *) m_CurWheelItemData[i]; } RString m_sLastModeMenuItem; SortOrder m_SortOrder; @@ -92,6 +92,9 @@ protected: ThemeMetric RANDOM_COLOR; ThemeMetric PORTAL_COLOR; vector m_viWheelPositions; + ThemeMetric CUSTOM_WHEEL_ITEM_NAMES; + ThemeMetricMap CUSTOM_CHOICES; + ThemeMetricMap CUSTOM_CHOICE_COLORS; }; #endif diff --git a/src/MusicWheelItem.cpp b/src/MusicWheelItem.cpp index 209cc35f7f..39dccec214 100644 --- a/src/MusicWheelItem.cpp +++ b/src/MusicWheelItem.cpp @@ -29,6 +29,7 @@ static const char *MusicWheelItemTypeNames[] = { "Mode", "Random", "Portal", + "Custom", }; XToString( MusicWheelItemType ); @@ -256,6 +257,10 @@ void MusicWheelItem::LoadFromWheelItemData( const WheelItemBaseData *pData, int sDisplayName = THEME->GetString("MusicWheel","Portal"); type = MusicWheelItemType_Portal; break; + case TYPE_CUSTOM: + sDisplayName = pWID->m_sLabel; + type = MusicWheelItemType_Custom; + break; } m_sprColorPart[type]->SetVisible( true ); diff --git a/src/MusicWheelItem.h b/src/MusicWheelItem.h index 34d5f14eed..2ab50cf5d2 100644 --- a/src/MusicWheelItem.h +++ b/src/MusicWheelItem.h @@ -27,6 +27,7 @@ enum MusicWheelItemType MusicWheelItemType_Mode, MusicWheelItemType_Random, MusicWheelItemType_Portal, + MusicWheelItemType_Custom, NUM_MusicWheelItemType, MusicWheelItemType_Invalid, }; diff --git a/src/ScreenSelectMusic.cpp b/src/ScreenSelectMusic.cpp index bdfb2de166..b88038f109 100644 --- a/src/ScreenSelectMusic.cpp +++ b/src/ScreenSelectMusic.cpp @@ -1663,6 +1663,7 @@ void ScreenSelectMusic::AfterMusicChange() case TYPE_SORT: case TYPE_ROULETTE: case TYPE_RANDOM: + case TYPE_CUSTOM: FOREACH_PlayerNumber( p ) m_iSelection[p] = -1; @@ -1721,6 +1722,12 @@ void ScreenSelectMusic::AfterMusicChange() //if( SAMPLE_MUSIC_PREVIEW_MODE != SampleMusicPreviewMode_LastSong ) m_sSampleMusicToPlay = m_sRandomMusicPath; break; + case TYPE_CUSTOM: + bWantBanner = false; // we load it ourself, or should + m_Banner.Load( THEME->GetPathG( "Banner", GetMusicWheel()->GetCurWheelItemData( GetMusicWheel()->GetCurrentIndex() )->m_pAction->m_sName.c_str() ) ); + if( SAMPLE_MUSIC_PREVIEW_MODE != SampleMusicPreviewMode_LastSong ) + m_sSampleMusicToPlay = m_sSectionMusicPath; + break; default: ASSERT(0); } @@ -1857,10 +1864,15 @@ class LunaScreenSelectMusic: public Luna { public: static int GetGoToOptions( T* p, lua_State *L ) { lua_pushboolean( L, p->GetGoToOptions() ); return 1; } + static int GetMusicWheel( T* p, lua_State *L ) { + p->GetMusicWheel()->PushSelf(L); + return 1; + } LunaScreenSelectMusic() { ADD_METHOD( GetGoToOptions ); + ADD_METHOD( GetMusicWheel ); } }; diff --git a/src/WheelItemBase.h b/src/WheelItemBase.h index 4262aceefc..b50f383667 100644 --- a/src/WheelItemBase.h +++ b/src/WheelItemBase.h @@ -19,7 +19,7 @@ enum WheelItemDataType TYPE_PORTAL, /**< The portal section on the Wheel. */ TYPE_COURSE, /**< A Course on the Wheel. */ TYPE_SORT, /**< A generic sorting item on the Wheel. */ - //TYPE_CUSTOM + TYPE_CUSTOM /**< A custom item on the Wheel. */ }; struct WheelItemBaseData