Skip to content

Commit c28845a

Browse files
committed
Added custom MusicWheel items.
[ScreenSelectMusic] Add GetMusicWheel Lua binding.
1 parent 8fa1aa0 commit c28845a

12 files changed

+73
-5
lines changed

Docs/Changelog_sm-ssc.txt

+6
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,12 @@ _____________________________________________________________________________
1313
sm-ssc v1.2.3 | 201103??
1414
--------------------------------------------------------------------------------
1515

16+
20110308
17+
--------
18+
* [WheelBase] Add GetCurrentIndex and GetNumItems Lua bindings. [AJ]
19+
* [ScreenSelectMusic] Add GetMusicWheel Lua binding. [AJ]
20+
* Added custom MusicWheel items. [AJ]
21+
1622
20110305
1723
--------
1824
* Added #COMBOS tag to the .ssc format. [Wolfman2000]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Common Normal
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
_blank
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
MusicWheelItem Roulette NormalPart
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
MusicWheelItem Roulette NormalPart

Themes/_fallback/metrics.ini

+7-1
Original file line numberDiff line numberDiff line change
@@ -843,6 +843,8 @@ ShowPortal=false
843843
MostPlayedSongsToShow=30
844844
RecentSongsToShow=30
845845
#
846+
UseEasyMarkerFlag=false
847+
#
846848
ModeMenuChoiceNames="Preferred,Group,Title,Bpm,Popularity,TopGrades,Artist,EasyMeter,MediumMeter,HardMeter,ChallengeMeter,DoubleEasyMeter,DoubleMediumMeter,DoubleHardMeter,DoubleChallengeMeter,Genre,Length,Recent"
847849
# ModeMenuChoiceNames="Preferred,Group,Title,Bpm,Popularity,TopGrades,Artist,EasyMeter,MediumMeter,HardMeter,ChallengeMeter,DoubleEasyMeter,DoubleMediumMeter,DoubleHardMeter,DoubleChallengeMeter,Genre,Length,Recent,NormalMode,BattleMode"
848850
ChoicePreferred="sort,Preferred"
@@ -865,8 +867,8 @@ ChoiceLength="sort,Length"
865867
ChoiceRecent="sort,Recent"
866868
ChoiceNormalMode="playmode,regular"
867869
ChoiceBattleMode="playmode,battle"
868-
UseEasyMarkerFlag=false
869870
#
871+
CustomWheelItemNames=""
870872

871873
[CourseWheel]
872874
Fallback="MusicWheel"
@@ -930,6 +932,10 @@ ModeX=0
930932
ModeY=0
931933
ModeOnCommand=
932934
#
935+
CustomX=0
936+
CustomY=0
937+
CustomOnCommand=
938+
#
933939
GradeP1X=0
934940
GradeP1Y=0
935941
GradeP2X=0

src/MusicWheel.cpp

+33-2
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,13 @@
2525
static Preference<bool> g_bMoveRandomToEnd( "MoveRandomToEnd", false );
2626

2727
#define NUM_WHEEL_ITEMS ((int)ceil(NUM_WHEEL_ITEMS_TO_DRAW+2))
28-
#define WHEEL_TEXT(s) THEME->GetString( "MusicWheel", ssprintf("%sText",s.c_str()) );
28+
#define WHEEL_TEXT(s) THEME->GetString( "MusicWheel", ssprintf("%sText",s.c_str()) );
29+
#define CUSTOM_ITEM_WHEEL_TEXT(s) THEME->GetString( "MusicWheel", ssprintf("CustomItem%sText",s.c_str()) );
2930

3031
static RString SECTION_COLORS_NAME( size_t i ) { return ssprintf("SectionColor%d",int(i+1)); }
3132
static RString CHOICE_NAME( RString s ) { return ssprintf("Choice%s",s.c_str()); }
33+
static RString CUSTOM_WHEEL_ITEM_NAME( RString s ) { return ssprintf("CustomWheelItem%s",s.c_str()); }
34+
static RString CUSTOM_WHEEL_ITEM_COLOR( RString s ) { return ssprintf("%sColor",s.c_str()); }
3235

3336
AutoScreenMessage( SM_SongChanged ); // TODO: Replace this with a Message and MESSAGEMAN
3437
AutoScreenMessage( SM_SortOrderChanging );
@@ -86,6 +89,12 @@ void MusicWheel::Load( RString sType )
8689
CHOICE .Load(sType,CHOICE_NAME,vsModeChoiceNames);
8790
SECTION_COLORS .Load(sType,SECTION_COLORS_NAME,NUM_SECTION_COLORS);
8891

92+
CUSTOM_WHEEL_ITEM_NAMES .Load(sType,"CustomWheelItemNames");
93+
vector<RString> vsCustomItemNames;
94+
split( CUSTOM_WHEEL_ITEM_NAMES, ",", vsCustomItemNames );
95+
CUSTOM_CHOICES.Load(sType,CUSTOM_WHEEL_ITEM_NAME,vsCustomItemNames);
96+
CUSTOM_CHOICE_COLORS.Load(sType,CUSTOM_WHEEL_ITEM_COLOR,vsCustomItemNames);
97+
8998
ROULETTE_COLOR .Load(sType,"RouletteColor");
9099
RANDOM_COLOR .Load(sType,"RandomColor");
91100
PORTAL_COLOR .Load(sType,"PortalColor");
@@ -572,7 +581,6 @@ void MusicWheel::BuildWheelItemDatas( vector<MusicWheelItemData *> &arrayWheelIt
572581
ASSERT(0); // unhandled SortOrder
573582
}
574583

575-
576584
// Build an array of WheelItemDatas from the sorted list of Song*'s
577585
arrayWheelItemDatas.clear(); // clear out the previous wheel items
578586
arrayWheelItemDatas.reserve( arraySongs.size() );
@@ -662,6 +670,23 @@ void MusicWheel::BuildWheelItemDatas( vector<MusicWheelItemData *> &arrayWheelIt
662670

663671
if( SHOW_PORTAL && bFoundAnySong )
664672
arrayWheelItemDatas.push_back( new MusicWheelItemData(TYPE_PORTAL, NULL, "", NULL, PORTAL_COLOR, 0) );
673+
674+
// add custom wheel items
675+
vector<RString> vsNames;
676+
split( CUSTOM_WHEEL_ITEM_NAMES, ",", vsNames );
677+
for( unsigned i=0; i<vsNames.size(); ++i )
678+
{
679+
MusicWheelItemData wid( TYPE_CUSTOM, NULL, "", NULL, CUSTOM_CHOICE_COLORS.GetValue(vsNames[i]), 0 );
680+
wid.m_pAction = HiddenPtr<GameCommand>( new GameCommand );
681+
wid.m_pAction->m_sName = vsNames[i];
682+
wid.m_pAction->Load( i, ParseCommands(CUSTOM_CHOICES.GetValue(vsNames[i])) );
683+
wid.m_sLabel = CUSTOM_ITEM_WHEEL_TEXT( vsNames[i] );
684+
685+
if( !wid.m_pAction->IsPlayable() )
686+
continue;
687+
688+
arrayWheelItemDatas.push_back( new MusicWheelItemData(wid) );
689+
}
665690
}
666691

667692
if( GAMESTATE->IsAnExtraStageAndSelectionLocked() )
@@ -1052,6 +1077,12 @@ bool MusicWheel::Select() // return true if this selection ends the screen
10521077
ChangeSort( GAMESTATE->m_PreferredSortOrder );
10531078
m_sLastModeMenuItem = GetCurWheelItemData(m_iSelection)->m_pAction->m_sName;
10541079
return false;
1080+
case TYPE_CUSTOM:
1081+
GetCurWheelItemData(m_iSelection)->m_pAction->ApplyToAllPlayers();
1082+
if( GetCurWheelItemData(m_iSelection)->m_pAction->m_sScreen != "" )
1083+
return true;
1084+
else
1085+
return false;
10551086
}
10561087
return true;
10571088
}

src/MusicWheel.h

+4-1
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ class MusicWheel : public WheelBase
4747
// sm-ssc additions
4848
RString JumpToNextGroup();
4949
RString JumpToPrevGroup();
50+
const MusicWheelItemData *GetCurWheelItemData( int i ) { return (const MusicWheelItemData *) m_CurWheelItemData[i]; }
5051

5152
protected:
5253
MusicWheelItem *MakeItem();
@@ -60,7 +61,6 @@ class MusicWheel : public WheelBase
6061
virtual void UpdateSwitch();
6162

6263
vector<MusicWheelItemData *> m_WheelItemDatas[NUM_SortOrder];
63-
const MusicWheelItemData *GetCurWheelItemData( int i ) { return (const MusicWheelItemData *) m_CurWheelItemData[i]; }
6464

6565
RString m_sLastModeMenuItem;
6666
SortOrder m_SortOrder;
@@ -92,6 +92,9 @@ class MusicWheel : public WheelBase
9292
ThemeMetric<RageColor> RANDOM_COLOR;
9393
ThemeMetric<RageColor> PORTAL_COLOR;
9494
vector <int> m_viWheelPositions;
95+
ThemeMetric<RString> CUSTOM_WHEEL_ITEM_NAMES;
96+
ThemeMetricMap<RString> CUSTOM_CHOICES;
97+
ThemeMetricMap<RageColor> CUSTOM_CHOICE_COLORS;
9598
};
9699

97100
#endif

src/MusicWheelItem.cpp

+5
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ static const char *MusicWheelItemTypeNames[] = {
2929
"Mode",
3030
"Random",
3131
"Portal",
32+
"Custom",
3233
};
3334
XToString( MusicWheelItemType );
3435

@@ -256,6 +257,10 @@ void MusicWheelItem::LoadFromWheelItemData( const WheelItemBaseData *pData, int
256257
sDisplayName = THEME->GetString("MusicWheel","Portal");
257258
type = MusicWheelItemType_Portal;
258259
break;
260+
case TYPE_CUSTOM:
261+
sDisplayName = pWID->m_sLabel;
262+
type = MusicWheelItemType_Custom;
263+
break;
259264
}
260265

261266
m_sprColorPart[type]->SetVisible( true );

src/MusicWheelItem.h

+1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ enum MusicWheelItemType
2727
MusicWheelItemType_Mode,
2828
MusicWheelItemType_Random,
2929
MusicWheelItemType_Portal,
30+
MusicWheelItemType_Custom,
3031
NUM_MusicWheelItemType,
3132
MusicWheelItemType_Invalid,
3233
};

src/ScreenSelectMusic.cpp

+12
Original file line numberDiff line numberDiff line change
@@ -1663,6 +1663,7 @@ void ScreenSelectMusic::AfterMusicChange()
16631663
case TYPE_SORT:
16641664
case TYPE_ROULETTE:
16651665
case TYPE_RANDOM:
1666+
case TYPE_CUSTOM:
16661667
FOREACH_PlayerNumber( p )
16671668
m_iSelection[p] = -1;
16681669

@@ -1721,6 +1722,12 @@ void ScreenSelectMusic::AfterMusicChange()
17211722
//if( SAMPLE_MUSIC_PREVIEW_MODE != SampleMusicPreviewMode_LastSong )
17221723
m_sSampleMusicToPlay = m_sRandomMusicPath;
17231724
break;
1725+
case TYPE_CUSTOM:
1726+
bWantBanner = false; // we load it ourself, or should
1727+
m_Banner.Load( THEME->GetPathG( "Banner", GetMusicWheel()->GetCurWheelItemData( GetMusicWheel()->GetCurrentIndex() )->m_pAction->m_sName.c_str() ) );
1728+
if( SAMPLE_MUSIC_PREVIEW_MODE != SampleMusicPreviewMode_LastSong )
1729+
m_sSampleMusicToPlay = m_sSectionMusicPath;
1730+
break;
17241731
default:
17251732
ASSERT(0);
17261733
}
@@ -1857,10 +1864,15 @@ class LunaScreenSelectMusic: public Luna<ScreenSelectMusic>
18571864
{
18581865
public:
18591866
static int GetGoToOptions( T* p, lua_State *L ) { lua_pushboolean( L, p->GetGoToOptions() ); return 1; }
1867+
static int GetMusicWheel( T* p, lua_State *L ) {
1868+
p->GetMusicWheel()->PushSelf(L);
1869+
return 1;
1870+
}
18601871

18611872
LunaScreenSelectMusic()
18621873
{
18631874
ADD_METHOD( GetGoToOptions );
1875+
ADD_METHOD( GetMusicWheel );
18641876
}
18651877
};
18661878

src/WheelItemBase.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ enum WheelItemDataType
1919
TYPE_PORTAL, /**< The portal section on the Wheel. */
2020
TYPE_COURSE, /**< A Course on the Wheel. */
2121
TYPE_SORT, /**< A generic sorting item on the Wheel. */
22-
//TYPE_CUSTOM
22+
TYPE_CUSTOM /**< A custom item on the Wheel. */
2323
};
2424

2525
struct WheelItemBaseData

0 commit comments

Comments
 (0)