|
From: Peque <ms...@us...> - 2010-03-15 11:29:30
|
Module: performous
Branch: master
Commit: 8608a2ea436a51ace97bc68cabe44c00def291ba
Author: Tapio Vierros <tap...@gm...>
Date: Mon Mar 15 12:00:30 2010 +0200
Tweaks to hiscrore in songbrowser.
* Allow starting song in hiscore mode.
* Fix broken scrolling-by-one.
* Refactor bounds-check (move to one place, easier to understand).
---
game/database.cc | 11 ++++++-----
game/database.hh | 2 +-
game/screen_songs.cc | 11 +++++------
game/screen_songs.hh | 2 +-
4 files changed, 13 insertions(+), 13 deletions(-)
diff --git a/game/database.cc b/game/database.cc
index 4668d26..ce8a411 100644
--- a/game/database.cc
+++ b/game/database.cc
@@ -118,7 +118,7 @@ void Database::queryPerSongHiscore (std::ostream & os, boost::shared_ptr<Song> s
}
}
-void Database::queryPerSongHiscore_HiscoreDisplay (std::ostream & os, boost::shared_ptr<Song> s, unsigned & start_pos, unsigned max_displayed, std::string const& track) const {
+void Database::queryPerSongHiscore_HiscoreDisplay (std::ostream & os, boost::shared_ptr<Song> s, int& start_pos, unsigned max_displayed, std::string const& track) const {
int songid = m_songs.lookup(s);
std::vector<HiscoreItem> hi = m_hiscores.queryHiscore(10, -1, songid, track);
@@ -129,10 +129,11 @@ void Database::queryPerSongHiscore_HiscoreDisplay (std::ostream & os, boost::sha
return;
}
- if((hi.size() > 5)&&(start_pos > hi.size()-6)) start_pos = hi.size()-5;
- else start_pos = 0;
-
- for (size_t i=0; ((i<hi.size())&&(i<max_displayed)); ++i)
+ // Limits
+ if (start_pos > (int)hi.size() - (int)max_displayed) start_pos = hi.size() - max_displayed;
+ if (start_pos < 0 || hi.size() <= max_displayed) start_pos = 0;
+
+ for (size_t i = 0; i < hi.size() && i < max_displayed; ++i)
{
os << i+start_pos+1 << "\t"
<< m_players.lookup(hi[i+start_pos].playerid) << "\t"
diff --git a/game/database.hh b/game/database.hh
index 1bf254d..be98fe0 100644
--- a/game/database.hh
+++ b/game/database.hh
@@ -99,7 +99,7 @@ class Database
void queryOverallHiscore (std::ostream & os, std::string const& track = "") const;
void queryPerSongHiscore (std::ostream & os, boost::shared_ptr<Song> s, std::string const& track = "") const;
- void queryPerSongHiscore_HiscoreDisplay (std::ostream & os, boost::shared_ptr<Song> s, unsigned & start_pos, unsigned max_displayed, std::string const& track = "") const;
+ void queryPerSongHiscore_HiscoreDisplay (std::ostream & os, boost::shared_ptr<Song> s, int& start_pos, unsigned max_displayed, std::string const& track = "") const;
void queryPerPlayerHiscore (std::ostream & os, std::string const& track = "") const;
bool hasHiscore(Song& s) const;
diff --git a/game/screen_songs.cc b/game/screen_songs.cc
index aef4500..26928f0 100644
--- a/game/screen_songs.cc
+++ b/game/screen_songs.cc
@@ -58,8 +58,8 @@ void ScreenSongs::manageSharedKey(input::NavButton nav) {
ss->setSong(m_songs.currentPtr());
sm->activateScreen("Sing");
}
- else if (nav == input::LEFT) m_songs.advance(-1);
- else if (nav == input::RIGHT) m_songs.advance(1);
+ else if (nav == input::LEFT) { m_songs.advance(-1); hiscore_start_pos = 0; }
+ else if (nav == input::RIGHT) { m_songs.advance(1); hiscore_start_pos = 0; }
}
void ScreenSongs::manageEvent(SDL_Event event) {
@@ -77,13 +77,12 @@ void ScreenSongs::manageEvent(SDL_Event event) {
return;
} else if (show_hiscores) {
if (nav == input::CANCEL || m_songs.empty()) show_hiscores = false;
- else if ((nav == input::UP)&&(hiscore_start_pos > 0)) hiscore_start_pos--;
+ else if (nav == input::UP) hiscore_start_pos--;
else if (nav == input::DOWN) hiscore_start_pos++;
+ // TODO: change hiscore type listed (all, just vocals, guitar easy, guitar medium, guitar hard, guit
else if (nav == input::MOREUP) (hiscore_start_pos > 4) ? hiscore_start_pos -= 5 : hiscore_start_pos = 0;
else if (nav == input::MOREDOWN) hiscore_start_pos += 5;
- else if (nav == input::LEFT) { m_songs.advance(-1); hiscore_start_pos=0; }
- else if (nav == input::RIGHT) { m_songs.advance(1); hiscore_start_pos=0; }
- else if (nav == input::START) {}; // TODO change hiscore type listed (all, just vocals, guitar easy, guitar medium, guitar hard, guit
+ else manageSharedKey(nav);
return;
} else if (nav == input::CANCEL) {
if (!m_search.text.empty()) { m_search.text.clear(); m_songs.setFilter(m_search.text); }
diff --git a/game/screen_songs.hh b/game/screen_songs.hh
index b9ad7f2..62320a6 100644
--- a/game/screen_songs.hh
+++ b/game/screen_songs.hh
@@ -59,5 +59,5 @@ protected:
Cachemap<std::string, Surface> m_covers;
bool m_jukebox;
bool show_hiscores;
- unsigned hiscore_start_pos;
+ int hiscore_start_pos;
};
|