Added custom MusicWheel items.

[ScreenSelectMusic] Add GetMusicWheel Lua binding.
This commit is contained in:
AJ Kelly
2011-03-08 19:28:40 -06:00
parent 8fa1aa09b6
commit c28845a8dc
12 changed files with 73 additions and 5 deletions
+6
View File
@@ -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]
@@ -0,0 +1 @@
Common Normal
@@ -0,0 +1 @@
_blank
@@ -0,0 +1 @@
MusicWheelItem Roulette NormalPart
@@ -0,0 +1 @@
MusicWheelItem Roulette NormalPart
+7 -1
View File
@@ -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
+33 -2
View File
@@ -25,10 +25,13 @@
static Preference<bool> 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<RString> 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<MusicWheelItemData *> &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<MusicWheelItemData *> &arrayWheelIt
if( SHOW_PORTAL && bFoundAnySong )
arrayWheelItemDatas.push_back( new MusicWheelItemData(TYPE_PORTAL, NULL, "", NULL, PORTAL_COLOR, 0) );
// add custom wheel items
vector<RString> vsNames;
split( CUSTOM_WHEEL_ITEM_NAMES, ",", vsNames );
for( unsigned i=0; i<vsNames.size(); ++i )
{
MusicWheelItemData wid( TYPE_CUSTOM, NULL, "", NULL, CUSTOM_CHOICE_COLORS.GetValue(vsNames[i]), 0 );
wid.m_pAction = HiddenPtr<GameCommand>( 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;
}
+4 -1
View File
@@ -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<MusicWheelItemData *> 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<RageColor> RANDOM_COLOR;
ThemeMetric<RageColor> PORTAL_COLOR;
vector <int> m_viWheelPositions;
ThemeMetric<RString> CUSTOM_WHEEL_ITEM_NAMES;
ThemeMetricMap<RString> CUSTOM_CHOICES;
ThemeMetricMap<RageColor> CUSTOM_CHOICE_COLORS;
};
#endif
+5
View File
@@ -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 );
+1
View File
@@ -27,6 +27,7 @@ enum MusicWheelItemType
MusicWheelItemType_Mode,
MusicWheelItemType_Random,
MusicWheelItemType_Portal,
MusicWheelItemType_Custom,
NUM_MusicWheelItemType,
MusicWheelItemType_Invalid,
};
+12
View File
@@ -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<ScreenSelectMusic>
{
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 );
}
};
+1 -1
View File
@@ -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