|
From: Tapio V. <aa...@us...> - 2010-08-21 14:03:10
|
Module: performous
Branch: joinmenu
Commit: 4c7c17239cfaea986b02f2a16c3e85254f028890
Author: Tapio Vierros <tap...@gm...>
Date: Sat Aug 21 17:01:30 2010 +0300
Implement "rejoin" pause menu action.
---
game/dancegraph.cc | 1 +
game/guitargraph.cc | 1 +
game/instrumentgraph.cc | 33 ++++++++++++++++++++++++---------
game/instrumentgraph.hh | 6 +++---
game/screen_sing.cc | 7 ++++---
5 files changed, 33 insertions(+), 15 deletions(-)
diff --git a/game/dancegraph.cc b/game/dancegraph.cc
index a104dd6..5702ac1 100644
--- a/game/dancegraph.cc
+++ b/game/dancegraph.cc
@@ -277,6 +277,7 @@ void DanceGraph::engine() {
if (m_selectedTrack.so() != getTrack()) setTrack(m_selectedTrack.so());
else if (boost::lexical_cast<int>(m_selectedDifficulty.so()) != m_level)
difficulty(DanceDifficulty(boost::lexical_cast<int>(m_selectedDifficulty.so())));
+ else if (m_rejoin.b()) { unjoin(); setupJoinMenu(); }
// Sync dynamic stuff
updateJoinMenu();
// Open Menu
diff --git a/game/guitargraph.cc b/game/guitargraph.cc
index 9b196eb..fe9935c 100644
--- a/game/guitargraph.cc
+++ b/game/guitargraph.cc
@@ -296,6 +296,7 @@ void GuitarGraph::engine() {
if (!m_drums && m_selectedTrack.so() != getTrack()) setTrack(m_selectedTrack.so());
else if (boost::lexical_cast<int>(m_selectedDifficulty.so()) != m_level)
difficulty(Difficulty(boost::lexical_cast<int>(m_selectedDifficulty.so())));
+ else if (m_rejoin.b()) { unjoin(); setupJoinMenu(); }
// Sync menu items & captions
updateJoinMenu();
break;
diff --git a/game/instrumentgraph.cc b/game/instrumentgraph.cc
index 3fc4490..0bfed82 100644
--- a/game/instrumentgraph.cc
+++ b/game/instrumentgraph.cc
@@ -6,14 +6,6 @@
//const unsigned InstrumentGraph::max_panels = 10; // Maximum number of arrow lines / guitar frets
-void InstrumentGraph::setupPauseMenu(Menu& menu) {
- menu.clear();
- menu.add(MenuOption(_("Resume"), _("Back to performing!")));
- menu.add(MenuOption(_("Restart"), _("Start the song\nfrom the beginning"), "Sing"));
- menu.add(MenuOption(_("Quit"), _("Exit to song browser"), "Songs"));
-}
-
-
InstrumentGraph::InstrumentGraph(Audio& audio, Song const& song, input::DevType inp):
m_audio(audio), m_song(song), m_input(input::DevType(inp)),
m_stream(),
@@ -23,6 +15,7 @@ InstrumentGraph::InstrumentGraph(Audio& audio, Song const& song, input::DevType
m_text(getThemePath("sing_timetxt.svg"), config["graphic/text_lod"].f()),
m_selectedTrack(""),
m_selectedDifficulty(0),
+ m_rejoin(false),
m_pads(),
m_correctness(0.0, 5.0),
m_score(),
@@ -41,10 +34,19 @@ InstrumentGraph::InstrumentGraph(Audio& audio, Song const& song, input::DevType
}
+void InstrumentGraph::setupPauseMenu() {
+ m_menu.clear();
+ m_menu.add(MenuOption(_("Resume"), _("Back to performing!")));
+ m_menu.add(MenuOption(_("Rejoin"), _("Change selections"), &m_rejoin));
+ m_menu.add(MenuOption(_("Restart"), _("Start the song\nfrom the beginning"), "Sing"));
+ m_menu.add(MenuOption(_("Quit"), _("Exit to song browser"), "Songs"));
+}
+
+
void InstrumentGraph::doUpdates() {
if (!menuOpen() && !m_ready) {
m_ready = true;
- setupPauseMenu(m_menu);
+ setupPauseMenu();
}
}
@@ -150,3 +152,16 @@ glutil::Color const& InstrumentGraph::color(int fret) const {
}
return fretColors[fret];
}
+
+
+void InstrumentGraph::unjoin() {
+ m_jointime = getNaN();
+ m_rejoin = false;
+ m_score = 0;
+ m_starmeter = 0;
+ m_streak = 0;
+ m_longestStreak = 0;
+ m_bigStreak = 0;
+ m_countdown = 3;
+ m_ready = false;
+}
diff --git a/game/instrumentgraph.hh b/game/instrumentgraph.hh
index b3334b8..7cc7444 100644
--- a/game/instrumentgraph.hh
+++ b/game/instrumentgraph.hh
@@ -60,8 +60,6 @@ class Song;
class InstrumentGraph {
public:
- static void setupPauseMenu(Menu& menu);
-
/// Constructor
InstrumentGraph(Audio& audio, Song const& song, input::DevType inp);
/// Virtual destructor
@@ -77,12 +75,13 @@ class InstrumentGraph {
virtual void changeDifficulty(int dir = 1) = 0;
// General shared functions
+ void setupPauseMenu();
void doUpdates();
void drawMenu();
void toggleMenu(int forcestate = -1); // 0 = close, 1 = open, -1 = auto/toggle
void togglePause(int) { m_audio.togglePause(); }
void quit(int) { ScreenManager::getSingletonPtr()->activateScreen("Songs"); }
- std::string noValue() const { return ""; }
+ void unjoin();
// General getters
bool joining(double time) const { return time < m_jointime; }
@@ -134,6 +133,7 @@ class InstrumentGraph {
// Dynamic stuff for join menu
ConfigItem m_selectedTrack; /// menu modifies this to select track
ConfigItem m_selectedDifficulty; /// menu modifies this to select difficulty
+ ConfigItem m_rejoin; /// menu sets this if we want to re-join
std::string m_trackOpt;
std::string m_difficultyOpt;
std::string m_leftyOpt;
diff --git a/game/screen_sing.cc b/game/screen_sing.cc
index b00e32a..f392722 100644
--- a/game/screen_sing.cc
+++ b/game/screen_sing.cc
@@ -110,9 +110,10 @@ void ScreenSing::enter() {
}
}
// Populate the pause menu
- // TODO: Refactor this menu population to static
- // function that instrumentgraph can also use
- InstrumentGraph::setupPauseMenu(m_menu);
+ m_menu.clear();
+ m_menu.add(MenuOption(_("Resume"), _("Back to performing!")));
+ m_menu.add(MenuOption(_("Restart"), _("Start the song\nfrom the beginning"), "Sing"));
+ m_menu.add(MenuOption(_("Quit"), _("Exit to song browser"), "Songs"));
m_menu.close();
// Startup delay for instruments is longer than for singing only
double setup_delay = (m_instruments.empty() && m_dancers.empty() ? -1.0 : -3.0);
|