fix up color
This commit is contained in:
@@ -16,14 +16,24 @@ static const ThemeMetric<apActorCommands> LABEL_ON_COMMAND ("GrooveRadar","Lab
|
|||||||
static const ThemeMetric<float> LABEL_ON_DELAY ("GrooveRadar","LabelOnDelay");
|
static const ThemeMetric<float> LABEL_ON_DELAY ("GrooveRadar","LabelOnDelay");
|
||||||
static const ThemeMetric<apActorCommands> LABEL_ON_COMMAND_POST_DELAY ("GrooveRadar","LabelOnCommandPostDelay");
|
static const ThemeMetric<apActorCommands> 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;
|
static const int NUM_SHOWN_RADAR_CATEGORIES = 5;
|
||||||
|
|
||||||
GrooveRadar::GrooveRadar()
|
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; c<NUM_SHOWN_RADAR_CATEGORIES; c++ )
|
for( int c=0; c<NUM_SHOWN_RADAR_CATEGORIES; c++ )
|
||||||
{
|
{
|
||||||
@@ -44,7 +54,12 @@ void GrooveRadar::TweenOnScreen()
|
|||||||
m_sprRadarLabels[c].BeginTweening( LABEL_ON_DELAY*c ); // sleep
|
m_sprRadarLabels[c].BeginTweening( LABEL_ON_DELAY*c ); // sleep
|
||||||
m_sprRadarLabels[c].RunCommands( LABEL_ON_COMMAND_POST_DELAY );
|
m_sprRadarLabels[c].RunCommands( LABEL_ON_COMMAND_POST_DELAY );
|
||||||
}
|
}
|
||||||
m_GrooveRadarValueMap.TweenOnScreen();
|
|
||||||
|
m_Frame.SetZoom( 0.5f );
|
||||||
|
m_Frame.SetRotationZ( 720 );
|
||||||
|
m_Frame.BeginTweening( 0.6f );
|
||||||
|
m_Frame.SetZoom( 1 );
|
||||||
|
m_Frame.SetRotationZ( 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
void GrooveRadar::TweenOffScreen()
|
void GrooveRadar::TweenOffScreen()
|
||||||
@@ -59,48 +74,45 @@ void GrooveRadar::TweenOffScreen()
|
|||||||
m_sprRadarLabels[c].SetGlow( RageColor(1,1,1,0) );
|
m_sprRadarLabels[c].SetGlow( RageColor(1,1,1,0) );
|
||||||
m_sprRadarLabels[c].SetDiffuse( RageColor(1,1,1,0) );
|
m_sprRadarLabels[c].SetDiffuse( RageColor(1,1,1,0) );
|
||||||
}
|
}
|
||||||
m_GrooveRadarValueMap.TweenOffScreen();
|
|
||||||
|
m_Frame.BeginTweening( 0.6f );
|
||||||
|
m_Frame.SetRotationZ( 180*4 );
|
||||||
|
m_Frame.SetZoom( 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
GrooveRadar::GrooveRadarValueMap::GrooveRadarValueMap()
|
GrooveRadar::GrooveRadarValueMap::GrooveRadarValueMap()
|
||||||
{
|
{
|
||||||
m_sprRadarBase.Load( THEME->GetPathG("GrooveRadar","base") );
|
m_bValuesVisible = false;
|
||||||
this->AddChild( &m_sprRadarBase );
|
m_PercentTowardNew = 0;
|
||||||
|
|
||||||
FOREACH_PlayerNumber( p )
|
for( int c=0; c<NUM_SHOWN_RADAR_CATEGORIES; c++ )
|
||||||
{
|
{
|
||||||
m_bValuesVisible[p] = false;
|
m_fValuesNew[c] = 0;
|
||||||
m_PercentTowardNew[p] = 0;
|
m_fValuesOld[c] = 0;
|
||||||
|
|
||||||
for( int c=0; c<NUM_SHOWN_RADAR_CATEGORIES; c++ )
|
|
||||||
{
|
|
||||||
m_fValuesNew[p][c] = 0;
|
|
||||||
m_fValuesOld[p][c] = 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void GrooveRadar::GrooveRadarValueMap::SetFromSteps( PlayerNumber pn, Steps* pSteps ) // NULL means no song
|
void GrooveRadar::GrooveRadarValueMap::SetFromSteps( const Steps* pSteps ) // NULL means no song
|
||||||
{
|
{
|
||||||
if( pSteps != NULL )
|
if( pSteps != NULL )
|
||||||
{
|
{
|
||||||
for( int c=0; c<NUM_SHOWN_RADAR_CATEGORIES; c++ )
|
for( int c=0; c<NUM_SHOWN_RADAR_CATEGORIES; c++ )
|
||||||
{
|
{
|
||||||
const float fValueCurrent = m_fValuesOld[pn][c] * (1-m_PercentTowardNew[pn]) + m_fValuesNew[pn][c] * m_PercentTowardNew[pn];
|
const float fValueCurrent = m_fValuesOld[c] * (1-m_PercentTowardNew) + m_fValuesNew[c] * m_PercentTowardNew;
|
||||||
m_fValuesOld[pn][c] = fValueCurrent;
|
m_fValuesOld[c] = fValueCurrent;
|
||||||
m_fValuesNew[pn][c] = pSteps->GetRadarValues()[c];
|
m_fValuesNew[c] = pSteps->GetRadarValues()[c];
|
||||||
}
|
}
|
||||||
|
|
||||||
if( !m_bValuesVisible[pn] ) // the values WERE invisible
|
if( !m_bValuesVisible ) // the values WERE invisible
|
||||||
m_PercentTowardNew[pn] = 1;
|
m_PercentTowardNew = 1;
|
||||||
else
|
else
|
||||||
m_PercentTowardNew[pn] = 0;
|
m_PercentTowardNew = 0;
|
||||||
|
|
||||||
m_bValuesVisible[pn] = true;
|
m_bValuesVisible = true;
|
||||||
}
|
}
|
||||||
else // pSteps == NULL
|
else // pSteps == NULL
|
||||||
{
|
{
|
||||||
m_bValuesVisible[pn] = false;
|
m_bValuesVisible = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -108,10 +120,7 @@ void GrooveRadar::GrooveRadarValueMap::Update( float fDeltaTime )
|
|||||||
{
|
{
|
||||||
ActorFrame::Update( fDeltaTime );
|
ActorFrame::Update( fDeltaTime );
|
||||||
|
|
||||||
FOREACH_PlayerNumber( p )
|
m_PercentTowardNew = min( m_PercentTowardNew+4.0f*fDeltaTime, 1 );
|
||||||
{
|
|
||||||
m_PercentTowardNew[p] = min( m_PercentTowardNew[p]+4.0f*fDeltaTime, 1 );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void GrooveRadar::GrooveRadarValueMap::DrawPrimitives()
|
void GrooveRadar::GrooveRadarValueMap::DrawPrimitives()
|
||||||
@@ -119,83 +128,64 @@ void GrooveRadar::GrooveRadarValueMap::DrawPrimitives()
|
|||||||
ActorFrame::DrawPrimitives();
|
ActorFrame::DrawPrimitives();
|
||||||
|
|
||||||
// draw radar filling
|
// draw radar filling
|
||||||
const float fRadius = m_sprRadarBase.GetZoomedHeight()/2.0f*1.1f;
|
const float fRadius = GetUnzoomedWidth()/2.0f*1.1f;
|
||||||
|
|
||||||
DISPLAY->ClearAllTextures();
|
DISPLAY->ClearAllTextures();
|
||||||
DISPLAY->SetTextureModeModulate();
|
DISPLAY->SetTextureModeModulate();
|
||||||
RageSpriteVertex v[12]; // needed to draw 5 fan primitives and 10 strip primitives
|
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; i<NUM_SHOWN_RADAR_CATEGORIES+1; i++ ) // do one extra to close the fan
|
||||||
{
|
{
|
||||||
if( !m_bValuesVisible[p] )
|
const int c = i%NUM_SHOWN_RADAR_CATEGORIES;
|
||||||
continue;
|
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[1+i].p = RageVector3( fX, fY, 0 );
|
||||||
// use a fan to draw the volume
|
v[1+i].c = v[0].c;
|
||||||
//
|
|
||||||
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; i<NUM_SHOWN_RADAR_CATEGORIES+1; i++ ) // do one extra to close the fan
|
|
||||||
{
|
|
||||||
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[1+i].p = RageVector3( fX, fY, 0 );
|
|
||||||
v[1+i].c = v[0].c;
|
|
||||||
}
|
|
||||||
|
|
||||||
DISPLAY->DrawFan( 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;
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
void GrooveRadar::GrooveRadarValueMap::TweenOnScreen()
|
DISPLAY->DrawFan( v, NUM_SHOWN_RADAR_CATEGORIES+2 );
|
||||||
{
|
|
||||||
SetZoom( 0.5f );
|
|
||||||
SetRotationZ( 720 );
|
|
||||||
BeginTweening( 0.6f );
|
|
||||||
SetZoom( 1 );
|
|
||||||
SetRotationZ( 0 );
|
|
||||||
}
|
|
||||||
|
|
||||||
void GrooveRadar::GrooveRadarValueMap::TweenOffScreen()
|
//
|
||||||
{
|
// use a line loop to draw the thick line
|
||||||
BeginTweening( 0.6f );
|
//
|
||||||
SetRotationZ( 180*4 );
|
for( int i=0; i<=NUM_SHOWN_RADAR_CATEGORIES; i++ )
|
||||||
SetZoom( 0 );
|
{
|
||||||
|
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;
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
+11
-10
@@ -22,7 +22,7 @@ public:
|
|||||||
|
|
||||||
void SetFromSteps( PlayerNumber pn, Steps* pSteps ) // NULL means no Song
|
void SetFromSteps( PlayerNumber pn, Steps* pSteps ) // NULL means no Song
|
||||||
{
|
{
|
||||||
m_GrooveRadarValueMap.SetFromSteps( pn, pSteps );
|
m_GrooveRadarValueMap[pn].SetFromSteps( pSteps );
|
||||||
}
|
}
|
||||||
|
|
||||||
void TweenOnScreen();
|
void TweenOnScreen();
|
||||||
@@ -39,21 +39,22 @@ protected:
|
|||||||
virtual void Update( float fDeltaTime );
|
virtual void Update( float fDeltaTime );
|
||||||
virtual void DrawPrimitives();
|
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 SetRadius( float f ) { m_size.x = f; m_size.y = f; }
|
||||||
void TweenOffScreen();
|
|
||||||
|
|
||||||
bool m_bValuesVisible[NUM_PLAYERS];
|
bool m_bValuesVisible;
|
||||||
float m_PercentTowardNew[NUM_PLAYERS];
|
float m_PercentTowardNew;
|
||||||
float m_fValuesNew[NUM_PLAYERS][NUM_RADAR_CATEGORIES];
|
float m_fValuesNew[NUM_RADAR_CATEGORIES];
|
||||||
float m_fValuesOld[NUM_PLAYERS][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];
|
Sprite m_sprRadarLabels[NUM_RADAR_CATEGORIES];
|
||||||
|
ActorFrame m_Frame;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user