|
From: Markus R. <god...@us...> - 2009-07-29 15:35:53
|
Module: performous
Branch: master
Commit: aa80c8f0c28e636335883214f15a072efe58cd51
Author: Markus Raab <un...@ma...>
Date: Tue Jul 28 08:32:29 2009 +0200
activate PlayersScreen also on Timeout
---
game/screen_sing.cc | 66 +++++++++++++++++++++++++++++---------------------
game/screen_sing.hh | 1 +
2 files changed, 39 insertions(+), 28 deletions(-)
diff --git a/game/screen_sing.cc b/game/screen_sing.cc
index 96f5093..920ea63 100644
--- a/game/screen_sing.cc
+++ b/game/screen_sing.cc
@@ -59,40 +59,49 @@ void ScreenSing::exit() {
theme.reset();
}
+void ScreenSing::activatePlayerScreen()
+{
+ ScreenManager* sm = ScreenManager::getSingletonPtr();
+
+ // TODO: multiple loading...
+ // TODO: make it possible to switch of highscore through configuration
+ SongHiscore hi(m_song->path, "High.sco");
+ try {
+ hi.load();
+ } catch (HiscoreException const& hi) {
+ std::cerr << "high.sco:" << hi.line() << " " << hi.what() << std::endl;
+ }
+
+ if (m_players.scores.empty() || !hi.reachedNewHiscore(m_players.scores.front()))
+ {
+ // if no highscore reached..
+ sm->activateScreen("Songs");
+ return;
+ }
+
+ // Score window visible -> Enter quits to Players Screen
+ Screen* s = sm->getScreen("Players");
+ ScreenPlayers* ss = dynamic_cast<ScreenPlayers*> (s);
+ assert(ss);
+ ss->setSong(m_song);
+ sm->activateScreen("Players");
+}
+
void ScreenSing::manageEvent(SDL_Event event) {
if (event.type == SDL_KEYDOWN) {
double time = m_audio.getPosition();
Song::Status status = m_song->status(time);
m_quitTimer.setValue(QUIT_TIMEOUT);
bool seekback = false;
- ScreenManager* sm = ScreenManager::getSingletonPtr();
int key = event.key.keysym.sym;
- if (key == SDLK_ESCAPE || key == SDLK_q) sm->activateScreen("Songs");
+ if (key == SDLK_ESCAPE || key == SDLK_q) {
+ ScreenManager* sm = ScreenManager::getSingletonPtr();
+ sm->activateScreen("Songs");
+ }
else if (key == SDLK_RETURN) {
if (m_score_window.get())
{
- // TODO: multiple loading...
- // TODO: make it possible to switch of highscore through configuration
- SongHiscore hi(m_song->path, "High.sco");
- try {
- hi.load();
- } catch (HiscoreException const& hi) {
- std::cerr << "high.sco:" << hi.line() << " " << hi.what() << std::endl;
- }
-
- if (m_players.scores.empty() || !hi.reachedNewHiscore(m_players.scores.front()))
- {
- // if no highscore reached..
- sm->activateScreen("Songs");
- return;
- }
-
- // Score window visible -> Enter quits to Players Screen
- Screen* s = sm->getScreen("Players");
- ScreenPlayers* ss = dynamic_cast<ScreenPlayers*> (s);
- assert(ss);
- ss->setSong(m_song);
- sm->activateScreen("Players");
+ activatePlayerScreen();
return;
}
else if (status == Song::FINISHED) m_score_window.reset(new ScoreWindow(*m_engine, m_players)); // Song finished, but no score window -> show it
@@ -193,13 +202,14 @@ void ScreenSing::draw() {
theme->timer.draw(statustxt);
}
- ScreenManager* sm = ScreenManager::getSingletonPtr();
-
if (config["game/karaoke_mode"].b()) {
- if (!m_audio.isPlaying()) sm->activateScreen("Songs");
+ if (!m_audio.isPlaying()) {
+ ScreenManager* sm = ScreenManager::getSingletonPtr();
+ sm->activateScreen("Songs");
+ }
} else {
if (m_score_window.get()) {
- if (m_quitTimer.get() == 0.0 && !m_audio.isPaused()) { sm->activateScreen("Songs"); return; }
+ if (m_quitTimer.get() == 0.0 && !m_audio.isPaused()) { activatePlayerScreen(); return; }
m_score_window->draw();
}
else if (!m_audio.isPlaying() || (status == Song::FINISHED && m_audio.getLength() - time < 3.0)) {
diff --git a/game/screen_sing.hh b/game/screen_sing.hh
index a096e63..bf8317d 100644
--- a/game/screen_sing.hh
+++ b/game/screen_sing.hh
@@ -54,6 +54,7 @@ class ScreenSing: public Screen {
private:
void drawScores();
+ void activatePlayerScreen();
Audio& m_audio;
Capture& m_capture;
Players& m_players;
|