Implement CDTitles using culling, so dimming always happens at the
right time.
This commit is contained in:
@@ -47,6 +47,18 @@ const int NUM_SCORE_DIGITS = 9;
|
|||||||
|
|
||||||
static const ScreenMessage SM_AllowOptionsMenuRepeat = ScreenMessage(SM_User+1);
|
static const ScreenMessage SM_AllowOptionsMenuRepeat = ScreenMessage(SM_User+1);
|
||||||
|
|
||||||
|
/* We make a backface for the CDTitle by rotating it on Y and mirroring it
|
||||||
|
* on Y by flipping texture coordinates. */
|
||||||
|
static void FlipSpriteHorizontally(Sprite &s)
|
||||||
|
{
|
||||||
|
float Coords[8];
|
||||||
|
s.GetCurrentTextureCoords(Coords);
|
||||||
|
swap(Coords[0], Coords[6]); /* top left X <-> top right X */
|
||||||
|
swap(Coords[1], Coords[7]); /* top left Y <-> top right Y */
|
||||||
|
swap(Coords[2], Coords[4]); /* bottom left X <-> bottom left X */
|
||||||
|
swap(Coords[3], Coords[5]); /* bottom left Y <-> bottom left Y */
|
||||||
|
s.SetCustomTextureCoords(Coords);
|
||||||
|
}
|
||||||
|
|
||||||
ScreenSelectMusic::ScreenSelectMusic() : Screen("ScreenSelectMusic")
|
ScreenSelectMusic::ScreenSelectMusic() : Screen("ScreenSelectMusic")
|
||||||
{
|
{
|
||||||
@@ -94,9 +106,21 @@ ScreenSelectMusic::ScreenSelectMusic() : Screen("ScreenSelectMusic")
|
|||||||
m_sprStage.Load( THEME->GetPathToG("ScreenSelectMusic stage "+GAMESTATE->GetStageText()) );
|
m_sprStage.Load( THEME->GetPathToG("ScreenSelectMusic stage "+GAMESTATE->GetStageText()) );
|
||||||
this->AddChild( &m_sprStage );
|
this->AddChild( &m_sprStage );
|
||||||
|
|
||||||
m_sprCDTitle.SetName( "CDTitle" );
|
m_sprCDTitleFront.SetName( "CDTitle" );
|
||||||
m_sprCDTitle.Load( THEME->GetPathToG("ScreenSelectMusic fallback cdtitle") );
|
m_sprCDTitleFront.Load( THEME->GetPathToG("ScreenSelectMusic fallback cdtitle") );
|
||||||
this->AddChild( &m_sprCDTitle );
|
m_sprCDTitleFront.SetUseBackfaceCull(true);
|
||||||
|
m_sprCDTitleFront.SetDiffuse( RageColor(1,1,1,1) );
|
||||||
|
m_sprCDTitleFront.SetEffectSpin( RageVector3(0, 90, 0) );
|
||||||
|
this->AddChild( &m_sprCDTitleFront );
|
||||||
|
|
||||||
|
m_sprCDTitleBack.SetName( "CDTitle" );
|
||||||
|
m_sprCDTitleBack.Load( THEME->GetPathToG("ScreenSelectMusic fallback cdtitle") );
|
||||||
|
FlipSpriteHorizontally(m_sprCDTitleBack);
|
||||||
|
m_sprCDTitleBack.SetUseBackfaceCull(true);
|
||||||
|
m_sprCDTitleBack.SetDiffuse( RageColor(0.2f,0.2f,0.2f,1) );
|
||||||
|
m_sprCDTitleBack.SetRotationY( 180 );
|
||||||
|
m_sprCDTitleBack.SetEffectSpin( RageVector3(0, 90, 0) );
|
||||||
|
this->AddChild( &m_sprCDTitleBack );
|
||||||
|
|
||||||
m_GrooveRadar.SetName( "Radar" );
|
m_GrooveRadar.SetName( "Radar" );
|
||||||
if( SHOW_RADAR )
|
if( SHOW_RADAR )
|
||||||
@@ -216,7 +240,8 @@ void ScreenSelectMusic::TweenOnScreen()
|
|||||||
SET_XY_AND_ON_COMMAND( m_sprBannerFrame );
|
SET_XY_AND_ON_COMMAND( m_sprBannerFrame );
|
||||||
SET_XY_AND_ON_COMMAND( m_BPMDisplay );
|
SET_XY_AND_ON_COMMAND( m_BPMDisplay );
|
||||||
SET_XY_AND_ON_COMMAND( m_sprStage );
|
SET_XY_AND_ON_COMMAND( m_sprStage );
|
||||||
SET_XY_AND_ON_COMMAND( m_sprCDTitle );
|
SET_XY_AND_ON_COMMAND( m_sprCDTitleFront );
|
||||||
|
SET_XY_AND_ON_COMMAND( m_sprCDTitleBack );
|
||||||
m_GrooveRadar.TweenOnScreen();
|
m_GrooveRadar.TweenOnScreen();
|
||||||
SET_XY_AND_ON_COMMAND( m_GrooveRadar );
|
SET_XY_AND_ON_COMMAND( m_GrooveRadar );
|
||||||
m_GrooveGraph.TweenOnScreen();
|
m_GrooveGraph.TweenOnScreen();
|
||||||
@@ -252,7 +277,8 @@ void ScreenSelectMusic::TweenOffScreen()
|
|||||||
OFF_COMMAND( m_sprBannerFrame );
|
OFF_COMMAND( m_sprBannerFrame );
|
||||||
OFF_COMMAND( m_BPMDisplay );
|
OFF_COMMAND( m_BPMDisplay );
|
||||||
OFF_COMMAND( m_sprStage );
|
OFF_COMMAND( m_sprStage );
|
||||||
OFF_COMMAND( m_sprCDTitle );
|
OFF_COMMAND( m_sprCDTitleFront );
|
||||||
|
OFF_COMMAND( m_sprCDTitleBack );
|
||||||
m_GrooveRadar.TweenOffScreen();
|
m_GrooveRadar.TweenOffScreen();
|
||||||
OFF_COMMAND( m_GrooveRadar );
|
OFF_COMMAND( m_GrooveRadar );
|
||||||
m_GrooveGraph.TweenOffScreen();
|
m_GrooveGraph.TweenOffScreen();
|
||||||
@@ -334,17 +360,6 @@ void ScreenSelectMusic::Update( float fDeltaTime )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
float fNewRotation = m_sprCDTitle.GetRotationY()+90*fDeltaTime;
|
|
||||||
fNewRotation = fmodf( fNewRotation, 360 );
|
|
||||||
m_sprCDTitle.SetRotationY( fNewRotation );
|
|
||||||
/* Hack: +11 fixes the switch time in the default theme. This will break if
|
|
||||||
* the sprite is moved. To do this right, we should probably have two sprites,
|
|
||||||
* one lit and one unlit, with backface culling on. */
|
|
||||||
if( fNewRotation > 90+11 && fNewRotation <= 270+11 )
|
|
||||||
m_sprCDTitle.SetDiffuse( RageColor(0.2f,0.2f,0.2f,1) );
|
|
||||||
else
|
|
||||||
m_sprCDTitle.SetDiffuse( RageColor(1,1,1,1) );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScreenSelectMusic::Input( const DeviceInput& DeviceI, InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI )
|
void ScreenSelectMusic::Input( const DeviceInput& DeviceI, InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI )
|
||||||
@@ -778,7 +793,8 @@ void ScreenSelectMusic::AfterMusicChange()
|
|||||||
if(!no_banner_change)
|
if(!no_banner_change)
|
||||||
m_Banner.LoadFromGroup( sGroup ); // if this isn't a group, it'll default to the fallback banner
|
m_Banner.LoadFromGroup( sGroup ); // if this isn't a group, it'll default to the fallback banner
|
||||||
m_BPMDisplay.NoBPM();
|
m_BPMDisplay.NoBPM();
|
||||||
m_sprCDTitle.UnloadTexture();
|
m_sprCDTitleFront.UnloadTexture();
|
||||||
|
m_sprCDTitleBack.UnloadTexture();
|
||||||
|
|
||||||
m_sprBalloon.StopTweening();
|
m_sprBalloon.StopTweening();
|
||||||
OFF_COMMAND( m_sprBalloon );
|
OFF_COMMAND( m_sprBalloon );
|
||||||
@@ -812,10 +828,11 @@ void ScreenSelectMusic::AfterMusicChange()
|
|||||||
m_BPMDisplay.SetBPMRange( fMinBPM, fMaxBPM );
|
m_BPMDisplay.SetBPMRange( fMinBPM, fMaxBPM );
|
||||||
}
|
}
|
||||||
|
|
||||||
if( pSong->HasCDTitle() )
|
const CString CDTitlePath = pSong->HasCDTitle()? pSong->GetCDTitlePath():THEME->GetPathToG("ScreenSelectMusic fallback cdtitle");
|
||||||
m_sprCDTitle.Load( pSong->GetCDTitlePath() );
|
m_sprCDTitleFront.Load( CDTitlePath );
|
||||||
else
|
m_sprCDTitleBack.Load( CDTitlePath );
|
||||||
m_sprCDTitle.Load( THEME->GetPathToG("ScreenSelectMusic fallback cdtitle") );
|
FlipSpriteHorizontally(m_sprCDTitleBack);
|
||||||
|
|
||||||
for( int p=0; p<NUM_PLAYERS; p++ )
|
for( int p=0; p<NUM_PLAYERS; p++ )
|
||||||
{
|
{
|
||||||
if( !GAMESTATE->IsHumanPlayer( PlayerNumber(p) ) )
|
if( !GAMESTATE->IsHumanPlayer( PlayerNumber(p) ) )
|
||||||
@@ -864,7 +881,8 @@ void ScreenSelectMusic::AfterMusicChange()
|
|||||||
if(!no_banner_change)
|
if(!no_banner_change)
|
||||||
m_Banner.LoadRoulette();
|
m_Banner.LoadRoulette();
|
||||||
m_BPMDisplay.NoBPM();
|
m_BPMDisplay.NoBPM();
|
||||||
m_sprCDTitle.UnloadTexture();
|
m_sprCDTitleFront.UnloadTexture();
|
||||||
|
m_sprCDTitleBack.UnloadTexture();
|
||||||
|
|
||||||
SOUNDMAN->StopMusic();
|
SOUNDMAN->StopMusic();
|
||||||
m_fPlaySampleCountdown = SAMPLE_MUSIC_DELAY;
|
m_fPlaySampleCountdown = SAMPLE_MUSIC_DELAY;
|
||||||
@@ -879,7 +897,8 @@ void ScreenSelectMusic::AfterMusicChange()
|
|||||||
if(!no_banner_change)
|
if(!no_banner_change)
|
||||||
m_Banner.LoadRandom();
|
m_Banner.LoadRandom();
|
||||||
m_BPMDisplay.NoBPM();
|
m_BPMDisplay.NoBPM();
|
||||||
m_sprCDTitle.UnloadTexture();
|
m_sprCDTitleFront.UnloadTexture();
|
||||||
|
m_sprCDTitleBack.UnloadTexture();
|
||||||
|
|
||||||
SOUNDMAN->StopMusic();
|
SOUNDMAN->StopMusic();
|
||||||
m_fPlaySampleCountdown = SAMPLE_MUSIC_DELAY;
|
m_fPlaySampleCountdown = SAMPLE_MUSIC_DELAY;
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ protected:
|
|||||||
Sprite m_sprBannerFrame;
|
Sprite m_sprBannerFrame;
|
||||||
BPMDisplay m_BPMDisplay;
|
BPMDisplay m_BPMDisplay;
|
||||||
Sprite m_sprStage;
|
Sprite m_sprStage;
|
||||||
Sprite m_sprCDTitle;
|
Sprite m_sprCDTitleFront, m_sprCDTitleBack;
|
||||||
Sprite m_sprDifficultyFrame[NUM_PLAYERS];
|
Sprite m_sprDifficultyFrame[NUM_PLAYERS];
|
||||||
DifficultyIcon m_DifficultyIcon[NUM_PLAYERS];
|
DifficultyIcon m_DifficultyIcon[NUM_PLAYERS];
|
||||||
Sprite m_AutoGenIcon[NUM_PLAYERS];
|
Sprite m_AutoGenIcon[NUM_PLAYERS];
|
||||||
|
|||||||
Reference in New Issue
Block a user