From de66342a39bb55ba49672b85acf3eb1a13039fb1 Mon Sep 17 00:00:00 2001 From: Glenn Maynard Date: Wed, 31 Aug 2005 04:00:42 +0000 Subject: [PATCH] fix up color --- stepmania/src/GrooveRadar.cpp | 182 ++++++++++++++++------------------ stepmania/src/GrooveRadar.h | 21 ++-- 2 files changed, 97 insertions(+), 106 deletions(-) diff --git a/stepmania/src/GrooveRadar.cpp b/stepmania/src/GrooveRadar.cpp index 64fd82d78f..8104f9570c 100644 --- a/stepmania/src/GrooveRadar.cpp +++ b/stepmania/src/GrooveRadar.cpp @@ -16,14 +16,24 @@ static const ThemeMetric LABEL_ON_COMMAND ("GrooveRadar","Lab static const ThemeMetric LABEL_ON_DELAY ("GrooveRadar","LabelOnDelay"); static const ThemeMetric LABEL_ON_COMMAND_POST_DELAY ("GrooveRadar","LabelOnCommandPostDelay"); -float RADAR_VALUE_ROTATION( int iValueIndex ) { return PI/2 + PI*2 / 5.0f * iValueIndex; } +static float RADAR_VALUE_ROTATION( int iValueIndex ) { return PI/2 + PI*2 / 5.0f * iValueIndex; } -const float RADAR_EDGE_WIDTH = 2; +static const float RADAR_EDGE_WIDTH = 2; static const int NUM_SHOWN_RADAR_CATEGORIES = 5; GrooveRadar::GrooveRadar() { - this->AddChild( &m_GrooveRadarValueMap ); + m_sprRadarBase.Load( THEME->GetPathG("GrooveRadar","base") ); + m_Frame.AddChild( &m_sprRadarBase ); + + FOREACH_PlayerNumber( p ) + { + m_GrooveRadarValueMap[p].SetRadius( m_sprRadarBase.GetZoomedWidth() ); + m_Frame.AddChild( &m_GrooveRadarValueMap[p] ); + m_GrooveRadarValueMap[p].RunCommands( PLAYER_COLOR.GetValue(p) ); + } + + this->AddChild( &m_Frame ); for( int c=0; cGetPathG("GrooveRadar","base") ); - this->AddChild( &m_sprRadarBase ); + m_bValuesVisible = false; + m_PercentTowardNew = 0; - FOREACH_PlayerNumber( p ) + for( int c=0; cGetRadarValues()[c]; + const float fValueCurrent = m_fValuesOld[c] * (1-m_PercentTowardNew) + m_fValuesNew[c] * m_PercentTowardNew; + m_fValuesOld[c] = fValueCurrent; + m_fValuesNew[c] = pSteps->GetRadarValues()[c]; } - if( !m_bValuesVisible[pn] ) // the values WERE invisible - m_PercentTowardNew[pn] = 1; + if( !m_bValuesVisible ) // the values WERE invisible + m_PercentTowardNew = 1; else - m_PercentTowardNew[pn] = 0; + m_PercentTowardNew = 0; - m_bValuesVisible[pn] = true; + m_bValuesVisible = true; } else // pSteps == NULL { - m_bValuesVisible[pn] = false; + m_bValuesVisible = false; } } @@ -108,10 +120,7 @@ void GrooveRadar::GrooveRadarValueMap::Update( float fDeltaTime ) { ActorFrame::Update( fDeltaTime ); - FOREACH_PlayerNumber( p ) - { - m_PercentTowardNew[p] = min( m_PercentTowardNew[p]+4.0f*fDeltaTime, 1 ); - } + m_PercentTowardNew = min( m_PercentTowardNew+4.0f*fDeltaTime, 1 ); } void GrooveRadar::GrooveRadarValueMap::DrawPrimitives() @@ -119,83 +128,64 @@ void GrooveRadar::GrooveRadarValueMap::DrawPrimitives() ActorFrame::DrawPrimitives(); // draw radar filling - const float fRadius = m_sprRadarBase.GetZoomedHeight()/2.0f*1.1f; + const float fRadius = GetUnzoomedWidth()/2.0f*1.1f; DISPLAY->ClearAllTextures(); DISPLAY->SetTextureModeModulate(); RageSpriteVertex v[12]; // needed to draw 5 fan primitives and 10 strip primitives - FOREACH_PlayerNumber( p ) + if( !m_bValuesVisible ) + return; + + // + // use a fan to draw the volume + // + RageColor color = this->m_pTempState->diffuse[0]; + color.a = 0.5f; + v[0].p = RageVector3( 0, 0, 0 ); + v[0].c = color; + + for( int i=0; im_pTempState->diffuse[0]; - color.a = 0.5f; - v[0].p = RageVector3( 0, 0, 0 ); - v[0].c = color; - - for( int i=0; iDrawFan( v, NUM_SHOWN_RADAR_CATEGORIES+2 ); - - // - // use a line loop to draw the thick line - // - for( int i=0; i<=NUM_SHOWN_RADAR_CATEGORIES; i++ ) - { - const int c = i%NUM_SHOWN_RADAR_CATEGORIES; - const float fDistFromCenter = - ( m_fValuesOld[p][c] * (1-m_PercentTowardNew[p]) + m_fValuesNew[p][c] * m_PercentTowardNew[p] + 0.07f ) * fRadius; - const float fRotation = RADAR_VALUE_ROTATION(i); - const float fX = RageFastCos(fRotation) * fDistFromCenter; - const float fY = -RageFastSin(fRotation) * fDistFromCenter; - - v[i].p = RageVector3( fX, fY, 0 ); - v[i].c = this->m_pTempState->diffuse[0]; - } - - // TODO: Add this back in. -Chris -// switch( PREFSMAN->m_iPolygonRadar ) -// { -// case 0: DISPLAY->DrawLoop_LinesAndPoints( v, NUM_SHOWN_RADAR_CATEGORIES, RADAR_EDGE_WIDTH ); break; -// case 1: DISPLAY->DrawLoop_Polys( v, NUM_SHOWN_RADAR_CATEGORIES, RADAR_EDGE_WIDTH ); break; -// default: -// case -1: - DISPLAY->DrawLineStrip( v, NUM_SHOWN_RADAR_CATEGORIES+1, RADAR_EDGE_WIDTH ); -// break; -// } + v[1+i].p = RageVector3( fX, fY, 0 ); + v[1+i].c = v[0].c; } -} -void GrooveRadar::GrooveRadarValueMap::TweenOnScreen() -{ - SetZoom( 0.5f ); - SetRotationZ( 720 ); - BeginTweening( 0.6f ); - SetZoom( 1 ); - SetRotationZ( 0 ); -} + DISPLAY->DrawFan( v, NUM_SHOWN_RADAR_CATEGORIES+2 ); -void GrooveRadar::GrooveRadarValueMap::TweenOffScreen() -{ - BeginTweening( 0.6f ); - SetRotationZ( 180*4 ); - SetZoom( 0 ); + // + // use a line loop to draw the thick line + // + for( int i=0; i<=NUM_SHOWN_RADAR_CATEGORIES; i++ ) + { + const int c = i%NUM_SHOWN_RADAR_CATEGORIES; + const float fDistFromCenter = + ( m_fValuesOld[c] * (1-m_PercentTowardNew) + m_fValuesNew[c] * m_PercentTowardNew + 0.07f ) * fRadius; + const float fRotation = RADAR_VALUE_ROTATION(i); + const float fX = RageFastCos(fRotation) * fDistFromCenter; + const float fY = -RageFastSin(fRotation) * fDistFromCenter; + + v[i].p = RageVector3( fX, fY, 0 ); + v[i].c = this->m_pTempState->diffuse[0]; + } + + // TODO: Add this back in. -Chris +// switch( PREFSMAN->m_iPolygonRadar ) +// { +// case 0: DISPLAY->DrawLoop_LinesAndPoints( v, NUM_SHOWN_RADAR_CATEGORIES, RADAR_EDGE_WIDTH ); break; +// case 1: DISPLAY->DrawLoop_Polys( v, NUM_SHOWN_RADAR_CATEGORIES, RADAR_EDGE_WIDTH ); break; +// default: +// case -1: + DISPLAY->DrawLineStrip( v, NUM_SHOWN_RADAR_CATEGORIES+1, RADAR_EDGE_WIDTH ); +// break; +// } } /* diff --git a/stepmania/src/GrooveRadar.h b/stepmania/src/GrooveRadar.h index a7c045926c..c7a06c9f7e 100644 --- a/stepmania/src/GrooveRadar.h +++ b/stepmania/src/GrooveRadar.h @@ -22,7 +22,7 @@ public: void SetFromSteps( PlayerNumber pn, Steps* pSteps ) // NULL means no Song { - m_GrooveRadarValueMap.SetFromSteps( pn, pSteps ); + m_GrooveRadarValueMap[pn].SetFromSteps( pSteps ); } void TweenOnScreen(); @@ -39,21 +39,22 @@ protected: virtual void Update( float fDeltaTime ); virtual void DrawPrimitives(); - void SetFromSteps( PlayerNumber pn, Steps* pSteps ); // NULL means no Song + void SetFromSteps( const Steps* pSteps ); // NULL means no Song - void TweenOnScreen(); - void TweenOffScreen(); + void SetRadius( float f ) { m_size.x = f; m_size.y = f; } - bool m_bValuesVisible[NUM_PLAYERS]; - float m_PercentTowardNew[NUM_PLAYERS]; - float m_fValuesNew[NUM_PLAYERS][NUM_RADAR_CATEGORIES]; - float m_fValuesOld[NUM_PLAYERS][NUM_RADAR_CATEGORIES]; + bool m_bValuesVisible; + float m_PercentTowardNew; + float m_fValuesNew[NUM_RADAR_CATEGORIES]; + float m_fValuesOld[NUM_RADAR_CATEGORIES]; - Sprite m_sprRadarBase; + PlayerNumber m_PlayerNumber; }; - GrooveRadarValueMap m_GrooveRadarValueMap; + Sprite m_sprRadarBase; + GrooveRadarValueMap m_GrooveRadarValueMap[NUM_PLAYERS]; Sprite m_sprRadarLabels[NUM_RADAR_CATEGORIES]; + ActorFrame m_Frame; }; #endif