|
From: Lasse Kärkkäi. <tr...@us...> - 2011-05-30 08:04:24
|
Author: Lasse Karkkainen <tro...@tr...>
Date: Mon May 30 11:03:32 2011 +0300
Implement proper reloadGL for all important screens.
---
game/screen_intro.cc | 6 ++-
game/screen_intro.hh | 1 +
game/screen_practice.cc | 6 ++-
game/screen_practice.hh | 1 +
game/screen_sing.cc | 110 ++++++++++++++++++++++++-----------------------
game/screen_sing.hh | 1 +
game/screen_songs.cc | 14 ++++--
game/screen_songs.hh | 1 +
8 files changed, 79 insertions(+), 61 deletions(-)
diff --git a/game/screen_intro.cc b/game/screen_intro.cc
index a15ab0b..6109b06 100644
--- a/game/screen_intro.cc
+++ b/game/screen_intro.cc
@@ -18,7 +18,6 @@ void ScreenIntro::enter() {
m_audio.playMusic(getThemePath("menu.ogg"), true);
m_selAnim = AnimValue(0.0, 10.0);
m_submenuAnim = AnimValue(0.0, 3.0);
- theme.reset(new ThemeIntro());
populateMenu();
if( m_first ) {
std::string msg;
@@ -26,6 +25,11 @@ void ScreenIntro::enter() {
if (!msg.empty()) ScreenManager::getSingletonPtr()->dialog(msg + _("\nPlease configure some before playing."));
m_first = false;
}
+ reloadGL();
+}
+
+void ScreenIntro::reloadGL() {
+ theme.reset(new ThemeIntro());
}
void ScreenIntro::exit() {
diff --git a/game/screen_intro.hh b/game/screen_intro.hh
index 2f1e572..2c08226 100644
--- a/game/screen_intro.hh
+++ b/game/screen_intro.hh
@@ -17,6 +17,7 @@ class ScreenIntro : public Screen {
ScreenIntro(std::string const& name, Audio& audio);
void enter();
void exit();
+ void reloadGL();
void manageEvent(SDL_Event event);
void draw();
diff --git a/game/screen_practice.cc b/game/screen_practice.cc
index 6d56289..27bcc21 100644
--- a/game/screen_practice.cc
+++ b/game/screen_practice.cc
@@ -13,7 +13,6 @@ ScreenPractice::ScreenPractice(std::string const& name, Audio& audio):
void ScreenPractice::enter() {
m_audio.playMusic(getThemePath("practice.ogg"));
- theme.reset(new ThemePractice());
// draw vu meters
for (unsigned int i = 0, mics = m_audio.analyzers().size(); i < mics; ++i) {
m_vumeters.push_back(new ProgressBar(getThemePath("vumeter_bg.svg"), getThemePath("vumeter_fg.svg"), ProgressBar::VERTICAL, 0.136, 0.023));
@@ -25,6 +24,11 @@ void ScreenPractice::enter() {
m_samples.push_back("drum tom1");
m_samples.push_back("drum cymbal");
//m_samples.push_back("drum tom2");
+ reloadGL();
+}
+
+void ScreenPractice::reloadGL() {
+ theme.reset(new ThemePractice());
}
void ScreenPractice::exit() {
diff --git a/game/screen_practice.hh b/game/screen_practice.hh
index 6c20b52..bb0ae1e 100644
--- a/game/screen_practice.hh
+++ b/game/screen_practice.hh
@@ -16,6 +16,7 @@ class ScreenPractice : public Screen {
ScreenPractice(std::string const& name, Audio& audio);
void enter();
void exit();
+ void reloadGL();
void manageEvent( SDL_Event event );
void draw();
diff --git a/game/screen_sing.cc b/game/screen_sing.cc
index 5ba975c..a64505e 100644
--- a/game/screen_sing.cc
+++ b/game/screen_sing.cc
@@ -31,9 +31,6 @@ namespace {
void ScreenSing::enter() {
ScreenManager* sm = ScreenManager::getSingletonPtr();
- sm->loading(_("Loading theme..."), 0.0);
- theme.reset(new ThemeSing());
- m_menuTheme.reset(new ThemeInstrumentMenu());
sm->loading(_("Loading song..."), 0.3);
// Load the rest of the song
if (m_song->loadStatus != Song::FULL) {
@@ -44,18 +41,6 @@ void ScreenSing::enter() {
sm->activateScreen("Songs");
}
}
- // Load background
- sm->loading(_("Loading background..."), 0.4);
- bool foundbg = false;
- if (!m_song->background.empty()) { // Load bg image
- try {
- m_background.reset(new Surface(m_song->path + m_song->background));
- foundbg = true;
- } catch (std::exception& e) {
- m_song->background = "";
- std::cerr << e.what() << std::endl;
- }
- }
// Initialize webcam
sm->loading(_("Initializing webcam..."), 0.5);
if (config["graphic/webcam"].b() && Webcam::enabled()) {
@@ -68,25 +53,6 @@ void ScreenSing::enter() {
if (!m_song->video.empty() && config["graphic/video"].b()) {
m_video.reset(new Video(m_song->path + m_song->video, m_song->videoGap));
}
- // Use random bg if specified fails (also for tracks with video)
- if (!foundbg) {
- sm->loading(_("Random background..."), 0.65);
- for (int i = 1; i <= 2; ++i) { // Try two times in case first is b0rked
- try {
- std::string bgpath = m_backgrounds.getRandom();
- m_background.reset(new Surface(bgpath));
- break;
- } catch (std::exception& e) {
- std::cerr << e.what() << std::endl;
- }
- }
- }
- sm->loading(_("Loading user interface..."), 0.7);
- m_pause_icon.reset(new Surface(getThemePath("sing_pause.svg")));
- m_help.reset(new Surface(getThemePath("instrumenthelp.svg")));
- m_progress.reset(new ProgressBar(getThemePath("sing_progressbg.svg"), getThemePath("sing_progressfg.svg"), ProgressBar::HORIZONTAL, 0.01f, 0.01f, true));
- m_progress->dimensions.fixedWidth(0.4).left(-0.5).screenTop();
- theme->timer.dimensions.screenTop(0.5 * m_progress->dimensions.h());
boost::ptr_vector<Analyzer>& analyzers = m_audio.analyzers();
m_layout_singer.reset(new LayoutSinger(m_song->getVocalTrack(m_selectedTrack), m_database, theme));
// Load instrument and dance tracks
@@ -140,12 +106,67 @@ void ScreenSing::enter() {
sm->loading(_("Finalizing..."), 0.95);
m_audio.playMusic(m_song->music, false, 0.0, setup_delay);
m_engine.reset(new Engine(m_audio, m_song->getVocalTrack(m_selectedTrack), analyzers.begin(), analyzers.end(), m_database));
- sm->loading(_("Loading complete"), 1.0);
// Notify about broken tracks
if (m_song->b0rkedTracks) ScreenManager::getSingletonPtr()->dialog(_("Song contains broken tracks!"));
sm->showLogo(false);
+ sm->loading(_("Loading graphics..."), 0.9);
+ reloadGL();
+ sm->loading(_("Loading complete"), 1.0);
}
+void ScreenSing::reloadGL() {
+ ScreenManager* sm = ScreenManager::getSingletonPtr();
+ // Load UI graphics
+ theme.reset(new ThemeSing());
+ m_menuTheme.reset(new ThemeInstrumentMenu());
+ m_pause_icon.reset(new Surface(getThemePath("sing_pause.svg")));
+ m_help.reset(new Surface(getThemePath("instrumenthelp.svg")));
+ m_progress.reset(new ProgressBar(getThemePath("sing_progressbg.svg"), getThemePath("sing_progressfg.svg"), ProgressBar::HORIZONTAL, 0.01f, 0.01f, true));
+ m_progress->dimensions.fixedWidth(0.4).left(-0.5).screenTop();
+ theme->timer.dimensions.screenTop(0.5 * m_progress->dimensions.h());
+ // Load background
+ bool foundbg = false;
+ if (!m_song->background.empty()) { // Load bg image
+ try {
+ m_background.reset(new Surface(m_song->path + m_song->background));
+ foundbg = true;
+ } catch (std::exception& e) {
+ m_song->background = "";
+ std::cerr << e.what() << std::endl;
+ }
+ }
+ // Use random bg if specified fails (also for tracks with video)
+ if (!foundbg) {
+ sm->loading(_("Random background..."), 0.65);
+ try {
+ std::string bgpath = m_backgrounds.getRandom();
+ m_background.reset(new Surface(bgpath));
+ } catch (std::exception& e) {
+ std::cerr << e.what() << std::endl;
+ }
+ }
+}
+
+void ScreenSing::exit() {
+ m_engine.reset();
+ m_score_window.reset();
+ m_menu.clear();
+ m_instruments.clear();
+ m_dancers.clear();
+ m_layout_singer.reset();
+ m_help.reset();
+ m_pause_icon.reset();
+ m_cam.reset();
+ m_video.reset();
+ m_background.reset();
+ m_song->dropNotes();
+ m_menuTheme.reset();
+ theme.reset();
+ if (m_audio.isPaused()) m_audio.togglePause();
+ ScreenManager::getSingletonPtr()->showLogo();
+}
+
+
/// Manages the instrument drawing
/// Returns false if no instuments are alive
@@ -238,25 +259,6 @@ void ScreenSing::danceLayout(double time) {
}
}
-void ScreenSing::exit() {
- m_engine.reset();
- m_score_window.reset();
- m_menu.clear();
- m_instruments.clear();
- m_dancers.clear();
- m_layout_singer.reset();
- m_help.reset();
- m_pause_icon.reset();
- m_cam.reset();
- m_video.reset();
- m_background.reset();
- m_song->dropNotes();
- m_menuTheme.reset();
- theme.reset();
- if (m_audio.isPaused()) m_audio.togglePause();
- ScreenManager::getSingletonPtr()->showLogo();
-}
-
void ScreenSing::activateNextScreen()
{
ScreenManager* sm = ScreenManager::getSingletonPtr();
diff --git a/game/screen_sing.hh b/game/screen_sing.hh
index 0b63066..b3dd744 100644
--- a/game/screen_sing.hh
+++ b/game/screen_sing.hh
@@ -53,6 +53,7 @@ class ScreenSing: public Screen {
{}
void enter();
void exit();
+ void reloadGL();
void manageEvent(SDL_Event event);
void draw();
diff --git a/game/screen_songs.cc b/game/screen_songs.cc
index e6890a8..9d5176b 100644
--- a/game/screen_songs.cc
+++ b/game/screen_songs.cc
@@ -21,6 +21,15 @@ ScreenSongs::ScreenSongs(std::string const& name, Audio& audio, Songs& songs, Da
}
void ScreenSongs::enter() {
+ m_songs.setFilter(m_search.text);
+ m_audio.fadeout();
+ m_jukebox = false;
+ show_hiscores = false;
+ hiscore_start_pos = 0;
+ reloadGL();
+}
+
+void ScreenSongs::reloadGL() {
theme.reset(new ThemeSongs());
m_songbg_default.reset(new Surface(getThemePath("songs_bg_default.svg")));
m_songbg_ground.reset(new Surface(getThemePath("songs_bg_ground.svg")));
@@ -29,11 +38,6 @@ void ScreenSongs::enter() {
m_bandCover.reset(new Surface(getThemePath("band_cover.svg")));
m_danceCover.reset(new Surface(getThemePath("dance_cover.svg")));
m_instrumentList.reset(new Texture(getThemePath("instruments.svg")));
- m_songs.setFilter(m_search.text);
- m_audio.fadeout();
- m_jukebox = false;
- show_hiscores = false;
- hiscore_start_pos = 0;
}
void ScreenSongs::exit() {
diff --git a/game/screen_songs.hh b/game/screen_songs.hh
index c5c38ef..4fd16ff 100644
--- a/game/screen_songs.hh
+++ b/game/screen_songs.hh
@@ -30,6 +30,7 @@ public:
ScreenSongs(std::string const& name, Audio& audio, Songs& songs, Database& database);
void enter();
void exit();
+ void reloadGL();
void manageSharedKey(input::NavButton nav); ///< same behaviour for jukebox and normal mode
void manageEvent(SDL_Event event);
void draw();
|