Files
itgmania212121/stepmania/src/PercentageDisplay.cpp
T

107 lines
3.0 KiB
C++

#include "global.h"
#include "PercentageDisplay.h"
#include "GameState.h"
#include "ThemeManager.h"
#include "PrefsManager.h"
#include "ActorUtil.h"
#include "RageLog.h"
#include "StageStats.h"
#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()
{
m_pSource = NULL;
}
void PercentageDisplay::Load( PlayerNumber pn, StageStats* pSource, bool bAutoRefresh )
{
ASSERT( m_sName != "" ); // set this!
m_PlayerNumber = pn;
m_pSource = pSource;
m_bAutoRefresh = bAutoRefresh;
m_Last = -1;
if( PREFSMAN->m_bDancePointsForOni )
m_textPercent.SetName( ssprintf("DancePointsP%i", pn+1) );
else
m_textPercent.SetName( ssprintf("PercentP%i", pn+1) );
m_textPercent.LoadFromFont( THEME->GetPathN(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.LoadFromFont( 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 );
if( m_bAutoRefresh )
Refresh();
}
void PercentageDisplay::Refresh()
{
const int iActualDancePoints = m_pSource->iActualDancePoints[m_PlayerNumber];
if( iActualDancePoints == m_Last )
return;
m_Last = iActualDancePoints;
CString sNumToDisplay;
if( !PREFSMAN->m_bDancePointsForOni )
{
float fPercentDancePoints = m_pSource->GetPercentDancePoints( m_PlayerNumber );
// clamp percentage - feedback is that negative numbers look weird here.
CLAMP( fPercentDancePoints, 0.f, 1.f );
if( PERCENT_USE_REMAINDER )
{
int iPercentWhole = int(fPercentDancePoints*100);
int iPercentRemainder = int( (fPercentDancePoints*100 - int(fPercentDancePoints*100)) * 10 );
sNumToDisplay = ssprintf( "%2d", iPercentWhole );
m_textPercentRemainder.SetText( ssprintf(".%01d%%", iPercentRemainder) );
}
else
{
float fNumToDisplay = fPercentDancePoints*100;
sNumToDisplay = ssprintf( "%*.*f%%", PERCENT_TOTAL_SIZE, PERCENT_DECIMAL_PLACES, fNumToDisplay );
// HACK: Use the last frame in the numbers texture as '-'
sNumToDisplay.Replace('-','x');
}
}
else
sNumToDisplay = ssprintf( "%*d", DANCE_POINT_DIGITS, max( 0, iActualDancePoints ) );
m_textPercent.SetText( sNumToDisplay );
}
/*
* Copyright (c) 2001-2003 by the person(s) listed below. All rights reserved.
* Chris Danford
*/