use CachedThemeMetrics

This commit is contained in:
Chris Danford
2004-01-03 21:30:20 +00:00
parent a10afba6f9
commit 09ad8f31f3
+42 -48
View File
@@ -25,17 +25,11 @@
//
// Important!!!! Do not use these macros during gameplay. They return very slowly. Cache them in a member.
//
#define METER_WIDTH THEME->GetMetricI("LifeMeterBar","MeterWidth")
#define METER_HEIGHT THEME->GetMetricI("LifeMeterBar","MeterHeight")
#define DANGER_THRESHOLD THEME->GetMetricF("LifeMeterBar","DangerThreshold")
#define NUM_CHAMBERS THEME->GetMetricI("LifeMeterBar","NumChambers")
#define NUM_STRIPS THEME->GetMetricI("LifeMeterBar","NumStrips")
int g_iMeterWidth;
int g_iMeterHeight;
float g_fDangerThreshold;
int g_iNumChambers;
int g_iNumStrips;
static CachedThemeMetricI METER_WIDTH ("LifeMeterBar","MeterWidth");
static CachedThemeMetricI METER_HEIGHT ("LifeMeterBar","MeterHeight");
static CachedThemeMetricF DANGER_THRESHOLD ("LifeMeterBar","DangerThreshold");
static CachedThemeMetricI NUM_CHAMBERS ("LifeMeterBar","NumChambers");
static CachedThemeMetricI NUM_STRIPS ("LifeMeterBar","NumStrips");
const float FAIL_THRESHOLD = 0;
@@ -46,11 +40,11 @@ class LifeMeterStream : public Actor
public:
LifeMeterStream()
{
g_iMeterWidth = METER_WIDTH;
g_iMeterHeight = METER_HEIGHT;
g_fDangerThreshold = DANGER_THRESHOLD;
g_iNumChambers = NUM_CHAMBERS;
g_iNumStrips = NUM_STRIPS;
METER_WIDTH.Refresh();
METER_HEIGHT.Refresh();
DANGER_THRESHOLD.Refresh();
NUM_CHAMBERS.Refresh();
NUM_STRIPS.Refresh();
bool bExtra = GAMESTATE->IsExtraStage()||GAMESTATE->IsExtraStage2();
@@ -90,26 +84,26 @@ public:
void GetChamberIndexAndOverslow( float fPercent, int& iChamberOut, float& fChamberOverflowPercentOut )
{
iChamberOut = (int)(fPercent*g_iNumChambers);
fChamberOverflowPercentOut = fPercent*g_iNumChambers - iChamberOut;
iChamberOut = (int)(fPercent*NUM_CHAMBERS);
fChamberOverflowPercentOut = fPercent*NUM_CHAMBERS - iChamberOut;
}
float GetChamberLeftPercent( int iChamber )
{
return (iChamber+0) / (float)g_iNumChambers;
return (iChamber+0) / (float)NUM_CHAMBERS;
}
float GetChamberRightPercent( int iChamber )
{
return (iChamber+1) / (float)g_iNumChambers;
return (iChamber+1) / (float)NUM_CHAMBERS;
}
float GetRightEdgePercent( int iChamber, float fChamberOverflowPercent )
{
if( (iChamber%2) == 0 )
return (iChamber+fChamberOverflowPercent) / (float)g_iNumChambers;
return (iChamber+fChamberOverflowPercent) / (float)NUM_CHAMBERS;
else
return (iChamber+1) / (float)g_iNumChambers;
return (iChamber+1) / (float)NUM_CHAMBERS;
}
float GetHeightPercent( int iChamber, float fChamberOverflowPercent )
@@ -126,10 +120,10 @@ public:
{
DrawMask( m_fPercent ); // this is the "right endcap" to the life
const float fChamberWidthInPercent = 1.0f/g_iNumChambers;
float fPercentBetweenStrips = 1.0f/g_iNumStrips;
const float fChamberWidthInPercent = 1.0f/NUM_CHAMBERS;
float fPercentBetweenStrips = 1.0f/NUM_STRIPS;
// round this so that the chamber overflows align
if( g_iNumChambers > 10 )
if( NUM_CHAMBERS > 10 )
fPercentBetweenStrips = froundf( fPercentBetweenStrips, fChamberWidthInPercent );
float fPercentOffset = fmodf( GAMESTATE->m_fSongBeat/4+1000, fPercentBetweenStrips );
@@ -151,8 +145,8 @@ public:
{
RectI rect;
const float fChamberWidthInPercent = 1.0f/g_iNumChambers;
const float fStripWidthInPercent = 1.0f/g_iNumStrips;
const float fChamberWidthInPercent = 1.0f/NUM_CHAMBERS;
const float fStripWidthInPercent = 1.0f/NUM_STRIPS;
const float fCorrectedRightEdgePercent = fRightEdgePercent + fChamberWidthInPercent;
const float fCorrectedStripWidthInPercent = fStripWidthInPercent + 2*fChamberWidthInPercent;
@@ -160,12 +154,12 @@ public:
// set size of streams
rect.left = int(-g_iMeterWidth/2 + g_iMeterWidth*max(0,fCorrectedLeftEdgePercent));
rect.top = int(-g_iMeterHeight/2);
rect.right = int(-g_iMeterWidth/2 + g_iMeterWidth*min(1,fCorrectedRightEdgePercent));
rect.bottom = int(+g_iMeterHeight/2);
rect.left = int(-METER_WIDTH/2 + METER_WIDTH*max(0,fCorrectedLeftEdgePercent));
rect.top = int(-METER_HEIGHT/2);
rect.right = int(-METER_WIDTH/2 + METER_WIDTH*min(1,fCorrectedRightEdgePercent));
rect.bottom = int(+METER_HEIGHT/2);
ASSERT( rect.left <= g_iMeterWidth/2 && rect.right <= g_iMeterWidth/2 );
ASSERT( rect.left <= METER_WIDTH/2 && rect.right <= METER_WIDTH/2 );
float fPercentCroppedFromLeft = max( 0, -fCorrectedLeftEdgePercent );
float fPercentCroppedFromRight = max( 0, fCorrectedRightEdgePercent-1 );
@@ -206,25 +200,25 @@ public:
float fChamberRightPercent = GetChamberRightPercent( iChamber );
// draw mask for vertical chambers
rect.left = int(-g_iMeterWidth/2 + fChamberLeftPercent*g_iMeterWidth-1);
rect.top = int(-g_iMeterHeight/2);
rect.right = int(-g_iMeterWidth/2 + fChamberRightPercent*g_iMeterWidth+1);
rect.bottom = int(-g_iMeterHeight/2 + fHeightPercent*g_iMeterHeight);
rect.left = int(-METER_WIDTH/2 + fChamberLeftPercent*METER_WIDTH-1);
rect.top = int(-METER_HEIGHT/2);
rect.right = int(-METER_WIDTH/2 + fChamberRightPercent*METER_WIDTH+1);
rect.bottom = int(-METER_HEIGHT/2 + fHeightPercent*METER_HEIGHT);
rect.left = MIN( rect.left, + g_iMeterWidth/2 );
rect.right = MIN( rect.right, + g_iMeterWidth/2 );
rect.left = MIN( rect.left, + METER_WIDTH/2 );
rect.right = MIN( rect.right, + METER_WIDTH/2 );
m_quadMask.StretchTo( rect );
m_quadMask.Draw();
// draw mask for horizontal chambers
rect.left = (int)(-g_iMeterWidth/2 + fRightPercent*g_iMeterWidth);
rect.top = -g_iMeterHeight/2;
rect.right = +g_iMeterWidth/2;
rect.bottom = +g_iMeterHeight/2;
rect.left = (int)(-METER_WIDTH/2 + fRightPercent*METER_WIDTH);
rect.top = -METER_HEIGHT/2;
rect.right = +METER_WIDTH/2;
rect.bottom = +METER_HEIGHT/2;
rect.left = MIN( rect.left, + g_iMeterWidth/2 );
rect.right = MIN( rect.right, + g_iMeterWidth/2 );
rect.left = MIN( rect.left, + METER_WIDTH/2 );
rect.right = MIN( rect.right, + METER_WIDTH/2 );
m_quadMask.StretchTo( rect );
m_quadMask.Draw();
@@ -254,8 +248,8 @@ LifeMeterBar::LifeMeterBar()
m_fLifeDifficulty = m_fBaseLifeDifficulty;
m_quadBlackBackground.SetDiffuse( RageColor(0,0,0,1) );
m_quadBlackBackground.SetZoomX( (float)g_iMeterWidth );
m_quadBlackBackground.SetZoomY( (float)g_iMeterHeight );
m_quadBlackBackground.SetZoomX( (float)METER_WIDTH );
m_quadBlackBackground.SetZoomY( (float)METER_HEIGHT );
this->AddChild( &m_quadBlackBackground );
this->AddChild( m_pStream );
@@ -477,7 +471,7 @@ bool LifeMeterBar::IsHot() const
bool LifeMeterBar::IsInDanger() const
{
return m_fLifePercentage < g_fDangerThreshold;
return m_fLifePercentage < DANGER_THRESHOLD;
}
bool LifeMeterBar::IsFailing() const
@@ -549,7 +543,7 @@ void LifeMeterBar::DrawPrimitives()
m_pStream->m_fPercent = m_fTrailingLifePercentage;
m_pStream->m_fHotAlpha = m_fHotAlpha;
float fPercentRed = (m_fTrailingLifePercentage<g_fDangerThreshold) ? sinf( RageTimer::GetTimeSinceStart()*PI*4 )/2+0.5f : 0;
float fPercentRed = (m_fTrailingLifePercentage<DANGER_THRESHOLD) ? sinf( RageTimer::GetTimeSinceStart()*PI*4 )/2+0.5f : 0;
m_quadBlackBackground.SetDiffuse( RageColor(fPercentRed*0.8f,0,0,1) );
ActorFrame::DrawPrimitives();