|
From: Tapio V. <aa...@us...> - 2010-01-19 19:31:09
|
Module: performous
Branch: master
Commit: 917e9fa3f5059fafdd045069d3f3f9c6b72d381e
Author: Tapio Vierros <tap...@gm...>
Date: Tue Jan 19 21:25:54 2010 +0200
Modified flash message system, fading now works again.
---
game/main.cc | 18 ++++++------
game/screen.hh | 19 ++++---------
game/screen_sing.cc | 2 +-
game/screenmanager.cc | 72 +++++++++++++-----------------------------------
4 files changed, 36 insertions(+), 75 deletions(-)
diff --git a/game/main.cc b/game/main.cc
index b32ee38..5968199 100644
--- a/game/main.cc
+++ b/game/main.cc
@@ -138,9 +138,9 @@ void mainLoop(std::string const& songlist) {
Window window(config["graphic/window_width"].i(), config["graphic/window_height"].i(), config["graphic/fullscreen"].b());
ScreenManager sm;
try {
- sm.FlashMessage(_("Loading..."));
+ sm.flashMessage(_("Loading..."), 0.0f, 1.0f, 1.0f); // No fade-in to get it to show
window.blank();
- sm.FlashMessages();
+ sm.drawFlashMessage();
window.swap();
Capture capture;
Audio audio;
@@ -162,16 +162,16 @@ void mainLoop(std::string const& songlist) {
// Main loop
boost::xtime time = now();
unsigned frames = 0;
- sm.FlashMessage("");
+ sm.flashMessage("");
while (!sm.isFinished()) {
if( g_take_screenshot ) {
fs::path filename;
try {
window.screenshot();
- sm.FlashMessage(_("Screenshot taken!"));
+ sm.flashMessage(_("Screenshot taken!"));
} catch (std::exception& e) {
std::cerr << "ERROR: " << e.what() << std::endl;
- sm.FlashMessage(_("Screenshot failed!"));
+ sm.flashMessage(_("Screenshot failed!"));
}
g_take_screenshot = false;
}
@@ -180,7 +180,7 @@ void mainLoop(std::string const& songlist) {
// Draw
window.blank();
sm.getCurrentScreen()->draw();
- sm.FlashMessages();
+ sm.drawFlashMessage();
// Display (and wait until next frame)
window.swap();
if (config["graphic/fps"].b()) {
@@ -200,14 +200,14 @@ void mainLoop(std::string const& songlist) {
checkEvents_SDL(sm, window);
} catch (std::runtime_error& e) {
std::cerr << "ERROR: " << e.what() << std::endl;
- sm.FlashMessage(std::string("ERROR: ") + e.what());
+ sm.flashMessage(std::string("ERROR: ") + e.what());
}
}
} catch (std::exception& e) {
std::cerr << "FATAL ERROR: " << e.what() << std::endl;
- sm.FlashMessage(std::string("FATAL ERROR: ") + e.what());
+ sm.flashMessage(std::string("FATAL ERROR: ") + e.what(), 0.0f); // No fade-in to get it to show
window.blank();
- sm.FlashMessages();
+ sm.drawFlashMessage();
window.swap();
boost::thread::sleep(now() + 2.0);
} catch (QuitNow&) {
diff --git a/game/screen.hh b/game/screen.hh
index 118d309..481744e 100644
--- a/game/screen.hh
+++ b/game/screen.hh
@@ -47,18 +47,10 @@ class ScreenManager: public Singleton <ScreenManager> {
/// returns pointer to Screen for given name
Screen* getScreen(std::string const& name);
- /// Get time to fade in/out the message
- float getFadeTime();
- /// Get time the message have to been showned
- float getShowTime();
- /// Set time to fade in/out the message
- bool setFadeTime(float fadeTime);
- /// Set time the message have to been showned
- bool setShowTime(float showTime);
- /// Set a messag to flash in current screen
- void FlashMessage(std::string const& name);
- /// Flash messages in current screen
- void FlashMessages();
+ /// Set a message to flash in current screen
+ void flashMessage(std::string const& name, float fadeIn=0.5f, float hold=1.5f, float fadeOut=1.0f);
+ /// Draw flash messages in current screen
+ void drawFlashMessage();
/// sets finished to true
void finished() { m_finished=true; };
@@ -67,7 +59,8 @@ class ScreenManager: public Singleton <ScreenManager> {
private:
bool m_finished;
- float m_timeToFade;
+ float m_timeToFadeIn;
+ float m_timeToFadeOut;
float m_timeToShow;
typedef boost::ptr_map<std::string, Screen> screenmap_t;
screenmap_t screens;
diff --git a/game/screen_sing.cc b/game/screen_sing.cc
index f6269e5..1e7f280 100644
--- a/game/screen_sing.cc
+++ b/game/screen_sing.cc
@@ -24,7 +24,7 @@ namespace {
/// Add a flash message about the state of a config item
void dispInFlash(ConfigItem& ci) {
ScreenManager* sm = ScreenManager::getSingletonPtr();
- sm->FlashMessage(ci.getShortDesc() + ": " + ci.getValue());
+ sm->flashMessage(ci.getShortDesc() + ": " + ci.getValue());
}
}
diff --git a/game/screenmanager.cc b/game/screenmanager.cc
index bfa17d9..ddf6279 100644
--- a/game/screenmanager.cc
+++ b/game/screenmanager.cc
@@ -6,10 +6,6 @@
template<> ScreenManager* Singleton<ScreenManager>::ms_Singleton = NULL;
ScreenManager::ScreenManager(): m_finished(false), currentScreen(), m_messagePopup(0.0, 1.0), m_textMessage(getThemePath("message_text.svg")) {
- m_timeToFade = 0.0f;
- m_timeToShow = 3.0f;
-
- m_messagePopup.setTarget(100.0);
m_textMessage.dimensions.middle().screenTop(0.05);
}
@@ -34,57 +30,29 @@ Screen* ScreenManager::getScreen(std::string const& name) {
}
}
-float ScreenManager::getFadeTime(){ return m_timeToFade; }
-float ScreenManager::getShowTime(){ return m_timeToFade; }
-
-bool ScreenManager::setFadeTime(float fadeTime){
- if (fadeTime * 2 > m_timeToShow){ //fade in + fade out
- m_timeToFade = m_timeToShow / 2;
- return false;
- } else {
- m_timeToFade = fadeTime;
- return true;
- }
-}
-
-bool ScreenManager::setShowTime(float showTime){
- if (showTime < m_timeToFade * 2){
- m_timeToShow = m_timeToFade / 2;
- return false;
- } else {
- m_timeToShow = showTime;
- return true;
- }
-}
-
-void ScreenManager::FlashMessages() {
+void ScreenManager::drawFlashMessage() {
double time = m_messagePopup.get();
- if (time > 0.0){
- bool haveToFadeIn = time < (m_timeToFade);
- bool haveToFadeOut = time > (m_messagePopup.getTarget() - m_timeToFade);
- bool haveToStop = time > (m_messagePopup.getTarget() - 0.001);
- float fadeValue = 1.0f;
- if (haveToFadeOut){
- fadeValue = float((m_messagePopup.getTarget() - time) / m_timeToFade);
- glColor4f(1.0f, 1.0f, 1.0f, (fadeValue));
-
- if(haveToStop){
- m_messagePopup.setTarget(0.0, true);
- }
- }else if (haveToFadeIn){
- fadeValue = float(time / m_timeToFade);
-
- glColor4f(1.0f, 1.0f, 1.0f, fadeValue);
- }
-
- m_textMessage.draw(m_message, fadeValue);
-
- if (haveToFadeIn || haveToFadeOut) glColor3f(1.0f, 1.0f, 1.0f);
+ if (time == 0.0) return;
+ bool haveToFadeIn = time <= (m_timeToFadeIn); // Is this fade in?
+ bool haveToFadeOut = time >= (m_messagePopup.getTarget() - m_timeToFadeOut); // Is this fade out?
+ float fadeValue = 1.0f;
+
+ if (haveToFadeIn) { // Fade in
+ fadeValue = float(time / m_timeToFadeIn); // Calculate animation value
+ } else if (haveToFadeOut) { // Fade out
+ fadeValue = float((m_messagePopup.getTarget() - time) / m_timeToFadeOut); // Calculate animation value
+ if (time >= m_messagePopup.getTarget()) m_messagePopup.setTarget(0.0, true); // Reset if fade out finished
}
+
+ m_textMessage.draw(m_message, fadeValue); // Draw the message
+ if (haveToFadeIn || haveToFadeOut) glColor3f(1.0f, 1.0f, 1.0f); // Reset alpha
}
-void ScreenManager::FlashMessage(std::string const& message) {
- m_messagePopup.setTarget(m_timeToShow);
- m_messagePopup.setValue(0);
+void ScreenManager::flashMessage(std::string const& message, float fadeIn, float hold, float fadeOut) {
m_message = message;
+ m_timeToFadeIn = fadeIn;
+ m_timeToShow = hold;
+ m_timeToFadeOut = fadeOut;
+ m_messagePopup.setTarget(fadeIn + hold + fadeOut);
+ m_messagePopup.setValue(0.0);
}
|