void ScreenNetSelectMusic::HandleScreenMessage( const ScreenMessage SM )
{
	if( SM == SM_GoToPrevScreen )
	{
		SCREENMAN->SetNewScreen( THEME->GetMetric (m_sName, "PrevScreen") );
	}
	else if( SM == SM_GoToNextScreen )
	{
		SOUND->StopMusic();
		SCREENMAN->SetNewScreen( THEME->GetMetric (m_sName, "NextScreen") );
	}
	else if( SM == SM_UsersUpdate )
	{
		m_MusicWheel.Move( 0 );
	}
	else if( SM == SM_NoSongs )
	{
		SCREENMAN->SetNewScreen( THEME->GetMetric (m_sName, "NoSongsScreen") );
	}
	else if( SM == SM_ChangeSong )
	{
		// First check to see if this song is already selected. This is so that if
		// you have multiple copies of the "same" song you can chose which copy to play.
		Song* CurSong = m_MusicWheel.GetSelectedSong();

		if(CurSong != NULL )

			if( ( !CurSong->GetTranslitArtist().CompareNoCase( NSMAN->m_sArtist ) ) &&
					( !CurSong->GetTranslitMainTitle().CompareNoCase( NSMAN->m_sMainTitle ) ) &&
					( !CurSong->GetTranslitSubTitle().CompareNoCase( NSMAN->m_sSubTitle ) ) )
		{
			switch ( NSMAN->m_iSelectMode )
			{
			case 0:
			case 1:
				NSMAN->m_iSelectMode = 0;
				NSMAN->SelectUserSong();
				break;
			case 2:	// Proper starting of song
			case 3:	// Blind starting of song
				StartSelectedSong();
				goto done;
			}
		}

		vector <Song *> AllSongs = SONGMAN->GetAllSongs();
		unsigned i;
		for( i=0; i < AllSongs.size(); i++ )
		{
			m_cSong = AllSongs[i];
			if( ( !m_cSong->GetTranslitArtist().CompareNoCase( NSMAN->m_sArtist ) ) &&
					( !m_cSong->GetTranslitMainTitle().CompareNoCase( NSMAN->m_sMainTitle ) ) &&
					( !m_cSong->GetTranslitSubTitle().CompareNoCase( NSMAN->m_sSubTitle ) ) )
					break;
		}

		bool haveSong = i != AllSongs.size();

		switch (NSMAN->m_iSelectMode)
		{
		case 3:
			StartSelectedSong();
			break;
		case 2: // We need to do cmd 1 as well here
			if(haveSong)
			{
				if(!m_MusicWheel.SelectSong( m_cSong ) )
				{
					m_MusicWheel.ChangeSort( SORT_GROUP );
					m_MusicWheel.FinishTweening();
					SCREENMAN->PostMessageToTopScreen( SM_SetWheelSong, 0.710f );
				}
				m_MusicWheel.Select();
				m_MusicWheel.Move(-1);
				m_MusicWheel.Move(1);
				StartSelectedSong();
				m_MusicWheel.Select();
			}
			break;
		case 1:	// Scroll to song as well
			if(haveSong)
			{
				if(!m_MusicWheel.SelectSong( m_cSong ) )
				{
					//m_MusicWheel.ChangeSort( SORT_GROUP );
					//m_MusicWheel.FinishTweening();
					//SCREENMAN->PostMessageToTopScreen( SM_SetWheelSong, 0.710f );
					m_MusicWheel.ChangeSort( SORT_GROUP );
					m_MusicWheel.SetOpenSection( "" );
				}
				m_MusicWheel.SelectSong( m_cSong );
				m_MusicWheel.Select();
				m_MusicWheel.Move(-1);
				m_MusicWheel.Move(1);
				m_MusicWheel.Select();
			}
			// don't break here
		case 0:	// See if client has song
			if(haveSong)
				NSMAN->m_iSelectMode = 0;
			else
				NSMAN->m_iSelectMode = 1;
			NSMAN->SelectUserSong();
		}
	}
	else if( SM == SM_SetWheelSong ) // After we've done the sort on wheel, select song.
	{
		m_MusicWheel.SelectSong( m_cSong );
	}
	else if( SM == SM_RefreshWheelLocation )
	{
		m_MusicWheel.Select();
		m_MusicWheel.Move(-1);
		m_MusicWheel.Move(1);
		m_MusicWheel.Select();
		m_bAllowInput = true;
	}
	else if( SM == SM_BackFromPlayerOptions )
	{
		// XXX HACK: This will cause ScreenSelectOptions to go back here.
		NSMAN->ReportNSSOnOff(1);
		GAMESTATE->m_EditMode = EditMode_Invalid;
		NSMAN->ReportPlayerOptions();

		// Update changes
		FOREACH_EnabledPlayer(p)
			m_ModIconRow[p].SetFromGameState();
	}
	else if( SM == SM_SongChanged )
	{
		GAMESTATE->m_pCurSong.Set( m_MusicWheel.GetSelectedSong() );
		MusicChanged();
	}
	else if( SM == SM_SMOnlinePack )
	{
		if( NSMAN->m_SMOnlinePacket.Read1() == 1 )
		{
			switch ( NSMAN->m_SMOnlinePacket.Read1() )
			{
			case 0: // Room title Change
				{
					RString titleSub;
					titleSub = NSMAN->m_SMOnlinePacket.ReadNT() + "\n";
					titleSub += NSMAN->m_SMOnlinePacket.ReadNT();
					if( NSMAN->m_SMOnlinePacket.Read1() != 1 )
					{
						RString SMOnlineSelectScreen = THEME->GetMetric( m_sName, "RoomSelectScreen" );
						SCREENMAN->SetNewScreen( SMOnlineSelectScreen );
					}
				}
			}
		}
	}

done:
	// Must be at end, as so it is last resort for SMOnline packets.
	// If it doesn't know what to do, then it'll just remove them.
	ScreenNetSelectBase::HandleScreenMessage( SM );
}
Example #2
0
void ScreenEz2SelectMusic::Init()
{
	ScreenWithMenuElements::Init();

	i_SkipAheadOffset = 0;
	LastInputTime = 0;
	ScrollStartTime = 0;
	m_bTransitioning = false;
	m_bScanning = false;
	m_fRemainingWaitTime = 0.0f;
	i_ErrorDetected=0;

	if(PREVIEWMUSICMODE == 4)
	{
		m_soundBackMusic.Load( THEME->GetPathS("ScreenEz2SelectMusic","music"));
		m_soundBackMusic.Play();
	}

	if(PREVIEWMUSICMODE == 1 || PREVIEWMUSICMODE == 3)
	{
		if(PREVIEWMUSICMODE == 1)
			SOUND->StopMusic();
		iConfirmSelection = 0;
	}



	m_soundButtonPress.Load( THEME->GetPathS("ScreenEz2SelectMusic","buttonpress"));
	m_soundMusicChange.Load( THEME->GetPathS("ScreenEz2SelectMusic","change"));
	m_soundMusicCycle.Load( THEME->GetPathS("ScreenEz2SelectMusic","cycle"));

	m_ChoiceListFrame.Load( THEME->GetPathG("ScreenEz2SelectMusic","list frame"));
	m_ChoiceListFrame.SetXY( SCROLLING_LIST_X, SCROLLING_LIST_Y);
	this->AddChild( &m_ChoiceListFrame );

	m_MusicBannerWheel.SetX(SCROLLING_LIST_X);
	m_MusicBannerWheel.SetY(SCROLLING_LIST_Y);
	m_MusicBannerWheel.SetRotationZ(SCROLLING_LIST_ROT);

	if(m_MusicBannerWheel.CheckSongsExist() != 0)
	{
		this->AddChild( &m_MusicBannerWheel );


		m_ChoiceListHighlight.Load( THEME->GetPathG("ScreenEz2SelectMusic","list highlight"));
		m_ChoiceListHighlight.SetXY( SCROLLING_LIST_X, SCROLLING_LIST_Y);
		this->AddChild( &m_ChoiceListHighlight );


		FOREACH_PlayerNumber( p )
		{
		//	m_FootMeter[p].SetXY( METER_X(p), METER_Y(p) );
		//	m_FootMeter[p].SetShadowLength( 2 );
		//	this->AddChild( &m_FootMeter[p] );

			m_SpeedIcon[p].Load( THEME->GetPathG("ScreenEz2SelectMusic","speedicon"));
			m_SpeedIcon[p].SetXY( SPEEDICON_X(p), SPEEDICON_Y(p) );
			m_SpeedIcon[p].SetDiffuse( RageColor(0,0,0,0) );
			this->AddChild(&m_SpeedIcon[p] );

			m_MirrorIcon[p].Load( THEME->GetPathG("ScreenEz2SelectMusic","mirroricon"));
			m_MirrorIcon[p].SetXY( MIRRORICON_X(p), MIRRORICON_Y(p) );
			m_MirrorIcon[p].SetDiffuse( RageColor(0,0,0,0) );
			this->AddChild(&m_MirrorIcon[p] );

			m_ShuffleIcon[p].Load( THEME->GetPathG("ScreenEz2SelectMusic","shuffleicon"));
			m_ShuffleIcon[p].SetXY( SHUFFLEICON_X(p), SHUFFLEICON_Y(p) );
			m_ShuffleIcon[p].SetDiffuse( RageColor(0,0,0,0) );
			this->AddChild(&m_ShuffleIcon[p] );

			m_HiddenIcon[p].Load( THEME->GetPathG("ScreenEz2SelectMusic","hiddenicon"));
			m_HiddenIcon[p].SetXY( HIDDENICON_X(p), HIDDENICON_Y(p) );
			m_HiddenIcon[p].SetDiffuse( RageColor(0,0,0,0) );
			this->AddChild(&m_HiddenIcon[p] );

			m_VanishIcon[p].Load( THEME->GetPathG("ScreenEz2SelectMusic","vanishicon"));
			m_VanishIcon[p].SetXY( VANISHICON_X(p), VANISHICON_Y(p) );
			m_VanishIcon[p].SetDiffuse( RageColor(0,0,0,0) );
			this->AddChild(&m_VanishIcon[p] );

			UpdateOptions( p,0);

			m_iSelection[p] = 0;
		}

		m_Guide.Load( THEME->GetPathG("ScreenEz2SelectMusic","guide"));
		m_Guide.SetXY( GUIDE_X, GUIDE_Y );
		this->AddChild( &m_Guide );

		m_InfoFrame.Load( THEME->GetPathG("ScreenEz2SelectMusic","infoframe") );
		m_InfoFrame.SetXY( INFOFRAME_X, INFOFRAME_Y );
		this->AddChild( &m_InfoFrame );

#ifdef _XBOX
		//shorten filenames for FATX
		m_PumpDifficultyCircle.Load( THEME->GetPathG("ScreenEz2SelectMusic","diff frame"));
#else
		m_PumpDifficultyCircle.Load( THEME->GetPathG("ScreenEz2SelectMusic","difficulty frame"));
#endif

		m_PumpDifficultyCircle.SetXY( PUMP_DIFF_X, PUMP_DIFF_Y );
		this->AddChild( &m_PumpDifficultyCircle );

		m_PumpDifficultyRating.LoadFromFont( THEME->GetPathF("ScreenEz2SelectMusic","difficulty") );
		m_PumpDifficultyRating.SetXY( PUMP_DIFF_X, PUMP_DIFF_Y );
		this->AddChild(&m_PumpDifficultyRating);

		m_CurrentGroup.LoadFromFont( THEME->GetPathF("ScreenEz2SelectMusic","GroupName") );
		m_CurrentGroup.SetXY( GROUPNAME_X, GROUPNAME_Y );
		this->AddChild(&m_CurrentGroup );

		m_CurrentTitle.LoadFromFont( THEME->GetPathF("ScreenEz2SelectMusic","GroupName") );
		m_CurrentTitle.SetXY( TITLE_X, TITLE_Y );
		this->AddChild(&m_CurrentTitle );

		m_CurrentSubTitle.LoadFromFont( THEME->GetPathF("ScreenEz2SelectMusic","GroupName") );
		m_CurrentSubTitle.SetXY( SUBTITLE_X, SUBTITLE_Y );
		m_CurrentSubTitle.SetZoom(0.8f);
		this->AddChild(&m_CurrentTitle );

		m_CurrentArtist.LoadFromFont( THEME->GetPathF("ScreenEz2SelectMusic","GroupName") );
		m_CurrentArtist.SetXY( ARTIST_X, ARTIST_Y );
		this->AddChild(&m_CurrentArtist );

		m_DifficultyRating.SetOrientation(DIFFICULTYRATING_ORIENTATION);
		m_DifficultyRating.SetX(DIFFICULTYRATING_X);
		m_DifficultyRating.SetY(DIFFICULTYRATING_Y);
		this->AddChild(&m_DifficultyRating);

		m_sprOptionsMessage.Load( THEME->GetPathG("ScreenEz2SelectMusic","options message") );
		m_sprOptionsMessage.StopAnimating();
		m_sprOptionsMessage.SetXY( SCREEN_CENTER_X, SCREEN_CENTER_Y );
		m_sprOptionsMessage.SetZoom( 1 );
		m_sprOptionsMessage.SetDiffuse( RageColor(1,1,1,0) );
		this->AddChild( &m_sprOptionsMessage );

		if(USE_MODE_SWITCHER == 1)
		{
			m_ModeSwitcher.SetXY(SCREEN_CENTER_X,SCREEN_CENTER_Y);
			this->AddChild( &m_ModeSwitcher );
		}

		m_sprBalloon.SetName( "Balloon" );
		TEXTUREMAN->CacheTexture( THEME->GetPathG("ScreenSelectMusic","balloon long") );
		TEXTUREMAN->CacheTexture( THEME->GetPathG("ScreenSelectMusic","balloon marathon") );
		this->AddChild( &m_sprBalloon );

		m_soundOptionsChange.Load( THEME->GetPathS("ScreenEz2SelectMusic","options") );

		m_bGoToOptions = false;
		m_bMadeChoice = false;

		MusicChanged();
	}