|
From: Lasse Kärkkäi. <tr...@us...> - 2009-11-30 17:48:29
|
Module: performous
Branch: master
Commit: 0687af67c912dd72102915d9cc0c3acd0002e0d9
Author: Lasse Karkkainen <tro...@tr...>
Date: Mon Nov 30 19:48:15 2009 +0200
Making STARPOWER appear as a button instead of separate event type (simplifies joystick.cc greatly) and fixing related bug (all frets getting pressed status when activated). Some cleanup on guitargraph.cc as well.
---
game/guitargraph.cc | 12 +++++++-----
game/joystick.cc | 38 ++++++++++----------------------------
game/joystick.hh | 3 ++-
3 files changed, 19 insertions(+), 34 deletions(-)
diff --git a/game/guitargraph.cc b/game/guitargraph.cc
index 6dfee01..7bd4f37 100644
--- a/game/guitargraph.cc
+++ b/game/guitargraph.cc
@@ -142,12 +142,14 @@ void GuitarGraph::engine() {
// Handle all events
for (input::Event ev; m_input.tryPoll(ev);) {
m_dead = false;
- if (!m_drums && ev.type == input::Event::RELEASE) {
- endHold(ev.button);
+ if (!m_drums) {
+ if ((ev.type == input::Event::PRESS || ev.type == input::Event::RELEASE) && ev.button == input::STARPOWER_BUTTON) {
+ if (ev.type == input::Event::PRESS) activateStarpower();
+ continue;
+ }
+ if (ev.type == input::Event::RELEASE) endHold(ev.button);
+ if (ev.type == input::Event::WHAMMY) whammy = (1.0 + ev.button + 2.0*(rand()/double(RAND_MAX))) / 4.0;
}
- if (!m_drums && ev.type == input::Event::WHAMMY)
- whammy = (1.0 + ev.button + 2.0*(rand()/double(RAND_MAX))) / 4.0;
- if (!m_drums && ev.type == input::Event::STARPOWER) activateStarpower();
if (ev.type == input::Event::PRESS) m_hit[!m_drums + ev.button].setValue(1.0);
else if (ev.type == input::Event::PICK) m_hit[0].setValue(1.0);
if (time < -0.5) {
diff --git a/game/joystick.cc b/game/joystick.cc
index 30eeaba..1627416 100644
--- a/game/joystick.cc
+++ b/game/joystick.cc
@@ -215,14 +215,8 @@ bool input::SDL::pushEvent(SDL_Event _e) {
}
devices[joy_id].addEvent(event);
return true;
- case SDLK_F6:
- event.type = input::Event::STARPOWER;
- event.button = 1;
- for( unsigned int i = 0 ; i < BUTTONS ; ++i ) {
- event.pressed[i] = devices[joy_id].pressed(i);
- }
- devices[joy_id].addEvent(event);
- return true;
+ case SDLK_F6: case SDLK_6:
+ button++;
case SDLK_F5: case SDLK_5:
button++;
case SDLK_F4: case SDLK_4:
@@ -262,14 +256,8 @@ bool input::SDL::pushEvent(SDL_Event _e) {
}
devices[joy_id].addEvent(event);
return true;
- case SDLK_F6:
- event.type = input::Event::STARPOWER;
- event.button = 0;
- for( unsigned int i = 0 ; i < BUTTONS ; ++i ) {
- event.pressed[i] = devices[joy_id].pressed(i);
- }
- devices[joy_id].addEvent(event);
- return true;
+ case SDLK_F6: case SDLK_6:
+ button++;
case SDLK_F5: case SDLK_5:
button++;
case SDLK_F4: case SDLK_4:
@@ -334,14 +322,10 @@ bool input::SDL::pushEvent(SDL_Event _e) {
if(!devices[joy_id].assigned()) return false;
button = buttonFromSDL(devices[joy_id].type(),_e.jbutton.button);
if( button == -1 ) return false;
- if( button == 5) {
- event.type = input::Event::STARPOWER;
- } else {
- for( unsigned int i = 0 ; i < BUTTONS ; ++i ) {
- event.pressed[i] = devices[joy_id].pressed(i);
- }
- event.type = input::Event::PRESS;
+ for( unsigned int i = 0 ; i < BUTTONS ; ++i ) {
+ event.pressed[i] = devices[joy_id].pressed(i);
}
+ event.type = input::Event::PRESS;
event.button = button;
event.pressed[button] = true;
devices[joy_id].addEvent(event);
@@ -351,12 +335,10 @@ bool input::SDL::pushEvent(SDL_Event _e) {
if(!devices[joy_id].assigned()) return false;
button = buttonFromSDL(devices[joy_id].type(),_e.jbutton.button);
if( button == -1 ) return false;
- if( button != 5) {
- for( unsigned int i = 0 ; i < BUTTONS ; ++i ) {
- event.pressed[i] = devices[joy_id].pressed(i);
- }
- event.type = input::Event::RELEASE;
+ for( unsigned int i = 0 ; i < BUTTONS ; ++i ) {
+ event.pressed[i] = devices[joy_id].pressed(i);
}
+ event.type = input::Event::RELEASE;
event.button = button;
event.pressed[button] = false;
devices[joy_id].addEvent(event);
diff --git a/game/joystick.hh b/game/joystick.hh
index 23f5da4..f476212 100644
--- a/game/joystick.hh
+++ b/game/joystick.hh
@@ -19,9 +19,10 @@ namespace input {
enum DevType { GUITAR, DRUMS };
static const std::size_t BUTTONS = 6;
+ static const std::size_t STARPOWER_BUTTON = BUTTONS - 1;
struct Event {
- enum Type { PRESS, RELEASE, PICK, WHAMMY, STARPOWER };
+ enum Type { PRESS, RELEASE, PICK, WHAMMY };
Type type;
int button; // Translated button number for press/release events. 0 for pick down, 1 for pick up (NOTE: these are NOT pick press/release events but rather different directions)
bool pressed[BUTTONS]; // All events tell the button state right after the event happened
|