From f9e818794ae0f19564a1a3d45e043c2515816215 Mon Sep 17 00:00:00 2001 From: Glenn Maynard Date: Fri, 2 Apr 2004 00:13:47 +0000 Subject: [PATCH] add disqualifying "cover" modifier: don't show the song background --- stepmania/src/Background.cpp | 107 +++++++++++++++++++++++--------- stepmania/src/Background.h | 22 +++++-- stepmania/src/PlayerOptions.cpp | 6 ++ stepmania/src/PlayerOptions.h | 1 + 4 files changed, 101 insertions(+), 35 deletions(-) diff --git a/stepmania/src/Background.cpp b/stepmania/src/Background.cpp index 3ef2de496b..d92999cd2b 100644 --- a/stepmania/src/Background.cpp +++ b/stepmania/src/Background.cpp @@ -34,16 +34,16 @@ const float FADE_SECONDS = 1.0f; -#define LEFT_EDGE THEME->GetMetricI("Background","LeftEdge") -#define TOP_EDGE THEME->GetMetricI("Background","TopEdge") -#define RIGHT_EDGE THEME->GetMetricI("Background","RightEdge") -#define BOTTOM_EDGE THEME->GetMetricI("Background","BottomEdge") +#define LEFT_EDGE THEME->GetMetricF("Background","LeftEdge") +#define TOP_EDGE THEME->GetMetricF("Background","TopEdge") +#define RIGHT_EDGE THEME->GetMetricF("Background","RightEdge") +#define BOTTOM_EDGE THEME->GetMetricF("Background","BottomEdge") CachedThemeMetricB BLINK_DANGER_ALL("Background","BlinkDangerAll"); CachedThemeMetricB DANGER_ALL_IS_OPAQUE("Background","DangerAllIsOpaque"); -#define RECT_BACKGROUND RectI(LEFT_EDGE,TOP_EDGE,RIGHT_EDGE,BOTTOM_EDGE) - +#define RECT_BACKGROUND RectF(LEFT_EDGE,TOP_EDGE,RIGHT_EDGE,BOTTOM_EDGE) +static float g_fBackgroundCenterWidth = 40; const CString STATIC_BACKGROUND = "static background"; Background::Background() @@ -64,18 +64,6 @@ Background::Background() for( p=0; pGetPathToB(ssprintf("ScreenGameplay dead p%d",p+1)) ); - m_quadBGBrightness.StretchTo( RECT_BACKGROUND ); - m_quadBGBrightness.SetDiffuse( RageColor(0,0,0,1-PREFSMAN->m_fBGBrightness) ); - - m_quadBorder[0].StretchTo( RectI(SCREEN_LEFT,SCREEN_TOP,LEFT_EDGE,SCREEN_BOTTOM) ); - m_quadBorder[0].SetDiffuse( RageColor(0,0,0,1) ); - m_quadBorder[1].StretchTo( RectI(LEFT_EDGE,SCREEN_TOP,RIGHT_EDGE,TOP_EDGE) ); - m_quadBorder[1].SetDiffuse( RageColor(0,0,0,1) ); - m_quadBorder[2].StretchTo( RectI(RIGHT_EDGE,SCREEN_TOP,SCREEN_RIGHT,SCREEN_BOTTOM) ); - m_quadBorder[2].SetDiffuse( RageColor(0,0,0,1) ); - m_quadBorder[3].StretchTo( RectI(LEFT_EDGE,BOTTOM_EDGE,RIGHT_EDGE,SCREEN_BOTTOM) ); - m_quadBorder[3].SetDiffuse( RageColor(0,0,0,1) ); - bool bOneOrMoreChars = false; bool bShowingBeginnerHelper = false; for( p=0; pAddChild( &m_Brightness ); } Background::~Background() @@ -564,8 +554,6 @@ void Background::Update( float fDeltaTime ) if( m_pDancingCharacters ) m_pDancingCharacters->Update( fDeltaTime ); - - m_quadBGBrightness.Update( fDeltaTime ); } void Background::DrawPrimitives() @@ -573,8 +561,6 @@ void Background::DrawPrimitives() if( PREFSMAN->m_fBGBrightness == 0 ) return; - ActorFrame::DrawPrimitives(); - if( IsDangerAllVisible() ) { // Since this only shows when DANGER is visible, it will flash red on it's own accord :) @@ -604,9 +590,7 @@ void Background::DrawPrimitives() if( m_pDancingCharacters ) m_pDancingCharacters->Draw(); - m_quadBGBrightness.Draw(); - for( int i=0; i<4; i++ ) - m_quadBorder[i].Draw(); + ActorFrame::DrawPrimitives(); } bool Background::IsDangerAllVisible() @@ -647,15 +631,76 @@ bool Background::IsDeadPlayerVisible( PlayerNumber pn ) } -void Background::FadeIn() +BrightnessOverlay::BrightnessOverlay() { - m_quadBGBrightness.BeginTweening( 0.5f ); - m_quadBGBrightness.SetDiffuse( RageColor(0,0,0,1-PREFSMAN->m_fBGBrightness) ); + float fQuadWidth = (RIGHT_EDGE-LEFT_EDGE)/2; + fQuadWidth -= g_fBackgroundCenterWidth/2; + + m_quadBGBrightness[0].StretchTo( RectF(LEFT_EDGE,TOP_EDGE,LEFT_EDGE+fQuadWidth,BOTTOM_EDGE) ); + 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(); } -void Background::FadeOut() +void BrightnessOverlay::Update( float fDeltaTime ) { - m_quadBGBrightness.BeginTweening( 0.5f ); - m_quadBGBrightness.SetDiffuse( RageColor(0,0,0,1-0.5f) ); + ActorFrame::Update( fDeltaTime ); + SetBackgrounds(); +} +void BrightnessOverlay::SetBackgrounds() +{ + float fLeftBrightness = 1-GAMESTATE->m_PlayerOptions[PLAYER_1].m_fCover; + float fRightBrightness = 1-GAMESTATE->m_PlayerOptions[PLAYER_2].m_fCover; + + fLeftBrightness *= PREFSMAN->m_fBGBrightness; + fRightBrightness *= PREFSMAN->m_fBGBrightness; + + if( !GAMESTATE->IsHumanPlayer(PLAYER_1) ) + fLeftBrightness = fRightBrightness; + if( !GAMESTATE->IsHumanPlayer(PLAYER_2) ) + fRightBrightness = fLeftBrightness; + + RageColor LeftColor( 0,0,0,1-fLeftBrightness ); + RageColor RightColor( 0,0,0,1-fRightBrightness ); + + m_quadBGBrightness[PLAYER_1].SetDiffuse( LeftColor ); + m_quadBGBrightness[PLAYER_2].SetDiffuse( RightColor ); + m_quadBGBrightnessFade.SetDiffuseLeftEdge( LeftColor ); + m_quadBGBrightnessFade.SetDiffuseRightEdge( RightColor ); +} + +void BrightnessOverlay::FadeIn() +{ + FOREACH_PlayerNumber(pn) + m_quadBGBrightness[pn].BeginTweening( 0.5f ); + SetBackgrounds(); +} + +void BrightnessOverlay::FadeOut() +{ + FOREACH_PlayerNumber(pn) + { + m_quadBGBrightness[pn].BeginTweening( 0.5f ); + m_quadBGBrightness[pn].SetDiffuse( RageColor(0,0,0,1-0.5f) ); + } } diff --git a/stepmania/src/Background.h b/stepmania/src/Background.h index e7d3912ac6..524abe7b65 100644 --- a/stepmania/src/Background.h +++ b/stepmania/src/Background.h @@ -20,6 +20,20 @@ #include 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 FadeIn(); + void FadeOut(); +}; class Background : public ActorFrame { @@ -33,8 +47,8 @@ public: virtual void Update( float fDeltaTime ); virtual void DrawPrimitives(); - void FadeIn(); - void FadeOut(); + void FadeIn() { m_Brightness.FadeIn(); } + void FadeOut() { m_Brightness.FadeOut(); } DancingCharacters* GetDancingCharacters() { return m_pDancingCharacters; }; @@ -48,6 +62,7 @@ protected: bool IsDangerAllVisible(); bool IsDeadPlayerVisible( PlayerNumber pn ); void UpdateCurBGChange( float fCurrentTime ); + void SetBackgrounds(); DancingCharacters* m_pDancingCharacters; @@ -68,8 +83,7 @@ protected: float m_fSecsLeftInFade; float m_fLastMusicSeconds; - Quad m_quadBGBrightness; - 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/PlayerOptions.cpp b/stepmania/src/PlayerOptions.cpp index cc23901f2b..b16ff04db9 100644 --- a/stepmania/src/PlayerOptions.cpp +++ b/stepmania/src/PlayerOptions.cpp @@ -35,6 +35,7 @@ void PlayerOptions::Init() ZERO( m_fScrolls ); ONE( m_SpeedfScrolls ); m_fDark = 0; m_SpeedfDark = 1.0f; m_fBlind = 0; m_SpeedfBlind = 1.0f; + m_fCover = 0; m_SpeedfCover = 1.0f; m_fPerspectiveTilt = 0; m_SpeedfPerspectiveTilt = 1.0f; m_fSkew = 0; m_SpeedfSkew = 1.0f; m_fPassmark = 0; m_SpeedfPassmark = 1.0f; @@ -62,6 +63,7 @@ void PlayerOptions::Approach( const PlayerOptions& other, float fDeltaSeconds ) APP( fScrollSpeed ); APP( fDark ); APP( fBlind ); + APP( fCover ); APP( fPerspectiveTilt ); APP( fSkew ); APP( fPassmark ); @@ -134,6 +136,7 @@ CString PlayerOptions::GetString() const sReturn += AddPart( m_fDark, "Dark"); sReturn += AddPart( m_fBlind, "Blind"); + sReturn += AddPart( m_fCover, "Cover"); sReturn += AddPart( m_fPassmark, "Passmark"); @@ -297,6 +300,7 @@ void PlayerOptions::FromString( CString sOptions ) else if( sBit == "nomines" ) m_bTransforms[TRANSFORM_NOMINES] = on; else if( sBit == "dark" ) SET_FLOAT( fDark ) else if( sBit == "blind" ) SET_FLOAT( fBlind ) + else if( sBit == "cover" ) SET_FLOAT( fCover ) else if( sBit == "passmark" ) SET_FLOAT( fPassmark ) else if( sBit == "protiming") m_bProTiming = on; else if( sBit == "overhead" ) { m_fSkew = 0; m_fPerspectiveTilt = 0; m_SpeedfSkew = m_SpeedfPerspectiveTilt = speed; } @@ -516,6 +520,7 @@ bool PlayerOptions::operator==( const PlayerOptions &other ) const COMPARE(m_fScrollBPM); COMPARE(m_fDark); COMPARE(m_fBlind); + COMPARE(m_fCover); COMPARE(m_bProTiming); COMPARE(m_fPerspectiveTilt); COMPARE(m_fSkew); @@ -561,6 +566,7 @@ bool PlayerOptions::IsEasierForSongAndSteps( Song* pSong, Steps* pSteps ) // This makes songs with sparse notes easier. if( m_bTransforms[TRANSFORM_ECHO] ) return true; + if( m_fCover ) return true; return false; } diff --git a/stepmania/src/PlayerOptions.h b/stepmania/src/PlayerOptions.h index 8f702f52e3..4a1e041da7 100644 --- a/stepmania/src/PlayerOptions.h +++ b/stepmania/src/PlayerOptions.h @@ -108,6 +108,7 @@ struct PlayerOptions float m_fScrolls[NUM_SCROLLS],m_SpeedfScrolls[NUM_SCROLLS]; float m_fDark, m_SpeedfDark; float m_fBlind, m_SpeedfBlind; + float m_fCover, m_SpeedfCover; // hide the background per-player--can't think of a good name float m_fPerspectiveTilt, m_SpeedfPerspectiveTilt; // -1 = near, 0 = overhead, +1 = space float m_fSkew, m_SpeedfSkew; // 0 = vanish point is in center of player, 1 = vanish point is in center of screen