themeable menu timer text

This commit is contained in:
Chris Danford
2005-05-04 02:30:55 +00:00
parent c5a94d749c
commit 00fd1cfab9
3 changed files with 48 additions and 26 deletions
+4 -1
View File
@@ -2469,7 +2469,10 @@ StopMusicOnBack=1
WarningStart=6
WarningBeepStart=5
MaxStallSeconds=30
OnCommand=stoptweening;shadowlength,0;zoomx,1
Text1OnCommand=stoptweening;shadowlength,0;zoomx,1;addx,-16
Text1FormatFunction=function(fSeconds) fSeconds=math.ceil(fSeconds); local digit = math.floor(fSeconds/10); return ""..digit end
Text2OnCommand=stoptweening;shadowlength,0;zoomx,1;addx,16
Text2FormatFunction=function(fSeconds) fSeconds=math.ceil(fSeconds); local digit = math.mod(fSeconds,10); return ""..digit end
WarningCommand6=stoptweening;sleep,0.8;linear,0.2;zoomx,0
WarningCommand5=stoptweening;linear,0.2;zoomx,1;sleep,0.6;linear,0.2;zoomx,0;glowshift;effectperiod,0.15;effectcolor1,1,0,0,0;effectcolor2,1,0,0,1
WarningCommand4=stoptweening;linear,0.2;zoomx,1;sleep,0.6;linear,0.2;zoomx,0
+38 -22
View File
@@ -9,13 +9,15 @@
#include "Font.h"
#include "GameSoundManager.h"
#include "ThemeMetric.h"
#include "ActorUtil.h"
CString WARNING_COMMAND_NAME( size_t i ) { return ssprintf("WarningCommand%d",int(i)); }
static const ThemeMetric<int> WARNING_START ("MenuTimer","WarningStart");
static const ThemeMetric<int> WARNING_BEEP_START ("MenuTimer","WarningBeepStart");
static const ThemeMetric<float> MAX_STALL_SECONDS ("MenuTimer","MaxStallSeconds");
static const ThemeMetric<apActorCommands> ON_COMMAND ("MenuTimer","OnCommand");
static const ThemeMetric<CString> TEXT1_FORMAT_FUNCTION ("MenuTimer","Text1FormatFunction");
static const ThemeMetric<CString> TEXT2_FORMAT_FUNCTION ("MenuTimer","Text2FormatFunction");
static const float TIMER_PAUSE_SECONDS = 99;
@@ -26,15 +28,15 @@ MenuTimer::MenuTimer() :
m_fStallSecondsLeft = MAX_STALL_SECONDS;
m_bPaused = false;
m_textDigit1.LoadFromFont( THEME->GetPathF("MenuTimer","numbers") );
m_textDigit2.LoadFromFont( THEME->GetPathF("MenuTimer","numbers") );
for( int i=0; i<NUM_MENU_TIMER_TEXTS; i++ )
{
m_text[i].LoadFromFont( THEME->GetPathF("MenuTimer","numbers") );
m_text[i].SetName( ssprintf("Text%d",i+1) );
ActorUtil::OnCommand( m_text[i], "MenuTimer" );
this->AddChild( &m_text[i] );
const float fCharWidth = (float) m_textDigit1.m_pFont->GetLineWidthInSourcePixels(L"0");
m_textDigit1.SetX( -fCharWidth/2 );
m_textDigit2.SetX( +fCharWidth/2 );
this->AddChild( &m_textDigit1 );
this->AddChild( &m_textDigit2 );
m_exprFormatText[i].SetFromExpression( i==0 ? TEXT1_FORMAT_FUNCTION : TEXT2_FORMAT_FUNCTION );
}
SetSeconds( TIMER_PAUSE_SECONDS );
@@ -48,8 +50,10 @@ void MenuTimer::EnableStealth( bool bStealth )
else
m_soundBeep.Load( THEME->GetPathS("MenuTimer","tick") ); // reload the sound
m_textDigit1.SetHidden( bStealth );
m_textDigit2.SetHidden( bStealth );
for( int i=0; i<NUM_MENU_TIMER_TEXTS; i++ )
{
m_text[i].SetHidden( bStealth );
}
}
void MenuTimer::Update( float fDeltaTime )
@@ -83,16 +87,16 @@ void MenuTimer::Update( float fDeltaTime )
if( iNewDisplay <= WARNING_START )
{
m_textDigit1.RunCommands( WARNING_COMMAND.GetValue(iNewDisplay) );
m_textDigit2.RunCommands( WARNING_COMMAND.GetValue(iNewDisplay) );
for( int i=0; i<NUM_MENU_TIMER_TEXTS; i++ )
m_text[i].RunCommands( WARNING_COMMAND.GetValue(iNewDisplay) );
}
if( iNewDisplay == 0 )
{
Stop();
SCREENMAN->PostMessageToTopScreen( SM_MenuTimer, 0 );
m_textDigit1.SetEffectNone();
m_textDigit2.SetEffectNone();
for( int i=0; i<NUM_MENU_TIMER_TEXTS; i++ )
m_text[i].SetEffectNone();
}
if( iNewDisplay <= WARNING_BEEP_START )
@@ -138,8 +142,8 @@ void MenuTimer::SetSeconds( float fSeconds )
{
m_fSecondsLeft = fSeconds;
m_textDigit1.RunCommands( ON_COMMAND );
m_textDigit2.RunCommands( ON_COMMAND );
for( int i=0; i<NUM_MENU_TIMER_TEXTS; i++ )
m_text[i].PlayCommand( "On" );
SetText( (int)fSeconds );
}
@@ -149,13 +153,25 @@ void MenuTimer::Start()
m_bPaused = false;
}
void MenuTimer::SetText( int iSeconds )
void MenuTimer::SetText( float fSeconds )
{
const int iDigit1 = (int)(iSeconds)/10;
const int iDigit2 = (int)(iSeconds)%10;
for( int i=0; i<NUM_MENU_TIMER_TEXTS; i++ )
{
// function
m_exprFormatText[i].PushSelf( LUA->L );
ASSERT( !lua_isnil(LUA->L, -1) );
m_textDigit1.SetText( ssprintf("%d",iDigit1) );
m_textDigit2.SetText( ssprintf("%d",iDigit2) );
// 1st parameter
LuaHelpers::Push( fSeconds, LUA->L );
// call function with 1 argument and 1 result
lua_call(LUA->L, 1, 1);
CString sText;
LuaHelpers::FromStack( sText, -1, LUA->L );
m_text[i].SetText( sText );
}
}
/*
+6 -3
View File
@@ -31,10 +31,13 @@ protected:
float m_fStallSeconds, m_fStallSecondsLeft;
bool m_bPaused;
void SetText( int iSeconds );
void SetText( float fSeconds );
BitmapText m_textDigit1;
BitmapText m_textDigit2;
#define NUM_MENU_TIMER_TEXTS 2
BitmapText m_text[NUM_MENU_TIMER_TEXTS];
LuaExpression m_exprFormatText[NUM_MENU_TIMER_TEXTS];
RageSound m_soundBeep;