add static-sized array versions of ThemeMetric
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
/*
|
||||
|
||||
Reference in New Issue
Block a user