|
From: Tapio V. <aa...@us...> - 2009-12-29 12:52:24
|
Module: performous
Branch: master
Commit: a77497d5914462801333fc897aedeb5feff4a3f4
Author: Tapio Vierros <tap...@gm...>
Date: Tue Dec 29 14:47:46 2009 +0200
Navigation tweaks.
* 'Select' acts now as Cancel/Quit
* PGUP/PGDN are abstracted (and also mapped to dancepad diagonal arrows)
* Players screen navigation abstraction
---
game/joystick.cc | 12 +++++--
game/joystick.hh | 2 +-
game/screen_intro.cc | 9 +++--
game/screen_players.cc | 80 ++++++++++++++++++++++++------------------------
game/screen_songs.cc | 11 ++----
5 files changed, 59 insertions(+), 55 deletions(-)
diff --git a/game/joystick.cc b/game/joystick.cc
index aa67b08..f6acdd0 100644
--- a/game/joystick.cc
+++ b/game/joystick.cc
@@ -45,8 +45,8 @@ int input::buttonFromSDL(input::Private::Type _type, unsigned int _sdl_button) {
//K R Y B G O // for drums
{ 3, 4, 1, 2, 0, 4, -1, -1, 8, 9 }, // Guitar Hero drums
{ 3, 4, 1, 2, 0,-1, -1, -1, 8, 9 }, // Rock Band drums
- // Left Down Up Right UpL UpR DownL DownR Start Select
- { 0, 1, 2, 3, 6, 7, 4, 5, 9, 8 } // generic dance pad
+ // Left Down Up Right DownL DownR UpL UpR Start Select
+ { 0, 1, 2, 3, 6, 7, 4, 5, 9, 8 } // generic dance pad
};
if( _sdl_button >= SDL_BUTTONS ) return -1;
switch(_type) {
@@ -81,6 +81,8 @@ input::NavButton input::getNav(SDL_Event const &e) {
else if (k == SDLK_RIGHT) return input::RIGHT;
else if (k == SDLK_RETURN) return input::START;
else if (k == SDLK_ESCAPE || k == SDLK_q) return input::CANCEL;
+ else if (k == SDLK_PAGEUP) return input::MOREUP;
+ else if (k == SDLK_PAGEDOWN) return input::MOREDOWN;
else if (k == SDLK_PAUSE || (k == SDLK_p && mod & KMOD_CTRL))
return input::PAUSE;
} else if (e.type == SDL_JOYBUTTONDOWN) {
@@ -89,7 +91,7 @@ input::NavButton input::getNav(SDL_Event const &e) {
input::Private::InputDevPrivate devt = input::Private::devices[joy_id];
int b = buttonFromSDL(devt.type(), e.jbutton.button);
if (b == -1) return input::NONE;
- else if (b == 8) return input::SELECT;
+ else if (b == 8) return input::CANCEL;
else if (b == 9) return input::START;
// Totally different device types need their own custom mappings
if (devt.type_match(input::DANCEPAD)) {
@@ -98,7 +100,9 @@ input::NavButton input::getNav(SDL_Event const &e) {
else if (b == 1) return input::DOWN;
else if (b == 2) return input::UP;
else if (b == 3) return input::RIGHT;
- else return input::CANCEL;
+ else if (b == 5) return input::MOREUP;
+ else if (b == 6) return input::MOREDOWN;
+ else return input::NONE;
} else if (devt.type_match(input::DRUMS)) {
// Drums can be used for navigation
if (b == 0) return input::START;
diff --git a/game/joystick.hh b/game/joystick.hh
index 529c6b4..f985981 100644
--- a/game/joystick.hh
+++ b/game/joystick.hh
@@ -17,7 +17,7 @@
namespace input {
enum DevType { GUITAR, DRUMS, DANCEPAD };
- enum NavButton { NONE, UP, DOWN, LEFT, RIGHT, START, SELECT, CANCEL, PAUSE };
+ enum NavButton { NONE, UP, DOWN, LEFT, RIGHT, START, SELECT, CANCEL, PAUSE, MOREUP, MOREDOWN };
static const std::size_t BUTTONS = 10;
static const int STARPOWER_BUTTON = 5;
diff --git a/game/screen_intro.cc b/game/screen_intro.cc
index f4d7e0d..77ad140 100755
--- a/game/screen_intro.cc
+++ b/game/screen_intro.cc
@@ -37,9 +37,12 @@ void ScreenIntro::manageEvent(SDL_Event event) {
input::NavButton nav(input::getNav(event));
if (nav != input::NONE) {
if (m_dialog) { m_dialog.reset(); return; }
- if (nav == input::CANCEL) sm->finished();
- else if (nav == input::DOWN || nav == input::RIGHT) ++selected;
- else if (nav == input::UP || nav == input::LEFT) --selected;
+ if (nav == input::CANCEL) {
+ if (selected == m_menuOptions.size()-1) sm->finished();
+ else selected = m_menuOptions.size()-1;
+ }
+ else if (nav == input::DOWN || nav == input::RIGHT || nav == input::MOREDOWN) ++selected;
+ else if (nav == input::UP || nav == input::LEFT || nav == input::MOREUP) --selected;
else if (nav == input::START) {
std::string screen = m_menuOptions[selected].screen;
if (screen.empty()) sm->finished(); else sm->activateScreen(screen);
diff --git a/game/screen_players.cc b/game/screen_players.cc
index b8e8951..6842dec 100644
--- a/game/screen_players.cc
+++ b/game/screen_players.cc
@@ -9,6 +9,7 @@
#include "theme.hh"
#include "video.hh"
#include "i18n.hh"
+#include "joystick.hh"
#include <iostream>
#include <sstream>
@@ -48,50 +49,49 @@ void ScreenPlayers::exit() {
void ScreenPlayers::manageEvent(SDL_Event event) {
ScreenManager* sm = ScreenManager::getSingletonPtr();
- if (event.type != SDL_KEYDOWN) return;
- SDL_keysym keysym = event.key.keysym;
- int key = keysym.sym;
- SDLMod mod = event.key.keysym.mod;
-
- //TODO: reload -- needs database reload
- // if (key == SDLK_r && mod & KMOD_CTRL) { m_players.reload(); m_players.setFilter(m_search.text); }
- if (m_search.process(keysym)) m_players.setFilter(m_search.text);
- else if (key == SDLK_ESCAPE) {
- if (m_search.text.empty()) { sm->activateScreen("Songs"); return; }
- else { m_search.text.clear(); m_players.setFilter(m_search.text); }
- }
- else if (key == SDLK_RETURN)
- {
- if (m_players.empty())
- {
- m_players.addPlayer(m_search.text);
- m_players.setFilter(m_search.text);
- m_players.update();
- // the current player is the new created one
- }
- m_database.addHiscore(m_song);
- m_database.scores.pop_front();
-
- if (m_database.scores.empty()
- || !m_database.reachedHiscore(m_song))
- {
- // no more highscore, we are now finished
- sm->activateScreen("Songs");
- } else {
- m_search.text.clear();
- m_players.setFilter("");
- // add all players which reach highscore because if score is very near or same it might be
- // frustrating for second one that he cannot enter, so better go for next one...
+ input::NavButton nav(input::getNav(event));
+ if (nav != input::NONE) {
+ if (nav == input::CANCEL) {
+ if (m_search.text.empty()) { sm->activateScreen("Songs"); return; }
+ else { m_search.text.clear(); m_players.setFilter(m_search.text); }
+ } else if (nav == input::START) {
+ if (m_players.empty()) {
+ m_players.addPlayer(m_search.text);
+ m_players.setFilter(m_search.text);
+ m_players.update();
+ // the current player is the new created one
+ }
+ m_database.addHiscore(m_song);
+ m_database.scores.pop_front();
+
+ if (m_database.scores.empty() || !m_database.reachedHiscore(m_song)) {
+ // no more highscore, we are now finished
+ sm->activateScreen("Songs");
+ } else {
+ m_search.text.clear();
+ m_players.setFilter("");
+ // add all players which reach highscore because if score is very near or same it might be
+ // frustrating for second one that he cannot enter, so better go for next one...
+ }
}
+ else if (m_players.empty()) return;
+ else if (nav == input::PAUSE) m_audio.togglePause();
+ else if (nav == input::LEFT) m_players.advance(-1);
+ else if (nav == input::RIGHT) m_players.advance(1);
+ else if (nav == input::UP) m_players.advance(-1);
+ else if (nav == input::DOWN) m_players.advance(1);
+ else if (nav == input::MOREUP) m_players.advance(-10);
+ else if (nav == input::MOREDOWN) m_players.advance(10);
+ }
+ else if (event.type == SDL_KEYDOWN) { // Process keyboard-only keys
+ SDL_keysym keysym = event.key.keysym;
+ //int key = keysym.sym;
+ //SDLMod mod = event.key.keysym.mod;
+
+ //TODO: reload -- needs database reload
+ // if (key == SDLK_r && mod & KMOD_CTRL) { m_players.reload(); m_players.setFilter(m_search.text); }
+ if (m_search.process(keysym)) m_players.setFilter(m_search.text);
}
- else if (m_players.empty()) return;
- else if (key == SDLK_SPACE || (key == SDLK_PAUSE || (key == SDLK_p && mod & KMOD_CTRL))) m_audio.togglePause();
- else if (key == SDLK_LEFT) m_players.advance(-1);
- else if (key == SDLK_RIGHT) m_players.advance(1);
- else if (key == SDLK_UP) m_players.advance(-1);
- else if (key == SDLK_DOWN) m_players.advance(1);
- else if (key == SDLK_PAGEUP) m_players.advance(-10);
- else if (key == SDLK_PAGEDOWN) m_players.advance(10);
}
void ScreenPlayers::draw() {
diff --git a/game/screen_songs.cc b/game/screen_songs.cc
index 1a271f9..e7a05c1 100644
--- a/game/screen_songs.cc
+++ b/game/screen_songs.cc
@@ -69,6 +69,8 @@ void ScreenSongs::manageEvent(SDL_Event event) {
if (nav == input::CANCEL || m_songs.empty()) m_jukebox = false;
else if (nav == input::UP) m_audio.seek(5);
else if (nav == input::DOWN) m_audio.seek(-5);
+ else if (nav == input::MOREUP) m_audio.seek(-30);
+ else if (nav == input::MOREDOWN) m_audio.seek(30);
else manageSharedKey(nav);
return;
} else if (nav == input::CANCEL) {
@@ -79,23 +81,18 @@ void ScreenSongs::manageEvent(SDL_Event event) {
else if (m_songs.empty()) return;
else if (nav == input::UP) m_songs.sortChange(-1);
else if (nav == input::DOWN) m_songs.sortChange(1);
+ else if (nav == input::MOREUP) m_songs.advance(-10);
+ else if (nav == input::MOREDOWN) m_songs.advance(10);
else manageSharedKey(nav);
// Handle less common, keyboard only keys
} else if (event.type == SDL_KEYDOWN) {
SDL_keysym keysym = event.key.keysym;
int key = keysym.sym;
SDLMod mod = event.key.keysym.mod;
- if (m_jukebox) {
- if (key == SDLK_PAGEUP) m_audio.seek(-30);
- else if (key == SDLK_PAGEDOWN) m_audio.seek(30);
- return;
- }
if (key == SDLK_r && mod & KMOD_CTRL) { m_songs.reload(); m_songs.setFilter(m_search.text); }
if (!m_jukebox && m_search.process(keysym)) m_songs.setFilter(m_search.text);
// The rest are only available when there are songs available
else if (m_songs.empty()) return;
- else if (key == SDLK_PAGEUP) m_songs.advance(-10);
- else if (key == SDLK_PAGEDOWN) m_songs.advance(10);
else if (key == SDLK_F11) --config["audio/preview_volume"];
else if (key == SDLK_F12) ++config["audio/preview_volume"];
else if (!m_jukebox && key == SDLK_F4) m_jukebox = true;
|