Move lyric display into an actor

Use Commands for tween in/out; queue a whole lyric line at
once (simpler)
This commit is contained in:
Glenn Maynard
2003-03-19 19:57:52 +00:00
parent 07fadbc8f5
commit 9a23edcd1a
2 changed files with 104 additions and 0 deletions
+83
View File
@@ -0,0 +1,83 @@
#include "global.h"
#include "LyricDisplay.h"
#include "GameState.h"
#include "ThemeManager.h"
#define IN_COMMAND THEME->GetMetric("LyricDisplay","InCommand")
#define OUT_COMMAND THEME->GetMetric("LyricDisplay","OutCommand")
float g_TweenInTime, g_TweenOutTime;
LyricDisplay::LyricDisplay()
{
// We need to use the Color Tag that's in m_pCurSong->m_LyricSegments[?].m_sColor
// But since the value there is in Hex, need to convert to RageColor I guess.
// Until that gets done, this will default to white (&HFFFFFF)
m_textLyrics.LoadFromFont( THEME->GetPathTo("Fonts","normal") );
m_textLyrics.SetDiffuse( RageColor(1,1,1,1) );
this->AddChild(&m_textLyrics);
Init();
}
void LyricDisplay::Init()
{
m_textLyrics.SetText("");
m_iCurLyricNumber = 0;
/* Update global cache: */
g_TweenInTime = Actor::GetCommandLength(IN_COMMAND);
g_TweenOutTime = Actor::GetCommandLength(OUT_COMMAND);
}
void LyricDisplay::Update( float fDeltaTime )
{
ActorFrame::Update( fDeltaTime );
// Make sure we don't go over the array's boundry
if( m_iCurLyricNumber >= GAMESTATE->m_pCurSong->m_LyricSegments.size() )
return;
Song *song = GAMESTATE->m_pCurSong;
const float fStartTime = (song->m_LyricSegments[m_iCurLyricNumber].m_fStartTime) - g_TweenInTime;
if(GAMESTATE->m_fMusicSeconds < fStartTime)
return;
const float MaxDisplayTime = 10;
float fShowLength = MaxDisplayTime;
if(m_iCurLyricNumber+1 < GAMESTATE->m_pCurSong->m_LyricSegments.size())
{
/* Clamp this lyric to the beginning of the next. */
const float Distance =
song->m_LyricSegments[m_iCurLyricNumber+1].m_fStartTime -
song->m_LyricSegments[m_iCurLyricNumber].m_fStartTime;
const float TweenBufferTime = g_TweenInTime + g_TweenOutTime;
fShowLength = min(fShowLength, Distance - TweenBufferTime);
}
m_textLyrics.SetText( GAMESTATE->m_pCurSong->m_LyricSegments[m_iCurLyricNumber].m_sLyric );
// m_textLyrics.SetDiffuse(COLOR);
m_textLyrics.StopTweening();
m_textLyrics.Command(IN_COMMAND);
m_textLyrics.BeginTweening( fShowLength ); /* sleep */
m_textLyrics.Command(OUT_COMMAND);
m_iCurLyricNumber++;
/*I figure for longer lines of text, the Lyric display object should
be scaled down, if needed, by the .ScaleTo() function. But somehow
it jus ain't working for me at all.. anyone able to do this
properly?? We prolly should also add detection of where to put
the Lyric object, if the arrows are on reverse? Jus an idea,
but it kinda defeats the purpose of the Lyric object X/Y being a
theme element :)
*/
}
+21
View File
@@ -0,0 +1,21 @@
#ifndef LYRIC_DISPLAY_H
#define LYRIC_DISPLAY_H
#include "ActorFrame.h"
#include "Song.h"
#include "BitmapText.h"
class LyricDisplay: public ActorFrame {
public:
LyricDisplay();
void Update(float fDeltaTime);
/* Call when song changes: */
void Init();
private:
BitmapText m_textLyrics;
unsigned m_iCurLyricNumber;
};
#endif