|
From: Yoda-JM <yo...@us...> - 2010-10-15 23:44:35
|
Module: performous
Branch: master
Commit: 690959a0adff79c29d65c62abf94ab888450f709
Author: Vincent Le Ligeour <yo...@us...>
Date: Sat Oct 16 01:44:11 2010 +0200
Prepared for vocal track configuration
---
game/screen_sing.cc | 10 +++++-----
game/screen_sing.hh | 4 +++-
game/song.hh | 8 ++++++++
3 files changed, 16 insertions(+), 6 deletions(-)
diff --git a/game/screen_sing.cc b/game/screen_sing.cc
index c1d4cd1..8f9d27a 100644
--- a/game/screen_sing.cc
+++ b/game/screen_sing.cc
@@ -90,7 +90,7 @@ void ScreenSing::enter() {
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_database, theme));
+ m_layout_singer.reset(new LayoutSinger(m_song->getVocalTrack(m_selectedTrack), m_database, theme));
// Load instrument and dance tracks
sm->loading(_("Loading instruments..."), 0.8);
{
@@ -124,7 +124,7 @@ void ScreenSing::enter() {
double setup_delay = (m_instruments.empty() && m_dancers.empty() ? -1.0 : -3.0);
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(), analyzers.begin(), analyzers.end(), m_database));
+ 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!"));
@@ -293,7 +293,7 @@ void ScreenSing::manageEvent(SDL_Event event) {
else if (nav == input::UP) { m_menu.move(-1); return; }
}
// Start button has special functions for skipping things (only in singing for now)
- if (nav == input::START && m_only_singers_alive && !m_song->getVocalTrack().notes.empty() && !m_audio.isPaused()) {
+ if (nav == input::START && m_only_singers_alive && !m_song->getVocalTrack(m_selectedTrack).notes.empty() && !m_audio.isPaused()) {
// Open score dialog early
if (status == Song::FINISHED) {
m_engine->kill(); // Kill the engine thread
@@ -311,7 +311,7 @@ void ScreenSing::manageEvent(SDL_Event event) {
}
// Ctrl combinations that can be used while performing (not when score dialog is displayed)
if (event.type == SDL_KEYDOWN && (event.key.keysym.mod & KMOD_CTRL) && !m_score_window.get()) {
- if (key == SDLK_s) m_audio.toggleSynth(m_song->getVocalTrack().notes);
+ if (key == SDLK_s) m_audio.toggleSynth(m_song->getVocalTrack(m_selectedTrack).notes);
if (key == SDLK_v) m_audio.streamFade("vocals", event.key.keysym.mod & KMOD_SHIFT ? 1.0 : 0.0);
if (key == SDLK_k) dispInFlash(++config["game/karaoke_mode"]); // Toggle karaoke mode
if (key == SDLK_w) dispInFlash(++config["game/pitch"]); // Toggle pitch wave
@@ -453,7 +453,7 @@ void ScreenSing::draw() {
statustxt = (boost::format("%02u:%02u - %s") % (t / 60) % (t % 60) % section.name).str();
} else statustxt = (boost::format("%02u:%02u") % (t / 60) % (t % 60)).str();
- if (!m_score_window.get() && m_only_singers_alive && !m_song->getVocalTrack().notes.empty()) {
+ if (!m_score_window.get() && m_only_singers_alive && !m_song->getVocalTrack(m_selectedTrack).notes.empty()) {
if (status == Song::INSTRUMENTAL_BREAK) statustxt += _(" ENTER to skip instrumental break");
if (status == Song::FINISHED && !config["game/karaoke_mode"].b()) statustxt += _(" Remember to wait for grading!");
}
diff --git a/game/screen_sing.hh b/game/screen_sing.hh
index d753185..6ea1fa0 100644
--- a/game/screen_sing.hh
+++ b/game/screen_sing.hh
@@ -48,7 +48,8 @@ class ScreenSing: public Screen {
public:
/// constructor
ScreenSing(std::string const& name, Audio& audio, Database& database, Backgrounds& bgs):
- Screen(name), m_audio(audio), m_database(database), m_backgrounds(bgs), m_latencyAV(), m_only_singers_alive(true), m_practmode(false)
+ Screen(name), m_audio(audio), m_database(database), m_backgrounds(bgs), m_latencyAV(), m_only_singers_alive(true), m_practmode(false),
+ m_selectedTrack(TrackName::LEAD_VOCAL)
{}
void enter();
void exit();
@@ -93,5 +94,6 @@ class ScreenSing: public Screen {
AnimValue m_quitTimer;
bool m_only_singers_alive;
bool m_practmode;
+ std::string m_selectedTrack;
};
diff --git a/game/song.hh b/game/song.hh
index 58f2546..2f62346 100644
--- a/game/song.hh
+++ b/game/song.hh
@@ -3,6 +3,7 @@
#include "notes.hh"
#include "i18n.hh"
#include <boost/noncopyable.hpp>
+#include <boost/foreach.hpp>
#include <stdexcept>
#include <string>
@@ -72,6 +73,13 @@ class Song: boost::noncopyable {
return dummyVocal;
}
};
+ std::vector<std::string> getVocalTrackNames() {
+ std::vector<std::string> result;
+ BOOST_FOREACH(VocalTracks::value_type &it, vocalTracks) {
+ result.push_back(it.first);
+ }
+ return result;
+ }
InstrumentTracks instrumentTracks; ///< guitar etc. notes for this song
DanceTracks danceTracks; ///< dance tracks
bool hasDance() const { return !danceTracks.empty(); }
|