|
From: Yoda-JM <yo...@us...> - 2010-01-07 10:26:08
|
Module: performous
Branch: master
Commit: 92e1b53856103dcc0883af4c13d3915559191148
Author: Vincent Le Ligeour <yo...@us...>
Date: Thu Jan 7 11:25:18 2010 +0100
Added keyboard as drumkit (need testing)
---
data/schema.xml | 6 ++++++
game/joystick.cc | 41 +++++++++++++++++++++++++++++++++++++----
game/joystick.hh | 7 +++++--
3 files changed, 48 insertions(+), 6 deletions(-)
diff --git a/data/schema.xml b/data/schema.xml
index b20dfe8..bc1cef6 100644
--- a/data/schema.xml
+++ b/data/schema.xml
@@ -66,6 +66,12 @@ to save the current settings to XML.
<long>Enable keyboard as guitar (Frets on Fire mode).</long>
</locale>
</entry>
+ <entry name="game/keyboard_drumkit" type="bool" value="true">
+ <locale name="C">
+ <short>Keyboard as drumkit</short>
+ <long>Enable keyboard as drumkit.</long>
+ </locale>
+ </entry>
<entry name="game/keyboard_dancepad" type="bool" value="true">
<locale name="C">
<short>Keyboard as dance pad</short>
diff --git a/game/joystick.cc b/game/joystick.cc
index 207d6fa..e7633ca 100644
--- a/game/joystick.cc
+++ b/game/joystick.cc
@@ -270,11 +270,14 @@ void input::SDL::init() {
init_devices();
// Adding keyboard instruments
std::cout << "Keyboard as guitar controller: " << (config["game/keyboard_guitar"].b() ? "enabled":"disabled") << std::endl;
+ std::cout << "Keyboard as drumkit controller: " << (config["game/keyboard_drumkit"].b() ? "enabled":"disabled") << std::endl;
std::cout << "Keyboard as dance pad controller: " << (config["game/keyboard_dancepad"].b() ? "enabled":"disabled") << std::endl;
input::SDL::sdl_devices[input::Private::KEYBOARD_ID] = NULL;
input::Private::devices[input::Private::KEYBOARD_ID] = input::Private::InputDevPrivate(input::Private::GUITAR_GH);
input::SDL::sdl_devices[input::Private::KEYBOARD_ID2] = NULL;
- input::Private::devices[input::Private::KEYBOARD_ID2] = input::Private::InputDevPrivate(input::Private::DANCEPAD_GENERIC);
+ input::Private::devices[input::Private::KEYBOARD_ID2] = input::Private::InputDevPrivate(input::Private::DRUMS_GH);
+ input::SDL::sdl_devices[input::Private::KEYBOARD_ID3] = NULL;
+ input::Private::devices[input::Private::KEYBOARD_ID3] = input::Private::InputDevPrivate(input::Private::DANCEPAD_GENERIC);
}
bool input::SDL::pushEvent(SDL_Event _e) {
@@ -288,7 +291,7 @@ bool input::SDL::pushEvent(SDL_Event _e) {
static bool pickPressed[2] = {}; // HACK for tracking enter and rshift status
switch(_e.type) {
case SDL_KEYDOWN: {
- if(!config["game/keyboard_guitar"].b() && !config["game/keyboard_dancepad"].b())
+ if(!config["game/keyboard_guitar"].b() && !config["game/keyboard_drumkit"].b() && !config["game/keyboard_dancepad"].b())
return false;
if (_e.key.keysym.mod & (KMOD_CTRL|KMOD_SHIFT|KMOD_ALT|KMOD_META)) return false;
int button = 0;
@@ -340,9 +343,24 @@ bool input::SDL::pushEvent(SDL_Event _e) {
default:
return false;
}
- } else if(config["game/keyboard_dancepad"].b() && devices[input::Private::KEYBOARD_ID2].assigned()) {
+ } else if(config["game/keyboard_drumkit"].b() && devices[input::Private::KEYBOARD_ID2].assigned()) {
joy_id = input::Private::KEYBOARD_ID2;
switch(_e.key.keysym.sym) {
+ case SDLK_u:
+ button++;
+ case SDLK_i:
+ button++;
+ case SDLK_o:
+ button++;
+ case SDLK_p:
+ event.type = input::Event::PRESS;
+ break;
+ default:
+ return false;
+ }
+ } else if(config["game/keyboard_dancepad"].b() && devices[input::Private::KEYBOARD_ID3].assigned()) {
+ joy_id = input::Private::KEYBOARD_ID3;
+ switch(_e.key.keysym.sym) {
case SDLK_KP9: button = 5; break;
case SDLK_KP8: case SDLK_UP: button = 2; break;
case SDLK_KP7: button = 4; break;
@@ -401,9 +419,24 @@ bool input::SDL::pushEvent(SDL_Event _e) {
default:
return false;
}
- } else if(config["game/keyboard_dancepad"].b() && devices[input::Private::KEYBOARD_ID2].assigned()) {
+ } else if(config["game/keyboard_drumkit"].b() && devices[input::Private::KEYBOARD_ID2].assigned()) {
joy_id = input::Private::KEYBOARD_ID2;
switch(_e.key.keysym.sym) {
+ case SDLK_u:
+ button++;
+ case SDLK_i:
+ button++;
+ case SDLK_o:
+ button++;
+ case SDLK_p:
+ event.type = input::Event::RELEASE;
+ break;
+ default:
+ return false;
+ }
+ } else if(config["game/keyboard_dancepad"].b() && devices[input::Private::KEYBOARD_ID3].assigned()) {
+ joy_id = input::Private::KEYBOARD_ID3;
+ switch(_e.key.keysym.sym) {
case SDLK_KP9: button = 5; break;
case SDLK_KP8: case SDLK_UP: button = 2; break;
case SDLK_KP7: button = 4; break;
diff --git a/game/joystick.hh b/game/joystick.hh
index 70b8445..8507dac 100644
--- a/game/joystick.hh
+++ b/game/joystick.hh
@@ -34,7 +34,8 @@ namespace input {
namespace Private {
enum Type { GUITAR_RB, DRUMS_RB, GUITAR_GH, DRUMS_GH, DRUMS_MIDI, DANCEPAD_GENERIC };
static unsigned int KEYBOARD_ID = UINT_MAX;
- static unsigned int KEYBOARD_ID2 = KEYBOARD_ID-1; // Two ids needed for keyboard guitar/dancepad
+ static unsigned int KEYBOARD_ID2 = KEYBOARD_ID-1;
+ static unsigned int KEYBOARD_ID3 = KEYBOARD_ID-2; // Three ids needed for keyboard guitar/drumkit/dancepad
class InputDevPrivate {
public:
@@ -124,7 +125,9 @@ namespace input {
for(InputDevs::iterator it = devices.begin() ; it != devices.end() ; ++it) {
if( it->first == input::Private::KEYBOARD_ID && !config["game/keyboard_guitar"].b() )
continue;
- if( it->first == input::Private::KEYBOARD_ID2 && !config["game/keyboard_dancepad"].b() )
+ if( it->first == input::Private::KEYBOARD_ID2 && !config["game/keyboard_drumkit"].b() )
+ continue;
+ if( it->first == input::Private::KEYBOARD_ID3 && !config["game/keyboard_dancepad"].b() )
continue;
if( !it->second.assigned() && it->second.type_match(_type) ) {
std::cout << "Found @" << it->first << std::endl;
|