From bb8d732a90e82ad1daed256b7747e9d4c04a9ce2 Mon Sep 17 00:00:00 2001 From: Glenn Maynard Date: Sat, 21 Feb 2004 01:53:10 +0000 Subject: [PATCH] add progress update --- stepmania/src/ScreenReloadSongs.cpp | 61 ++++++++++++++++++++++++++--- stepmania/src/ScreenReloadSongs.h | 10 ++++- 2 files changed, 64 insertions(+), 7 deletions(-) diff --git a/stepmania/src/ScreenReloadSongs.cpp b/stepmania/src/ScreenReloadSongs.cpp index 858aa39227..e4e0286efe 100644 --- a/stepmania/src/ScreenReloadSongs.cpp +++ b/stepmania/src/ScreenReloadSongs.cpp @@ -4,6 +4,41 @@ #include "SongManager.h" #include "UnlockSystem.h" #include "ScreenManager.h" +#include "RageTimer.h" +#include "RageLog.h" +#include "ThemeManager.h" + +#include "arch/LoadingWindow/LoadingWindow.h" + +static const int DrawFrameRate = 20; +class ScreenReloadSongsLoadingWindow: public LoadingWindow +{ + RageTimer m_LastDraw; + BitmapText &m_BitmapText; + +public: + ScreenReloadSongsLoadingWindow( BitmapText &bt ): + m_BitmapText(bt) + { + } + + void SetText( CString str ) + { + m_BitmapText.SetText( str ); + Paint(); + } + + void Paint() + { + /* We load songs much faster than we draw frames. Cap the draw rate, so we don't + * slow down the reload. */ + if( m_LastDraw.PeekDeltaTime() < 1.0f/DrawFrameRate ) + return; + m_LastDraw.GetDeltaTime(); + + SCREENMAN->Draw(); + } +}; /* This could be cleaned up: show progress, for example. Let's not use * this for the initial load, since we don't want to start up the display @@ -11,16 +46,32 @@ * computer while songs load. */ ScreenReloadSongs::ScreenReloadSongs( CString sClassName ): Screen(sClassName) { - m_FirstUpdate = true; + m_iUpdates = 0; + + m_Loading.LoadFromFont( THEME->GetPathF("Common", "normal") ); + m_Loading.SetXY( CENTER_X, CENTER_Y ); + this->AddChild( &m_Loading ); + + m_LoadingWindow = new ScreenReloadSongsLoadingWindow( m_Loading ); } +ScreenReloadSongs::~ScreenReloadSongs() +{ + delete m_LoadingWindow; +} + + void ScreenReloadSongs::Update( float fDeltaTime ) { - if( !m_FirstUpdate ) - return; + Screen::Update( fDeltaTime ); - m_FirstUpdate = false; - SONGMAN->Reload(); + /* Start the reload on the second update. On the first, 0, SCREENMAN->Draw won't draw. */ + ++m_iUpdates; + if( m_iUpdates != 2 ) + return; + ASSERT( !IsFirstUpdate() ); + + SONGMAN->Reload( m_LoadingWindow ); UNLOCKMAN->UpdateSongs(); SCREENMAN->SetNewScreen( "ScreenTitleMenu" ); } diff --git a/stepmania/src/ScreenReloadSongs.h b/stepmania/src/ScreenReloadSongs.h index d2ed42fe6d..4cd5a0c836 100644 --- a/stepmania/src/ScreenReloadSongs.h +++ b/stepmania/src/ScreenReloadSongs.h @@ -2,14 +2,20 @@ #define SCREEN_RELOAD_SONGS_H #include "Screen.h" +#include "BitmapText.h" +class LoadingWindow; class ScreenReloadSongs: public Screen { - bool m_FirstUpdate; - public: ScreenReloadSongs( CString sClassName ); + ~ScreenReloadSongs(); void Update( float fDeltaTime ); + +private: + int m_iUpdates; + LoadingWindow *m_LoadingWindow; + BitmapText m_Loading; }; #endif