--- a/src/Graphics.cc Sat Dec 06 21:12:30 2008 +0000
+++ b/src/Graphics.cc Sat Dec 06 21:35:36 2008 +0000
@@ -36,11 +36,8 @@
if (keyboard.get_keycode(CL_KEY_I))
player->printDebugInfo();
- // check our keymap
- for (InputKeymapEntry *e = getGlobalInputKeymap(); e->keycode && e->input; e++) {
- if (keyboard.get_keycode(e->keycode))
- input_mask |= e->input;
- }
+ // build input_mask
+ input_mask = handleInputDevice(keyboard);
// apply input if applicable
if (input_mask)
--- a/src/Input.cc Sat Dec 06 21:12:30 2008 +0000
+++ b/src/Input.cc Sat Dec 06 21:35:36 2008 +0000
@@ -4,19 +4,44 @@
#include "Input.hh"
static InputKeymapEntry INPUT_KEYMAP[] = {
- { CL_KEY_UP, INPUT_AIM_UP },
- { CL_KEY_DOWN, INPUT_AIM_DOWN },
- { CL_KEY_LEFT, INPUT_MOVE_LEFT },
- { CL_KEY_RIGHT, INPUT_MOVE_RIGHT },
- { CL_KEY_RSHIFT, INPUT_JUMP },
- { CL_KEY_M, INPUT_DIG },
- { CL_KEY_F, INPUT_SHOOT },
- { CL_KEY_D, INPUT_CHANGE },
- { CL_KEY_R, INPUT_ROPE },
- { CL_KEY_RSHIFT, INPUT_UNROPE },
- { 0, (_PlayerInput) 0 }
+ { -CL_KEY_ENTER, CL_KEY_UP, INPUT_AIM_UP },
+ { -CL_KEY_ENTER, CL_KEY_DOWN, INPUT_AIM_DOWN },
+ { -CL_KEY_ENTER, CL_KEY_LEFT, INPUT_MOVE_LEFT },
+ { -CL_KEY_ENTER, CL_KEY_RIGHT, INPUT_MOVE_RIGHT },
+ { -CL_KEY_ENTER, CL_KEY_RSHIFT, INPUT_JUMP },
+ { CL_KEY_LEFT, CL_KEY_RIGHT, INPUT_DIG },
+ { CL_KEY_RCONTROL, 0, INPUT_SHOOT },
+ { CL_KEY_ENTER, CL_KEY_LEFT, INPUT_CHANGE },
+ { CL_KEY_ENTER, CL_KEY_RIGHT, INPUT_CHANGE },
+ { CL_KEY_ENTER, CL_KEY_RSHIFT, INPUT_ROPE },
+ { -CL_KEY_ENTER, CL_KEY_RSHIFT, INPUT_UNROPE },
+ { CL_KEY_ENTER, CL_KEY_UP, INPUT_ROPE_UP },
+ { CL_KEY_ENTER, CL_KEY_DOWN, INPUT_ROPE_DOWN },
+ { 0, 0, (_PlayerInput) 0 }
};
InputKeymapEntry* getGlobalInputKeymap (void) {
return INPUT_KEYMAP;
}
+
+static bool _checkInput (CL_InputDevice &keyboard, int keycode) {
+ if (keycode > 0)
+ return keyboard.get_keycode(keycode);
+
+ else if (keycode < 0)
+ return !keyboard.get_keycode(-keycode);
+
+ else // == 0
+ return true;
+}
+
+PlayerInput handleInputDevice (CL_InputDevice &keyboard) {
+ PlayerInput input = 0;
+
+ for (InputKeymapEntry *e = getGlobalInputKeymap(); (e->keycode1 || e->keycode2) && e->input; e++) {
+ if (_checkInput(keyboard, e->keycode1) && _checkInput(keyboard, e->keycode2))
+ input |= e->input;
+ }
+
+ return input;
+}
--- a/src/Input.hh Sat Dec 06 21:12:30 2008 +0000
+++ b/src/Input.hh Sat Dec 06 21:35:36 2008 +0000
@@ -2,6 +2,7 @@
#define INPUT_HH
#include <stdint.h>
+#include <ClanLib/Display/input_device.h>
#include <ClanLib/Display/keys.h>
// const uint16_t INPUT_INTERVAL_MS = 20;
@@ -18,13 +19,15 @@
INPUT_SHOOT = 0x0040,
INPUT_CHANGE = 0x0080,
INPUT_ROPE = 0x0100,
- INPUT_UNROPE = 0x0200
+ INPUT_UNROPE = 0x0200,
+ INPUT_ROPE_UP = 0x0400,
+ INPUT_ROPE_DOWN = 0x0800,
};
typedef uint16_t PlayerInput;
struct InputKeymapEntry {
- int keycode;
+ int keycode1, keycode2;
enum _PlayerInput input;
};
@@ -33,4 +36,9 @@
*/
InputKeymapEntry* getGlobalInputKeymap (void);
+/*
+ * Handle keycodes
+ */
+PlayerInput handleInputDevice (CL_InputDevice &keyboard);
+
#endif