void ScreenNetSelectBase::Init() { ScreenWithMenuElements::Init(); // Chat boxes m_sprChatInputBox.Load( THEME->GetPathG( m_sName, "ChatInputBox" ) ); m_sprChatInputBox->SetName( "ChatInputBox" ); LOAD_ALL_COMMANDS_AND_SET_XY_AND_ON_COMMAND( m_sprChatInputBox ); this->AddChild( m_sprChatInputBox ); m_sprChatOutputBox.Load( THEME->GetPathG( m_sName, "ChatOutputBox" ) ); m_sprChatOutputBox->SetName( "ChatOutputBox" ); LOAD_ALL_COMMANDS_AND_SET_XY_AND_ON_COMMAND( m_sprChatOutputBox ); this->AddChild( m_sprChatOutputBox ); m_textChatInput.LoadFromFont( THEME->GetPathF(m_sName,"chat") ); m_textChatInput.SetName( "ChatInput" ); m_textChatInput.SetWrapWidthPixels( (int)(CHAT_TEXT_INPUT_WIDTH) ); LOAD_ALL_COMMANDS_AND_SET_XY_AND_ON_COMMAND( m_textChatInput ); this->AddChild( &m_textChatInput ); m_textChatOutput.LoadFromFont( THEME->GetPathF(m_sName,"chat") ); m_textChatOutput.SetName( "ChatOutput" ); m_textChatOutput.SetWrapWidthPixels( (int)(CHAT_TEXT_OUTPUT_WIDTH) ); LOAD_ALL_COMMANDS_AND_SET_XY_AND_ON_COMMAND( m_textChatOutput ); this->AddChild( &m_textChatOutput ); m_textChatOutput.SetText( NSMAN->m_sChatText ); m_textChatOutput.SetMaxLines( SHOW_CHAT_LINES, 1 ); //Display users list UpdateUsers(); return; }
void ScreenNetRoom::Init() { GAMESTATE->FinishStage(); ScreenNetSelectBase::Init(); m_soundChangeSel.Load( THEME->GetPathS("ScreenNetRoom","change sel") ); m_iRoomPlace = 0; m_RoomWheel.SetName( "RoomWheel" ); m_RoomWheel.Load( "RoomWheel" ); m_RoomWheel.BeginScreen(); LOAD_ALL_COMMANDS_AND_SET_XY_AND_ON_COMMAND( m_RoomWheel ); this->AddChild( &m_RoomWheel ); // Since the room info display does not start active, and it is activated by // code elsewhere, it should not be put on screen to begin with. m_roomInfo.SetName( "RoomInfoDisplay" ); m_roomInfo.Load( "RoomInfoDisplay" ); m_roomInfo.SetDrawOrder( 1 ); this->AddChild( &m_roomInfo ); this->SortByDrawOrder(); NSMAN->ReportNSSOnOff( 7 ); }
void ScreenEnding::Init() { ScreenAttract::Init(); FOREACH_HumanPlayer( p ) { if( !PROFILEMAN->IsPersistentProfile(p) ) continue; m_sprRemoveMemoryCard[p].SetName( fmt::sprintf("RemoveCardP%d",p+1) ); m_sprRemoveMemoryCard[p].Load( THEME->GetPathG("ScreenEnding",fmt::sprintf("remove card P%d",p+1)) ); switch( MEMCARDMAN->GetCardState(p) ) { case MemoryCardState_Removed: case MemoryCardState_NoCard: m_sprRemoveMemoryCard[p].SetVisible( false ); default: break; } LOAD_ALL_COMMANDS_AND_SET_XY_AND_ON_COMMAND( m_sprRemoveMemoryCard[p] ); this->AddChild( &m_sprRemoveMemoryCard[p] ); } SOUND->PlayOnceFromDir( ANNOUNCER->GetPathTo("music scroll") ); // Now that we've read the data from the profile, it's ok to Reset() GAMESTATE->Reset(); }
void ScreenEditMenu::Init() { // HACK: Disable any style set by the editor. GAMESTATE->SetCurrentStyle( NULL, PLAYER_INVALID ); // Enable all players. FOREACH_PlayerNumber( pn ) GAMESTATE->JoinPlayer( pn ); // Edit mode DOES NOT WORK if the master player is not player 1. The same // is true of various parts of this poorly designed screen. -Kyz if(GAMESTATE->GetMasterPlayerNumber() != PLAYER_1) { LOG->Warn("Master player number was not player 1, forcing it to player 1 so that edit mode will work. If playing in edit mode doesn't work, this might be related."); GAMESTATE->SetMasterPlayerNumber(PLAYER_1); } ScreenWithMenuElements::Init(); m_Selector.SetName( "EditMenu" ); m_Selector.Load( EDIT_MENU_TYPE ); m_Selector.SetXY( 0, 0 ); this->AddChild( &m_Selector ); m_textExplanation.SetName( "Explanation" ); m_textExplanation.LoadFromFont( THEME->GetPathF(m_sName,"explanation") ); LOAD_ALL_COMMANDS_AND_SET_XY( m_textExplanation ); RefreshExplanationText(); this->AddChild( &m_textExplanation ); m_textNumStepsLoadedFromProfile.SetName( "NumStepsLoadedFromProfile" ); m_textNumStepsLoadedFromProfile.LoadFromFont( THEME->GetPathF(m_sName,"NumStepsLoadedFromProfile") ); LOAD_ALL_COMMANDS_AND_SET_XY_AND_ON_COMMAND( m_textNumStepsLoadedFromProfile ); RefreshNumStepsLoadedFromProfile(); this->AddChild( &m_textNumStepsLoadedFromProfile ); if(!m_Selector.SafeToUse()) { m_NoSongsMessage.SetName("NoSongsMessage"); m_NoSongsMessage.LoadFromFont(THEME->GetPathF(m_sName, "NoSongsMessage")); LOAD_ALL_COMMANDS_AND_SET_XY_AND_ON_COMMAND(m_NoSongsMessage); AddChild(&m_NoSongsMessage); m_Selector.SetVisible(false); m_textExplanation.SetVisible(false); m_textNumStepsLoadedFromProfile.SetVisible(false); } }
void ScreenNetSelectBase::Init() { ScreenWithMenuElements::Init(); //ChatBox m_sprChatInputBox.SetName( "ChatInputBox" ); m_sprChatInputBox.Load( THEME->GetPathG( m_sName, "ChatInputBox" ) ); m_sprChatInputBox.SetWidth( CHATINPUT_WIDTH ); m_sprChatInputBox.SetHeight( CHATINPUT_HEIGHT ); LOAD_ALL_COMMANDS_AND_SET_XY_AND_ON_COMMAND( m_sprChatInputBox ); this->AddChild( &m_sprChatInputBox ); m_sprChatOutputBox.SetName( "ChatOutputBox" ); m_sprChatOutputBox.Load( THEME->GetPathG( m_sName, "ChatOutputBox" ) ); m_sprChatOutputBox.SetWidth( CHATOUTPUT_WIDTH ); m_sprChatOutputBox.SetHeight( CHATOUTPUT_HEIGHT ); LOAD_ALL_COMMANDS_AND_SET_XY_AND_ON_COMMAND( m_sprChatOutputBox ); this->AddChild( &m_sprChatOutputBox ); m_textChatInput.LoadFromFont( THEME->GetPathF(m_sName,"chat") ); m_textChatInput.SetHorizAlign( align_left ); m_textChatInput.SetVertAlign( align_top ); m_textChatInput.SetShadowLength( 0 ); m_textChatInput.SetName( "ChatInput" ); m_textChatInput.SetWrapWidthPixels( (int)(CHAT_TEXT_INPUT_WIDTH) ); LOAD_ALL_COMMANDS_AND_SET_XY_AND_ON_COMMAND( m_textChatInput ); this->AddChild( &m_textChatInput ); m_textChatOutput.LoadFromFont( THEME->GetPathF(m_sName,"chat") ); m_textChatOutput.SetWrapWidthPixels( (int)(CHAT_TEXT_OUTPUT_WIDTH) ); m_textChatOutput.SetHorizAlign( align_left ); m_textChatOutput.SetVertAlign( align_bottom ); m_textChatOutput.SetShadowLength( 0 ); m_textChatOutput.SetName( "ChatOutput" ); LOAD_ALL_COMMANDS_AND_SET_XY_AND_ON_COMMAND( m_textChatOutput ); this->AddChild( &m_textChatOutput ); m_textChatOutput.SetText( NSMAN->m_sChatText ); m_textChatOutput.SetMaxLines( SHOW_CHAT_LINES, 1 ); //Display users list UpdateUsers(); return; }
void ScreenStatsOverlay::Init() { Screen::Init(); m_textStats.LoadFromFont( THEME->GetPathF(m_sName,"stats") ); m_textStats.SetName( "Stats" ); LOAD_ALL_COMMANDS_AND_SET_XY_AND_ON_COMMAND( m_textStats ); this->AddChild( &m_textStats ); /* "Was that a skip?" This displays a message when an update takes * abnormally long, to quantify skips more precisely, verify them * when they're subtle, and show the time it happened, so you can pinpoint * the time in the log. */ m_LastSkip = 0; SHOW_SKIPS.Load( m_sName, "ShowSkips" ); if( SHOW_SKIPS ) { SKIP_X.Load( m_sName, "SkipX" ); SKIP_Y.Load( m_sName, "SkipY" ); SKIP_SPACING_Y.Load( m_sName, "SkipSpacingY" ); SKIP_WIDTH.Load( m_sName, "SkipWidth" ); RectF rectSkips = RectF( SKIP_X-SKIP_WIDTH/2, SKIP_Y-(SKIP_SPACING_Y*NUM_SKIPS_TO_SHOW)/2 - 10, SKIP_X+SKIP_WIDTH/2, SKIP_Y+(SKIP_SPACING_Y*NUM_SKIPS_TO_SHOW)/2 + 10 ); m_quadSkipBackground.StretchTo( rectSkips ); m_quadSkipBackground.SetDiffuse( RageColor(0,0,0,0.4f) ); this->AddChild(&m_quadSkipBackground); for( int i=0; i<NUM_SKIPS_TO_SHOW; i++ ) { /* This is somewhat big. Let's put it on the right side, where it'll * obscure the 2P side during gameplay; there's nowhere to put it that * doesn't obscure something, and it's just a diagnostic. */ m_textSkips[i].LoadFromFont( THEME->GetPathF("Common","normal") ); m_textSkips[i].SetX( SKIP_X ); m_textSkips[i].SetY( SCALE( i, 0, NUM_SKIPS_TO_SHOW-1, rectSkips.top + 10, rectSkips.bottom - 10 ) ); m_textSkips[i].SetDiffuse( RageColor(1,1,1,0) ); m_textSkips[i].SetShadowLength( 0 ); this->AddChild( &m_textSkips[i] ); } } this->SubscribeToMessage( "ShowStatsChanged" ); }
void ScreenEditMenu::Init() { // HACK: Disable any style set by the editor. GAMESTATE->SetCurrentStyle( NULL, PLAYER_INVALID ); // Enable all players. FOREACH_PlayerNumber( pn ) GAMESTATE->JoinPlayer( pn ); ScreenWithMenuElements::Init(); m_Selector.SetName( "EditMenu" ); m_Selector.Load( EDIT_MENU_TYPE ); m_Selector.SetXY( 0, 0 ); this->AddChild( &m_Selector ); m_textExplanation.SetName( "Explanation" ); m_textExplanation.LoadFromFont( THEME->GetPathF(m_sName,"explanation") ); LOAD_ALL_COMMANDS_AND_SET_XY( m_textExplanation ); RefreshExplanationText(); this->AddChild( &m_textExplanation ); m_textNumStepsLoadedFromProfile.SetName( "NumStepsLoadedFromProfile" ); m_textNumStepsLoadedFromProfile.LoadFromFont( THEME->GetPathF(m_sName,"NumStepsLoadedFromProfile") ); LOAD_ALL_COMMANDS_AND_SET_XY_AND_ON_COMMAND( m_textNumStepsLoadedFromProfile ); RefreshNumStepsLoadedFromProfile(); this->AddChild( &m_textNumStepsLoadedFromProfile ); if(!m_Selector.SafeToUse()) { m_NoSongsMessage.SetName("NoSongsMessage"); m_NoSongsMessage.LoadFromFont(THEME->GetPathF(m_sName, "NoSongsMessage")); LOAD_ALL_COMMANDS_AND_SET_XY_AND_ON_COMMAND(m_NoSongsMessage); AddChild(&m_NoSongsMessage); m_Selector.SetVisible(false); m_textExplanation.SetVisible(false); m_textNumStepsLoadedFromProfile.SetVisible(false); } }
void ScreenDebugOverlay::Init() { Screen::Init(); // Init debug mappings // TODO: Arch-specific? { g_Mappings.Clear(); g_Mappings.holdForDebug1 = DeviceInput(DEVICE_KEYBOARD, KEY_F3); g_Mappings.holdForDebug2.MakeInvalid(); g_Mappings.holdForSlow = DeviceInput(DEVICE_KEYBOARD, KEY_ACCENT); g_Mappings.holdForFast = DeviceInput(DEVICE_KEYBOARD, KEY_TAB); /* TODO: Find a better way of indicating which option is which here. * Maybe we should take a page from ScreenEdit's menus and make * RowDefs()? */ int i=0; g_Mappings.gameplayButton[i++] = DeviceInput(DEVICE_KEYBOARD, KEY_F8); g_Mappings.gameplayButton[i++] = DeviceInput(DEVICE_KEYBOARD, KEY_F7); g_Mappings.gameplayButton[i++] = DeviceInput(DEVICE_KEYBOARD, KEY_F6); i=0; g_Mappings.debugButton[i++] = DeviceInput(DEVICE_KEYBOARD, KEY_C1); g_Mappings.debugButton[i++] = DeviceInput(DEVICE_KEYBOARD, KEY_C2); g_Mappings.debugButton[i++] = DeviceInput(DEVICE_KEYBOARD, KEY_C3); g_Mappings.debugButton[i++] = DeviceInput(DEVICE_KEYBOARD, KEY_C4); g_Mappings.debugButton[i++] = DeviceInput(DEVICE_KEYBOARD, KEY_C5); g_Mappings.debugButton[i++] = DeviceInput(DEVICE_KEYBOARD, KEY_C6); g_Mappings.debugButton[i++] = DeviceInput(DEVICE_KEYBOARD, KEY_C7); g_Mappings.debugButton[i++] = DeviceInput(DEVICE_KEYBOARD, KEY_C8); g_Mappings.debugButton[i++] = DeviceInput(DEVICE_KEYBOARD, KEY_C9); g_Mappings.debugButton[i++] = DeviceInput(DEVICE_KEYBOARD, KEY_C0); g_Mappings.debugButton[i++] = DeviceInput(DEVICE_KEYBOARD, KEY_Cq); g_Mappings.debugButton[i++] = DeviceInput(DEVICE_KEYBOARD, KEY_Cw); g_Mappings.debugButton[i++] = DeviceInput(DEVICE_KEYBOARD, KEY_Ce); g_Mappings.debugButton[i++] = DeviceInput(DEVICE_KEYBOARD, KEY_Cr); g_Mappings.debugButton[i++] = DeviceInput(DEVICE_KEYBOARD, KEY_Ct); g_Mappings.debugButton[i++] = DeviceInput(DEVICE_KEYBOARD, KEY_Cy); g_Mappings.debugButton[i++] = DeviceInput(DEVICE_KEYBOARD, KEY_Cu); g_Mappings.debugButton[i++] = DeviceInput(DEVICE_KEYBOARD, KEY_Ci); g_Mappings.debugButton[i++] = DeviceInput(DEVICE_KEYBOARD, KEY_Co); g_Mappings.debugButton[i++] = DeviceInput(DEVICE_KEYBOARD, KEY_Cp); g_Mappings.debugButton[i++] = DeviceInput(DEVICE_KEYBOARD, KEY_UP); g_Mappings.debugButton[i++] = DeviceInput(DEVICE_KEYBOARD, KEY_DOWN); g_Mappings.debugButton[i++] = DeviceInput(DEVICE_KEYBOARD, KEY_BACK); g_Mappings.pageButton[DeviceInput(DEVICE_KEYBOARD, KEY_F5)] = 0; g_Mappings.pageButton[DeviceInput(DEVICE_KEYBOARD, KEY_F6)] = 1; g_Mappings.pageButton[DeviceInput(DEVICE_KEYBOARD, KEY_F7)] = 2; g_Mappings.pageButton[DeviceInput(DEVICE_KEYBOARD, KEY_F8)] = 3; } map<RString,int> iNextDebugButton; int iNextGameplayButton = 0; FOREACH( IDebugLine*, *g_pvpSubscribers, p ) { RString sPageName = (*p)->GetPageName(); DeviceInput di; switch( (*p)->GetType() ) { case IDebugLine::all_screens: di = g_Mappings.debugButton[iNextDebugButton[sPageName]++]; break; case IDebugLine::gameplay_only: di = g_Mappings.gameplayButton[iNextGameplayButton++]; break; } (*p)->m_Button = di; if( find(m_asPages.begin(), m_asPages.end(), sPageName) == m_asPages.end() ) m_asPages.push_back( sPageName ); } m_iCurrentPage = 0; m_bForcedHidden = false; m_Quad.StretchTo( RectF( 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT ) ); m_Quad.SetDiffuse( BACKGROUND_COLOR ); this->AddChild( &m_Quad ); // if you're going to add user commands, make sure to have the overrides // set after parsing the metrics. -aj m_textHeader.SetName( "HeaderText" ); m_textHeader.LoadFromFont( THEME->GetPathF("ScreenDebugOverlay", "header") ); LOAD_ALL_COMMANDS_AND_SET_XY_AND_ON_COMMAND( m_textHeader ); m_textHeader.SetText( DEBUG_MENU ); this->AddChild( &m_textHeader ); FOREACH_CONST( RString, m_asPages, s ) { int iPage = s - m_asPages.begin(); DeviceInput di; bool b = GetKeyFromMap( g_Mappings.pageButton, iPage, di ); ASSERT( b ); RString sButton = INPUTMAN->GetDeviceSpecificInputString( di ); BitmapText *p = new BitmapText; p->SetName( "PageText" ); p->LoadFromFont( THEME->GetPathF("ScreenDebugOverlay", "page") ); LOAD_ALL_COMMANDS_AND_ON_COMMAND( p ); // todo: Y value is still hardcoded. -aj p->SetXY( PAGE_START_X+iPage*PAGE_SPACING_X, SCREEN_TOP+20 ); p->SetText( *s + " (" + sButton + ")" ); m_vptextPages.push_back( p ); this->AddChild( p ); }
void ScreenHowToPlay::Init() { ScreenAttract::Init(); if( (bool)USE_PAD && DoesFileExist( GetAnimPath(ANIM_DANCE_PAD) ) ) { m_pmDancePad = new Model; m_pmDancePad->SetName( "Pad" ); m_pmDancePad->LoadMilkshapeAscii( GetAnimPath(ANIM_DANCE_PAD) ); m_pmDancePad->SetRotationX( 35 ); LOAD_ALL_COMMANDS_AND_SET_XY_AND_ON_COMMAND( m_pmDancePad ); } // Display random character vector<Character*> vpCharacters; CHARMAN->GetCharacters( vpCharacters ); if( (bool)USE_CHARACTER && vpCharacters.size() && HaveAllCharAnimations() ) { Character* rndchar = CHARMAN->GetRandomCharacter(); RString sModelPath = rndchar->GetModelPath(); if( sModelPath != "" ) { m_pmCharacter = new Model; m_pmCharacter->SetName( "Character" ); m_pmCharacter->LoadMilkshapeAscii( rndchar->GetModelPath() ); m_pmCharacter->LoadMilkshapeAsciiBones( "Step-LEFT", GetAnimPath( ANIM_LEFT ) ); m_pmCharacter->LoadMilkshapeAsciiBones( "Step-DOWN", GetAnimPath( ANIM_DOWN ) ); m_pmCharacter->LoadMilkshapeAsciiBones( "Step-UP", GetAnimPath( ANIM_UP ) ); m_pmCharacter->LoadMilkshapeAsciiBones( "Step-RIGHT", GetAnimPath( ANIM_RIGHT ) ); m_pmCharacter->LoadMilkshapeAsciiBones( "Step-JUMPLR", GetAnimPath( ANIM_JUMPLR ) ); RString sRestFile = rndchar->GetRestAnimationPath(); ASSERT( !sRestFile.empty() ); m_pmCharacter->LoadMilkshapeAsciiBones( "rest",rndchar->GetRestAnimationPath() ); m_pmCharacter->SetDefaultAnimation( "rest" ); m_pmCharacter->PlayAnimation( "rest" ); // Stay bouncing after a step has finished animating. m_pmCharacter->SetRotationX( 40 ); m_pmCharacter->SetCullMode( CULL_NONE ); // many of the models floating around have the vertex order flipped LOAD_ALL_COMMANDS_AND_SET_XY_AND_ON_COMMAND( m_pmCharacter ); } } GAMESTATE->SetCurrentStyle( GAMEMAN->GetHowToPlayStyleForGame(GAMESTATE->m_pCurGame) ); if( USE_PLAYER ) { m_pLifeMeterBar = new LifeMeterBar; m_pLifeMeterBar->SetName("LifeMeterBar"); m_pLifeMeterBar->Load( GAMESTATE->m_pPlayerState[PLAYER_1], &STATSMAN->m_CurStageStats.m_player[PLAYER_1] ); LOAD_ALL_COMMANDS_AND_SET_XY_AND_ON_COMMAND( m_pLifeMeterBar ); m_pLifeMeterBar->FillForHowToPlay( NUM_W2S, NUM_MISSES ); SMLoader::LoadFromSMFile( THEME->GetPathO(m_sName, "steps"), m_Song, false ); m_Song.AddAutoGenNotes(); const Style* pStyle = GAMESTATE->GetCurrentStyle(); Steps *pSteps = SongUtil::GetStepsByDescription( &m_Song, pStyle->m_StepsType, "" ); ASSERT_M( pSteps != NULL, ssprintf("%i", pStyle->m_StepsType) ); NoteData tempNoteData; pSteps->GetNoteData( tempNoteData ); pStyle->GetTransformedNoteDataForStyle( PLAYER_1, tempNoteData, m_NoteData ); GAMESTATE->m_pCurSong.Set( &m_Song ); GAMESTATE->m_bGameplayLeadIn.Set( false ); GAMESTATE->m_pPlayerState[PLAYER_1]->m_PlayerController = PC_AUTOPLAY; m_Player->Init( "Player", GAMESTATE->m_pPlayerState[PLAYER_1], NULL, m_pLifeMeterBar, NULL, NULL, NULL, NULL, NULL, NULL ); m_Player.Load( m_NoteData ); m_Player->SetName( "Player" ); this->AddChild( m_Player ); LOAD_ALL_COMMANDS_AND_SET_XY_AND_ON_COMMAND( m_Player ); // Don't show judgement PO_GROUP_ASSIGN( GAMESTATE->m_pPlayerState[PLAYER_1]->m_PlayerOptions, ModsLevel_Stage, m_fBlind, 1.0f ); GAMESTATE->m_MasterPlayerNumber = PLAYER_1; GAMESTATE->m_bDemonstrationOrJukebox = true; } // deferred until after the player, so the notes go under it if( m_pLifeMeterBar ) this->AddChild( m_pLifeMeterBar ); if( m_pmDancePad ) this->AddChild( m_pmDancePad ); if( m_pmCharacter ) this->AddChild( m_pmCharacter ); m_fFakeSecondsIntoSong = 0; this->MoveToTail( &m_In ); this->MoveToTail( &m_Out ); }
void ScreenNetSelectMusic::Init() { /* Finish any previous stage. It's OK to call this when we haven't played a stage yet. */ GAMESTATE->FinishStage(); ScreenNetSelectBase::Init(); //Diff Icon background m_sprDiff.Load( THEME->GetPathG( m_sName, "DiffBG" ) ); m_sprDiff.SetName( "DiffBG" ); m_sprDiff.SetWidth( DIFFBG_WIDTH ); m_sprDiff.SetHeight( DIFFBG_HEIGHT ); LOAD_ALL_COMMANDS_AND_SET_XY_AND_ON_COMMAND( m_sprDiff ); this->AddChild( &m_sprDiff); FOREACH_EnabledPlayer (p) { m_DifficultyIcon[p].SetName( ssprintf("DifficultyIconP%d",p+1) ); m_DifficultyIcon[p].Load( THEME->GetPathG( "ScreenSelectMusic", ssprintf("difficulty icons 1x%d", NUM_Difficulty)) ); LOAD_ALL_COMMANDS_AND_SET_XY( m_DifficultyIcon[p] ); this->AddChild( &m_DifficultyIcon[p] ); ON_COMMAND( m_DifficultyIcon[p] ); m_DC[p] = GAMESTATE->m_PreferredDifficulty[p]; m_StepsDisplays[p].SetName( ssprintf("MeterP%d",p+1) ); m_StepsDisplays[p].Load( "StepsDisplay", NULL ); LOAD_ALL_COMMANDS_AND_SET_XY_AND_ON_COMMAND( m_StepsDisplays[p] ); this->AddChild( &m_StepsDisplays[p] ); } m_MusicWheel.SetName( "MusicWheel" ); m_MusicWheel.Load( "MusicWheel" ); LOAD_ALL_COMMANDS_AND_SET_XY( m_MusicWheel ); m_MusicWheel.BeginScreen(); ON_COMMAND( m_MusicWheel ); this->AddChild( &m_MusicWheel ); this->MoveToHead( &m_MusicWheel ); m_BPMDisplay.SetName( "BPMDisplay" ); m_BPMDisplay.LoadFromFont( THEME->GetPathF("BPMDisplay","bpm") ); m_BPMDisplay.Load(); LOAD_ALL_COMMANDS_AND_SET_XY_AND_ON_COMMAND( m_BPMDisplay ); this->AddChild( &m_BPMDisplay ); FOREACH_EnabledPlayer( p ) { m_ModIconRow[p].SetName( ssprintf("ModIconsP%d",p+1) ); m_ModIconRow[p].Load( "ModIconRowSelectMusic", p ); m_ModIconRow[p].SetFromGameState(); LOAD_ALL_COMMANDS_AND_SET_XY_AND_ON_COMMAND( m_ModIconRow[p] ); this->AddChild( &m_ModIconRow[p] ); } //Load SFX next m_soundChangeOpt.Load( THEME->GetPathS(m_sName,"change opt") ); m_soundChangeSel.Load( THEME->GetPathS(m_sName,"change sel") ); NSMAN->ReportNSSOnOff(1); NSMAN->ReportPlayerOptions(); m_bInitialSelect = false; m_bAllowInput = false; }