add static-sized array versions of ThemeMetric

This commit is contained in:
Chris Danford
2005-02-06 04:57:57 +00:00
parent 4223e09cc8
commit e4117354ae
3 changed files with 69 additions and 10 deletions
+8 -5
View File
@@ -14,8 +14,6 @@
#include "Foreach.h"
#include "RageSoundManager.h"
#define CURSOR_OFFSET_X_FROM_ICON( p, part ) THEME->GetMetricF(m_sName,ssprintf("CursorPart%dP%dOffsetXFromIcon",part+1,p+1))
#define CURSOR_OFFSET_Y_FROM_ICON( p, part ) THEME->GetMetricF(m_sName,ssprintf("CursorPart%dP%dOffsetYFromIcon",part+1,p+1))
#define OPTION_ORDER( dir ) THEME->GetMetric (m_sName,"OptionOrder"+CString(dir))
/* OptionOrderLeft=0:1,1:2,2:3,3:4 */
@@ -26,6 +24,9 @@ const char *ScreenSelectMaster::dirs[NUM_DIRS] =
const ScreenMessage SM_PlayPostSwitchPage = (ScreenMessage)(SM_User+1);
CString CURSOR_OFFSET_X_FROM_ICON_NAME( size_t p, size_t part ) { return ssprintf("CursorPart%dP%dOffsetXFromIcon",part+1,p+1); }
CString CURSOR_OFFSET_Y_FROM_ICON_NAME( size_t p, size_t part ) { return ssprintf("CursorPart%dP%dOffsetYFromIcon",part+1,p+1); }
REGISTER_SCREEN_CLASS( ScreenSelectMaster );
ScreenSelectMaster::ScreenSelectMaster( CString sClassName ) : ScreenSelect( sClassName ),
NUM_ICON_PARTS(m_sName,"NumIconParts"),
@@ -33,6 +34,8 @@ ScreenSelectMaster::ScreenSelectMaster( CString sClassName ) : ScreenSelect( sCl
NUM_CURSOR_PARTS(m_sName,"NumCursorParts"),
SHARED_PREVIEW_AND_CURSOR(m_sName,"SharedPreviewAndCursor"),
NUM_CHOICES_ON_PAGE_1(m_sName,"NumChoicesOnPage1"),
CURSOR_OFFSET_X_FROM_ICON(m_sName,CURSOR_OFFSET_X_FROM_ICON_NAME,NUM_PLAYERS,NUM_CURSOR_PARTS),
CURSOR_OFFSET_Y_FROM_ICON(m_sName,CURSOR_OFFSET_Y_FROM_ICON_NAME,NUM_PLAYERS,NUM_CURSOR_PARTS),
PRE_SWITCH_PAGE_SECONDS(m_sName,"PreSwitchPageSeconds"),
POST_SWITCH_PAGE_SECONDS(m_sName,"PostSwitchPageSeconds"),
EXTRA_SLEEP_AFTER_TWEEN_OFF_SECONDS(m_sName,"ExtraSleepAfterTweenOffSeconds"),
@@ -106,7 +109,7 @@ ScreenSelectMaster::ScreenSelectMaster( CString sClassName ) : ScreenSelect( sCl
{
const GameCommand& mc = m_aGameCommands[c];
m_sprScroll[c][0].Load( THEME->GetPathG(m_sName,ssprintf("%s Scroll Choice%s",mc.m_sName.c_str())) );
m_sprScroll[c][0].Load( THEME->GetPathG(m_sName,ssprintf("Scroll Choice%s",mc.m_sName.c_str())) );
m_sprScroll[c][0]->SetName( ssprintf("Scroll") );
m_sprScroll[c][0]->PlayCommand( "Init" );
m_Scroller[0].AddChild( m_sprScroll[c][0] );
@@ -812,12 +815,12 @@ void ScreenSelectMaster::TweenOffScreen()
float ScreenSelectMaster::GetCursorX( PlayerNumber pn, int iPartIndex )
{
return m_sprIcon[0][m_iChoice[pn]]->GetX() + CURSOR_OFFSET_X_FROM_ICON(pn, iPartIndex);
return m_sprIcon[0][m_iChoice[pn]]->GetX() + CURSOR_OFFSET_X_FROM_ICON.GetValue(pn, iPartIndex);
}
float ScreenSelectMaster::GetCursorY( PlayerNumber pn, int iPartIndex )
{
return m_sprIcon[0][m_iChoice[pn]]->GetY() + CURSOR_OFFSET_Y_FROM_ICON(pn, iPartIndex);
return m_sprIcon[0][m_iChoice[pn]]->GetY() + CURSOR_OFFSET_Y_FROM_ICON.GetValue(pn, iPartIndex);
}
/*
+5 -5
View File
@@ -10,6 +10,9 @@
#include "ActorScroller.h"
#define MAX_CHOICES 30
#define MAX_ICON_PARTS 3
#define MAX_PREVIEW_PARTS 3
#define MAX_CURSOR_PARTS 3
class ScreenSelectMaster : public ScreenSelect
{
@@ -38,8 +41,8 @@ protected:
ThemeMetric<int> NUM_CURSOR_PARTS;
ThemeMetric<bool> SHARED_PREVIEW_AND_CURSOR;
ThemeMetric<int> NUM_CHOICES_ON_PAGE_1;
//ThemeMetric<float> CURSOR_OFFSET_X_FROM_ICON( p, part ) THEME->GetMetricF(m_sName,ssprintf("CursorPart%dP%dOffsetXFromIcon",part+1,p+1))
//ThemeMetric<float> CURSOR_OFFSET_Y_FROM_ICON( p, part ) THEME->GetMetricF(m_sName,ssprintf("CursorPart%dP%dOffsetYFromIcon",part+1,p+1))
ThemeMetric2D<float,NUM_PLAYERS,MAX_CURSOR_PARTS> CURSOR_OFFSET_X_FROM_ICON;
ThemeMetric2D<float,NUM_PLAYERS,MAX_CURSOR_PARTS> CURSOR_OFFSET_Y_FROM_ICON;
ThemeMetric<float> PRE_SWITCH_PAGE_SECONDS;
ThemeMetric<float> POST_SWITCH_PAGE_SECONDS;
ThemeMetric<float> EXTRA_SLEEP_AFTER_TWEEN_OFF_SECONDS;
@@ -77,13 +80,10 @@ protected:
AutoActor m_sprExplanation[NUM_PAGES];
AutoActor m_sprMore[NUM_PAGES];
#define MAX_ICON_PARTS 3
// icon is the piece shared, per-choice piece
AutoActor m_sprIcon[MAX_ICON_PARTS][MAX_CHOICES];
#define MAX_PREVIEW_PARTS 3
// preview is per-choice, per-player piece
AutoActor m_sprPreview[MAX_PREVIEW_PARTS][MAX_CHOICES][NUM_PLAYERS];
#define MAX_CURSOR_PARTS 3
// cursor is the per-player that's shared by all choices
AutoActor m_sprCursor[MAX_CURSOR_PARTS][NUM_PLAYERS];
// scroll is the per-player, per-choice piece that's scrolled
+56
View File
@@ -79,6 +79,62 @@ public:
}
};
typedef CString (*MetricName1D)(size_t N);
template <class T, size_t N>
class ThemeMetric1D : public IThemeMetric
{
ThemeMetric<T> m_metric[N];
public:
ThemeMetric1D( const CString& sGroup, MetricName1D pfn, size_t nToInit )
{
ASSERT( nToInit <= N );
for( unsigned i=0; i<nToInit; i++ )
m_metric[i].Load( sGroup, pfn(i) );
}
void Read()
{
for( unsigned i=0; i<N; i++ )
m_metric[i].Read();
}
const T& GetValue( size_t i ) const
{
return m_metric[i].GetValue();
}
};
typedef CString (*MetricName2D)(size_t N, size_t M);
template <class T, size_t N, size_t M>
class ThemeMetric2D : public IThemeMetric
{
ThemeMetric<T> m_metric[N][M];
public:
ThemeMetric2D( const CString& sGroup, MetricName2D pfn, size_t nToInit, size_t mToInit )
{
ASSERT( nToInit <= N );
ASSERT( mToInit <= M );
for( unsigned i=0; i<nToInit; i++ )
for( unsigned j=0; j<mToInit; j++ )
m_metric[i][j].Load( sGroup, pfn(i,j) );
}
void Read()
{
for( unsigned i=0; i<N; i++ )
for( unsigned j=0; j<M; j++ )
m_metric[i][j].Read();
}
const T& GetValue( size_t i, size_t j ) const
{
return m_metric[i][j].GetValue();
}
};
#endif
/*