Added custom MusicWheel items.
[ScreenSelectMusic] Add GetMusicWheel Lua binding.
This commit is contained in:
@@ -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
|
||||
@@ -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
@@ -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
@@ -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
|
||||
|
||||
@@ -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 );
|
||||
|
||||
@@ -27,6 +27,7 @@ enum MusicWheelItemType
|
||||
MusicWheelItemType_Mode,
|
||||
MusicWheelItemType_Random,
|
||||
MusicWheelItemType_Portal,
|
||||
MusicWheelItemType_Custom,
|
||||
NUM_MusicWheelItemType,
|
||||
MusicWheelItemType_Invalid,
|
||||
};
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user