diff --git a/stepmania/src/Background.cpp b/stepmania/src/Background.cpp index e521f862c8..146bdf3ee9 100644 --- a/stepmania/src/Background.cpp +++ b/stepmania/src/Background.cpp @@ -39,7 +39,7 @@ const float FADE_SECONDS = 1.0f; #define BOTTOM_EDGE THEME->GetMetricF("Background","BottomEdge") CachedThemeMetricB BLINK_DANGER_ALL("Background","BlinkDangerAll"); CachedThemeMetricB DANGER_ALL_IS_OPAQUE("Background","DangerAllIsOpaque"); - +#define BRIGHTNESS_FADE_COMMAND THEME->GetMetric("Background","BrightnessFadeCommand") #define RECT_BACKGROUND RectF(LEFT_EDGE,TOP_EDGE,RIGHT_EDGE,BOTTOM_EDGE) static float g_fBackgroundCenterWidth = 40; @@ -82,6 +82,20 @@ Background::Background() else m_pDancingCharacters = NULL; + m_quadBorder[0].StretchTo( RectF(SCREEN_LEFT,SCREEN_TOP,LEFT_EDGE,SCREEN_BOTTOM) ); + m_quadBorder[0].SetDiffuse( RageColor(0,0,0,1) ); + m_quadBorder[1].StretchTo( RectF(LEFT_EDGE,SCREEN_TOP,RIGHT_EDGE,TOP_EDGE) ); + m_quadBorder[1].SetDiffuse( RageColor(0,0,0,1) ); + m_quadBorder[2].StretchTo( RectF(RIGHT_EDGE,SCREEN_TOP,SCREEN_RIGHT,SCREEN_BOTTOM) ); + m_quadBorder[2].SetDiffuse( RageColor(0,0,0,1) ); + m_quadBorder[3].StretchTo( RectF(LEFT_EDGE,BOTTOM_EDGE,RIGHT_EDGE,SCREEN_BOTTOM) ); + m_quadBorder[3].SetDiffuse( RageColor(0,0,0,1) ); + + this->AddChild( &m_quadBorder[0] ); + this->AddChild( &m_quadBorder[1] ); + this->AddChild( &m_quadBorder[2] ); + this->AddChild( &m_quadBorder[3] ); + this->AddChild( &m_Brightness ); } @@ -639,25 +653,11 @@ BrightnessOverlay::BrightnessOverlay() m_quadBGBrightnessFade.StretchTo( RectF(LEFT_EDGE+fQuadWidth,TOP_EDGE,RIGHT_EDGE-fQuadWidth,BOTTOM_EDGE) ); m_quadBGBrightness[1].StretchTo( RectF(RIGHT_EDGE-fQuadWidth,TOP_EDGE,RIGHT_EDGE,BOTTOM_EDGE) ); - m_quadBorder[0].StretchTo( RectF(SCREEN_LEFT,SCREEN_TOP,LEFT_EDGE,SCREEN_BOTTOM) ); - m_quadBorder[0].SetDiffuse( RageColor(0,0,0,1) ); - m_quadBorder[1].StretchTo( RectF(LEFT_EDGE,SCREEN_TOP,RIGHT_EDGE,TOP_EDGE) ); - m_quadBorder[1].SetDiffuse( RageColor(0,0,0,1) ); - m_quadBorder[2].StretchTo( RectF(RIGHT_EDGE,SCREEN_TOP,SCREEN_RIGHT,SCREEN_BOTTOM) ); - m_quadBorder[2].SetDiffuse( RageColor(0,0,0,1) ); - m_quadBorder[3].StretchTo( RectF(LEFT_EDGE,BOTTOM_EDGE,RIGHT_EDGE,SCREEN_BOTTOM) ); - m_quadBorder[3].SetDiffuse( RageColor(0,0,0,1) ); - this->AddChild( &m_quadBGBrightness[0] ); this->AddChild( &m_quadBGBrightness[1] ); this->AddChild( &m_quadBGBrightnessFade ); - this->AddChild( &m_quadBorder[0] ); - this->AddChild( &m_quadBorder[1] ); - this->AddChild( &m_quadBorder[2] ); - this->AddChild( &m_quadBorder[3] ); - - SetBackgrounds(); + SetActualBrightness(); } void BrightnessOverlay::Update( float fDeltaTime ) @@ -666,10 +666,10 @@ void BrightnessOverlay::Update( float fDeltaTime ) /* If we're actually playing, then we're past fades, etc; update the background * brightness to follow Cover. */ if( GAMESTATE->m_bPastHereWeGo ) - SetBackgrounds(); + SetActualBrightness(); } -void BrightnessOverlay::SetBackgrounds() +void BrightnessOverlay::SetActualBrightness() { float fLeftBrightness = 1-GAMESTATE->m_PlayerOptions[PLAYER_1].m_fCover; float fRightBrightness = 1-GAMESTATE->m_PlayerOptions[PLAYER_2].m_fCover; @@ -700,8 +700,6 @@ void BrightnessOverlay::Set( float fBrightness ) void BrightnessOverlay::FadeToActualBrightness() { - FOREACH_PlayerNumber(pn) - m_quadBGBrightness[pn].BeginTweening( 0.5f ); - m_quadBGBrightnessFade.BeginTweening( 0.5f ); - SetBackgrounds(); + this->RunCommandOnChildren( BRIGHTNESS_FADE_COMMAND ); + SetActualBrightness(); } diff --git a/stepmania/src/Background.h b/stepmania/src/Background.h index 0ce1f31845..df7c38b6e3 100644 --- a/stepmania/src/Background.h +++ b/stepmania/src/Background.h @@ -22,17 +22,17 @@ class DancingCharacters; class BrightnessOverlay: public ActorFrame { - Quad m_quadBGBrightness[NUM_PLAYERS]; - Quad m_quadBGBrightnessFade; - Quad m_quadBorder[4]; // l, t, r, b - cover up the edge of animations that might hang outside of the background rectangle - void SetBackgrounds(); - public: BrightnessOverlay(); void Update( float fDeltaTime ); void FadeToActualBrightness(); + void SetActualBrightness(); void Set( float fBrightness ); + +private: + Quad m_quadBGBrightness[NUM_PLAYERS]; + Quad m_quadBGBrightnessFade; }; class Background : public ActorFrame @@ -81,6 +81,7 @@ protected: BGAnimation* m_pFadingBGA; float m_fSecsLeftInFade; float m_fLastMusicSeconds; + Quad m_quadBorder[4]; // l, t, r, b - cover up the edge of animations that might hang outside of the background rectangle BrightnessOverlay m_Brightness; }; diff --git a/stepmania/src/ScreenGameplay.cpp b/stepmania/src/ScreenGameplay.cpp index bedffa2002..ac04c9feb7 100644 --- a/stepmania/src/ScreenGameplay.cpp +++ b/stepmania/src/ScreenGameplay.cpp @@ -1027,7 +1027,16 @@ void ScreenGameplay::LoadNextSong() { /* BeginnerHelper disabled/failed to load. */ m_Background.LoadFromSong( GAMESTATE->m_pCurSong ); - m_Background.SetBrightness( INITIAL_BACKGROUND_BRIGHTNESS(GAMESTATE->m_PlayMode) ); + if( !m_bDemonstration ) + { + /* This will fade from a preset brightness to the actual brightness (based + * on prefs and "cover"). The preset brightness may be 0 (to fade from + * black), or it might be 1, if the stage screen has the song BG and we're + * coming from it (like Pump). This used to be done in SM_PlayReady, but + * that means it's impossible to snap to the new brightness immediately. */ + m_Background.SetBrightness( INITIAL_BACKGROUND_BRIGHTNESS(GAMESTATE->m_PlayMode) ); + m_Background.FadeToActualBrightness(); + } } m_Foreground.LoadFromSong( GAMESTATE->m_pCurSong ); @@ -1900,7 +1909,6 @@ void ScreenGameplay::HandleScreenMessage( const ScreenMessage SM ) switch( SM ) { case SM_PlayReady: - m_Background.FadeToActualBrightness(); SOUND->PlayOnceFromAnnouncer( "gameplay ready" ); m_Ready.StartTransitioning( SM_PlayGo ); break;