|
25 | 25 | static Preference<bool> g_bMoveRandomToEnd( "MoveRandomToEnd", false );
|
26 | 26 |
|
27 | 27 | #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()) ); |
29 | 30 |
|
30 | 31 | static RString SECTION_COLORS_NAME( size_t i ) { return ssprintf("SectionColor%d",int(i+1)); }
|
31 | 32 | 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()); } |
32 | 35 |
|
33 | 36 | AutoScreenMessage( SM_SongChanged ); // TODO: Replace this with a Message and MESSAGEMAN
|
34 | 37 | AutoScreenMessage( SM_SortOrderChanging );
|
@@ -86,6 +89,12 @@ void MusicWheel::Load( RString sType )
|
86 | 89 | CHOICE .Load(sType,CHOICE_NAME,vsModeChoiceNames);
|
87 | 90 | SECTION_COLORS .Load(sType,SECTION_COLORS_NAME,NUM_SECTION_COLORS);
|
88 | 91 |
|
| 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 | + |
89 | 98 | ROULETTE_COLOR .Load(sType,"RouletteColor");
|
90 | 99 | RANDOM_COLOR .Load(sType,"RandomColor");
|
91 | 100 | PORTAL_COLOR .Load(sType,"PortalColor");
|
@@ -572,7 +581,6 @@ void MusicWheel::BuildWheelItemDatas( vector<MusicWheelItemData *> &arrayWheelIt
|
572 | 581 | ASSERT(0); // unhandled SortOrder
|
573 | 582 | }
|
574 | 583 |
|
575 |
| - |
576 | 584 | // Build an array of WheelItemDatas from the sorted list of Song*'s
|
577 | 585 | arrayWheelItemDatas.clear(); // clear out the previous wheel items
|
578 | 586 | arrayWheelItemDatas.reserve( arraySongs.size() );
|
@@ -662,6 +670,23 @@ void MusicWheel::BuildWheelItemDatas( vector<MusicWheelItemData *> &arrayWheelIt
|
662 | 670 |
|
663 | 671 | if( SHOW_PORTAL && bFoundAnySong )
|
664 | 672 | 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 | + } |
665 | 690 | }
|
666 | 691 |
|
667 | 692 | if( GAMESTATE->IsAnExtraStageAndSelectionLocked() )
|
@@ -1052,6 +1077,12 @@ bool MusicWheel::Select() // return true if this selection ends the screen
|
1052 | 1077 | ChangeSort( GAMESTATE->m_PreferredSortOrder );
|
1053 | 1078 | m_sLastModeMenuItem = GetCurWheelItemData(m_iSelection)->m_pAction->m_sName;
|
1054 | 1079 | 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; |
1055 | 1086 | }
|
1056 | 1087 | return true;
|
1057 | 1088 | }
|
|
0 commit comments