Support eval-style percents

This commit is contained in:
Glenn Maynard
2003-10-05 00:30:55 +00:00
parent 5be698590c
commit 14a24f6f64
2 changed files with 49 additions and 11 deletions
+46 -11
View File
@@ -10,32 +10,58 @@
#define DANCE_POINT_DIGITS THEME->GetMetricI(m_sName,"DancePointsDigits")
#define PERCENT_DECIMAL_PLACES THEME->GetMetricI(m_sName,"PercentDecimalPlaces")
#define PERCENT_TOTAL_SIZE THEME->GetMetricI(m_sName,"PercentTotalSize")
#define PERCENT_USE_REMAINDER THEME->GetMetricB(m_sName,"PercentUseRemainder")
PercentageDisplay::PercentageDisplay()
{
this->AddChild( &m_textPercent );
}
void PercentageDisplay::Load( PlayerNumber pn )
{
m_PlayerNumber = pn;
m_Last = 0;
m_textPercent.SetName( ssprintf("PercentP%i", pn+1) );
m_textPercent.LoadFromNumbers( THEME->GetPathToN(m_sName + " text") );
SET_XY_AND_ON_COMMAND( m_textPercent );
m_Last = -1;
if( PREFSMAN->m_bDancePointsForOni )
m_textPercent.SetText( " " );
m_textPercent.SetName( ssprintf("DancePointsP%i", pn+1) );
else
m_textPercent.SetText( ssprintf( "%0*.*f%%", PERCENT_TOTAL_SIZE, PERCENT_DECIMAL_PLACES, 0 ) );
m_textPercent.SetName( ssprintf("PercentP%i", pn+1) );
m_textPercent.LoadFromNumbers( THEME->GetPathToN(m_sName + " text") );
SET_XY_AND_ON_COMMAND( m_textPercent );
this->AddChild( &m_textPercent );
if( !PREFSMAN->m_bDancePointsForOni && PERCENT_USE_REMAINDER )
{
m_textPercentRemainder.SetName( ssprintf("PercentRemainderP%d",pn+1) );
m_textPercentRemainder.LoadFromNumbers( THEME->GetPathToN(m_sName + " remainder") );
SET_XY_AND_ON_COMMAND( m_textPercentRemainder );
m_textPercentRemainder.SetText( "456" );
this->AddChild( &m_textPercentRemainder );
}
Refresh();
}
void PercentageDisplay::TweenOffScreen()
{
OFF_COMMAND( m_textPercent );
if( PREFSMAN->m_bDancePointsForOni && PERCENT_USE_REMAINDER )
OFF_COMMAND( m_textPercentRemainder );
}
void PercentageDisplay::Update( float fDeltaTime )
{
ActorFrame::Update( fDeltaTime );
Refresh();
}
void PercentageDisplay::Refresh()
{
const int iActualDancePoints = GAMESTATE->m_CurStageStats.iActualDancePoints[m_PlayerNumber];
if( iActualDancePoints == m_Last )
return;
m_Last = iActualDancePoints;
CString sNumToDisplay;
@@ -44,12 +70,21 @@ void PercentageDisplay::Update( float fDeltaTime )
int iPossibleDancePoints = GAMESTATE->m_CurStageStats.iPossibleDancePoints[m_PlayerNumber];
iPossibleDancePoints = max( 1, iPossibleDancePoints );
float fPercentDancePoints = iActualDancePoints / (float)iPossibleDancePoints + 0.00001f; // correct for rounding errors
fPercentDancePoints = max( fPercentDancePoints, 0 );
float fNumToDisplay = max( 0, fPercentDancePoints*100 );
sNumToDisplay = ssprintf( "%0*.*f%%", PERCENT_TOTAL_SIZE, PERCENT_DECIMAL_PLACES, fNumToDisplay );
if( PERCENT_USE_REMAINDER )
{
int iPercentWhole = int(fPercentDancePoints*100);
int iPercentRemainder = int( (fPercentDancePoints*100 - int(fPercentDancePoints*100)) * 10 );
sNumToDisplay = ssprintf( "%02d", iPercentWhole );
m_textPercentRemainder.SetText( ssprintf(".%01d%%", iPercentRemainder) );
} else {
float fNumToDisplay = max( 0, fPercentDancePoints*100 );
sNumToDisplay = ssprintf( "%0*.*f%%", PERCENT_TOTAL_SIZE, PERCENT_DECIMAL_PLACES, fNumToDisplay );
}
}
else
sNumToDisplay = ssprintf( "%*d", DANCE_POINT_DIGITS, iActualDancePoints );
sNumToDisplay = ssprintf( "%*d", DANCE_POINT_DIGITS, max( 0, iActualDancePoints ) );
m_textPercent.SetText( sNumToDisplay );
}
+3
View File
@@ -11,11 +11,14 @@ public:
PercentageDisplay();
void Load( PlayerNumber pn );
void Update( float fDeltaTime );
void TweenOffScreen();
private:
void Refresh();
PlayerNumber m_PlayerNumber;
int m_Last;
BitmapText m_textPercent;
BitmapText m_textPercentRemainder;
};
#endif