|
From: Yoda-JM <yo...@us...> - 2009-08-18 11:35:18
|
Module: performous
Branch: master
Commit: 5f132b1204cba432b7bbfe7ec40136b6704310ce
Author: Vincent Le Ligeour <yo...@us...>
Date: Tue Aug 18 13:34:45 2009 +0200
Added instrument detection in screen songs
---
game/notes.hh | 9 ++++++++
game/screen_songs.cc | 57 ++++++++++++++++++++++++++++++++++++++++++++++++-
game/screen_songs.hh | 2 +-
3 files changed, 65 insertions(+), 3 deletions(-)
diff --git a/game/notes.hh b/game/notes.hh
index 1e4bb79..29f22f5 100644
--- a/game/notes.hh
+++ b/game/notes.hh
@@ -53,6 +53,15 @@ struct Track {
typedef std::vector<Track> Tracks;
+namespace {
+ bool isTrackInside(Tracks &_tracks, std::string _name) {
+ for( Tracks::iterator it = _tracks.begin() ; it != _tracks.end() ; ++it ) {
+ if(it->name == _name) return true;
+ }
+ return false;
+ }
+}
+
// TODO: Make Note use Duration
/// note read from songfile
diff --git a/game/screen_songs.cc b/game/screen_songs.cc
index f2723d4..1689062 100644
--- a/game/screen_songs.cc
+++ b/game/screen_songs.cc
@@ -21,7 +21,7 @@ void ScreenSongs::enter() {
m_emptyCover.reset(new Surface(getThemePath("no_cover.svg")));
m_instrumentCover.reset(new Surface(getThemePath("instrument_cover.svg")));
m_bandCover.reset(new Surface(getThemePath("band_cover.svg")));
- m_instrumentList.reset(new Surface(getThemePath("instruments.svg")));
+ m_instrumentList.reset(new Texture(getThemePath("instruments.svg")));
m_search.text.clear();
m_songs.setFilter(m_search.text);
m_audio.fadeout();
@@ -219,7 +219,60 @@ void ScreenSongs::draw() {
s.dimensions.top(y + 0.2 * diff); s.tex = TexCoords(0, 1, 1, 0); glColor4f(1.0, 1.0, 1.0, 0.4); s.draw();
s.tex = TexCoords(); glColor3f(1.0, 1.0, 1.0); // Restore default attributes
// Draw the intruments
- m_instrumentList->dimensions.middle(-0.2 + 0.17 * (i - shift)).bottom(y - (0.14+diff) - 0.2 * diff).fitInside(0.14 + diff, 0.14 + diff); m_instrumentList->draw();
+ {
+ UseTexture tex(*m_instrumentList);
+ Dimensions dim = Dimensions(m_instrumentList->ar()).middle(-0.2 + 0.17 * (i - shift)).bottom(y - (0.14+diff) - 0.2 * diff).fitInside(0.14 + diff, 0.14 + diff);
+ double x;
+ float alpha;
+ {
+ // vocals
+ alpha = (song_display.notes.size()) ? 1.00 : 0.25;
+ glutil::Begin block(GL_TRIANGLE_STRIP);
+ glColor4f(1.0, 1.0, 1.0, alpha);
+ x = dim.x1()+0.00*(dim.x2()-dim.x1());
+ glTexCoord2f(0.00f, 0.0f); glVertex2f(x, dim.y1());
+ glTexCoord2f(0.00f, 1.0f); glVertex2f(x, dim.y2());
+ x = dim.x1()+0.25*(dim.x2()-dim.x1());
+ glTexCoord2f(0.25f, 0.0f); glVertex2f(x, dim.y1());
+ glTexCoord2f(0.25f, 1.0f); glVertex2f(x, dim.y2());
+ }
+ {
+ // guitar
+ alpha = (isTrackInside(song_display.tracks,"guitar")) ? 1.00 : 0.25;
+ glutil::Begin block(GL_TRIANGLE_STRIP);
+ glColor4f(1.0, 1.0, 1.0, alpha);
+ x = dim.x1()+0.25*(dim.x2()-dim.x1());
+ glTexCoord2f(0.25f, 0.0f); glVertex2f(x, dim.y1());
+ glTexCoord2f(0.25f, 1.0f); glVertex2f(x, dim.y2());
+ x = dim.x1()+0.50*(dim.x2()-dim.x1());
+ glTexCoord2f(0.50f, 0.0f); glVertex2f(x, dim.y1());
+ glTexCoord2f(0.50f, 1.0f); glVertex2f(x, dim.y2());
+ }
+ {
+ // bass
+ alpha = (isTrackInside(song_display.tracks,"bass")) ? 1.00 : 0.25;
+ glutil::Begin block(GL_TRIANGLE_STRIP);
+ glColor4f(1.0, 1.0, 1.0, alpha);
+ x = dim.x1()+0.50*(dim.x2()-dim.x1());
+ glTexCoord2f(0.50f, 0.0f); glVertex2f(x, dim.y1());
+ glTexCoord2f(0.50f, 1.0f); glVertex2f(x, dim.y2());
+ x = dim.x1()+0.75*(dim.x2()-dim.x1());
+ glTexCoord2f(0.75f, 0.0f); glVertex2f(x, dim.y1());
+ glTexCoord2f(0.75f, 1.0f); glVertex2f(x, dim.y2());
+ }
+ {
+ // drums
+ alpha = (isTrackInside(song_display.tracks,"drums")) ? 1.00 : 0.25;
+ glutil::Begin block(GL_TRIANGLE_STRIP);
+ glColor4f(1.0, 1.0, 1.0, alpha);
+ x = dim.x1()+0.75*(dim.x2()-dim.x1());
+ glTexCoord2f(0.75f, 0.0f); glVertex2f(x, dim.y1());
+ glTexCoord2f(0.75f, 1.0f); glVertex2f(x, dim.y2());
+ x = dim.x1()+1.00*(dim.x2()-dim.x1());
+ glTexCoord2f(1.00f, 0.0f); glVertex2f(x, dim.y1());
+ glTexCoord2f(1.00f, 1.0f); glVertex2f(x, dim.y2());
+ }
+ }
}
}
if (!song.music.empty()) music = song.music;
diff --git a/game/screen_songs.hh b/game/screen_songs.hh
index b15cba8..ab81f9c 100644
--- a/game/screen_songs.hh
+++ b/game/screen_songs.hh
@@ -40,7 +40,7 @@ class ScreenSongs : public Screen {
boost::scoped_ptr<Surface> m_emptyCover;
boost::scoped_ptr<Surface> m_instrumentCover;
boost::scoped_ptr<Surface> m_bandCover;
- boost::scoped_ptr<Surface> m_instrumentList;
+ boost::scoped_ptr<Texture> m_instrumentList;
Cachemap<std::string, Surface> m_covers;
bool m_jukebox;
};
|