eval cleanup: make Grades AutoActors, make metrics and element names match

This commit is contained in:
Chris Danford
2008-04-04 15:32:31 +00:00
parent 8eab5b1c0b
commit 5069eab0c2
5 changed files with 37 additions and 80 deletions
+14 -57
View File
@@ -4,69 +4,28 @@
#include "arch/Dialog/Dialog.h"
#include "RageLog.h"
#include "ActorUtil.h"
#include "ThemeManager.h"
REGISTER_ACTOR_CLASS( GradeDisplay )
void GradeDisplay::Load( RageTextureID ID )
void GradeDisplay::Load( RString sMetricsGroup )
{
Sprite::Load( ID );
Sprite::StopAnimating();
bool bWarn = Sprite::GetNumStates() != 8 && Sprite::GetNumStates() != 16;
if( ID.filename.find("_blank") != RString::npos )
bWarn = false;
if( bWarn )
ASSERT( m_vSpr.empty() );
FOREACH_UsedGrade( g )
{
RString sError = ssprintf( "The grade graphic '%s' must have either 8 or 16 frames.", ID.filename.c_str() );
LOG->Warn( sError );
Dialog::OK( sError );
m_vSpr.resize( m_vSpr.size()+1 );
m_vSpr.back().Load( THEME->GetPathG(sMetricsGroup,GradeToString(g)) );
m_vSpr.back()->SetVisible( false );
}
}
int GradeDisplay::GetFrameIndex( PlayerNumber pn, Grade g )
void GradeDisplay::SetGrade( Grade grade )
{
if( Sprite::GetNumStates() == 1 )
return 0;
// either 8, or 16 states
int iNumCols;
switch( Sprite::GetNumStates() )
int i = 0;
FOREACH_UsedGrade( g )
{
case 8: iNumCols=1; break;
case 16: iNumCols=2; break;
default:
ASSERT(0);
}
int iFrame;
switch( g )
{
case Grade_Tier01: iFrame = 0; break;
case Grade_Tier02: iFrame = 1; break;
case Grade_Tier03: iFrame = 2; break;
case Grade_Tier04: iFrame = 3; break;
case Grade_Tier05: iFrame = 4; break;
case Grade_Tier06: iFrame = 5; break;
case Grade_Tier07: iFrame = 6; break;
default: iFrame = 6; break;
case Grade_Failed: iFrame = 7; break;
}
iFrame *= iNumCols;
if( iNumCols==2 )
iFrame += pn;
return iFrame;
}
void GradeDisplay::SetGrade( PlayerNumber pn, Grade g )
{
if( g != Grade_NoData )
{
SetState( GetFrameIndex(pn,g) );
SetVisible( true );
}
else
{
SetVisible( false );
m_vSpr[i]->SetVisible( g == grade );
i++;
}
}
@@ -78,15 +37,13 @@ class LunaGradeDisplay: public Luna<GradeDisplay>
public:
static int Load( T* p, lua_State *L )
{
RageTextureID id( SArg(1) );
p->Load( id );
p->Load( SArg(1) );
return 0;
}
static int SetGrade( T* p, lua_State *L )
{
PlayerNumber pn = Enum::Check<PlayerNumber>(L, 1);
Grade g = Enum::Check<Grade>(L, 2);
p->SetGrade( pn, g );
p->SetGrade( g );
return 0;
}