205 lines
4.1 KiB
C++
205 lines
4.1 KiB
C++
/*
|
|
* CInput.h
|
|
*
|
|
* Created on: 20.03.2009
|
|
* Author: gerstrong
|
|
*/
|
|
|
|
#ifndef CINPUT_H_
|
|
#define CINPUT_H_
|
|
|
|
#ifdef WIZ
|
|
#include <sys/ioctl.h>
|
|
#include <sys/soundcard.h>
|
|
#include <fcntl.h>
|
|
#include <unistd.h>
|
|
#endif
|
|
|
|
#include "../CSingleton.h"
|
|
#define g_pInput CInput::Get()
|
|
|
|
// key defines, locations in keytable[]
|
|
//#define KEYTABLE_SIZE 54
|
|
//#define KEYTABLE_REALKEYS_SIZE 49
|
|
|
|
#define KQUIT 0
|
|
#define KLEFT 1
|
|
#define KRIGHT 2
|
|
#define KUP 3
|
|
#define KDOWN 4
|
|
#define KCTRL 5 // simply, CTRL, mapped to JUMP or FIRE
|
|
#define KALT 6 // simply, ALT, mapped to POGO or fire
|
|
#define KENTER 7
|
|
#define KSPACE 8
|
|
#define KF1 9
|
|
#define KF2 10
|
|
#define KF3 11
|
|
#define KF4 12
|
|
#define KF5 13
|
|
#define KF6 14
|
|
#define KF7 15
|
|
#define KF8 16
|
|
#define KF9 17
|
|
#define KF10 18
|
|
|
|
#define KLEFT2 19
|
|
#define KRIGHT2 20
|
|
#define KUP2 21
|
|
#define KDOWN2 22
|
|
#define KCTRL2 23
|
|
#define KALT2 24
|
|
|
|
#define KLEFT3 25
|
|
#define KRIGHT3 26
|
|
#define KUP3 27
|
|
#define KDOWN3 28
|
|
#define KCTRL3 29
|
|
#define KALT3 30
|
|
|
|
#define KPLUS 31
|
|
#define KMINUS 32
|
|
|
|
#define KNUM1 33
|
|
#define KNUM2 34
|
|
#define KNUM3 35
|
|
#define KNUM4 36
|
|
#define KNUM5 37
|
|
#define KNUM6 38
|
|
#define KNUM7 39
|
|
#define KNUM8 40
|
|
#define KNUM9 41
|
|
|
|
#define KTAB 48
|
|
|
|
#define KBCKSPCE 49
|
|
#define KLALT 50
|
|
|
|
// New keys
|
|
#define KA 54
|
|
#define KB 55
|
|
#define KC 56
|
|
#define KD 57
|
|
#define KE 58
|
|
#define KF 59
|
|
#define KG 60
|
|
#define KH 61
|
|
#define KI 62
|
|
#define KJ 63
|
|
#define KK 64
|
|
#define KL 65
|
|
#define KM 66
|
|
#define KN 67
|
|
#define KO 68
|
|
#define KP 69
|
|
#define KQ 70
|
|
#define KR 71
|
|
#define KS 72
|
|
#define KT 73
|
|
#define KU 74
|
|
#define KV 75
|
|
#define KW 76
|
|
#define KX 77
|
|
#define KY 78
|
|
#define KZ 79
|
|
#define KLSHIFT 80
|
|
|
|
#define KEYTABLE_SIZE 82
|
|
|
|
#define IC_JUMP 0
|
|
#define IC_POGO 1
|
|
#define IC_FIRE 2
|
|
#define IC_STATUS 3
|
|
#define IC_LEFT 4
|
|
#define IC_UP 5
|
|
#define IC_RIGHT 6
|
|
#define IC_DOWN 7
|
|
|
|
#define NUMBER_OF_COMMANDS 8
|
|
#define NUM_INPUTS 2
|
|
|
|
#define ETYPE_NO_JOYSTICK 0
|
|
#define ETYPE_JOYAXIS 1
|
|
#define ETYPE_JOYBUTTON 2
|
|
|
|
typedef struct stInputCommand
|
|
{
|
|
bool active;
|
|
bool lastactive;
|
|
//int value;
|
|
|
|
SDLKey keysym;
|
|
|
|
unsigned int joyeventtype;
|
|
Uint8 which;
|
|
int joyaxis;
|
|
unsigned short joybutton;
|
|
int joyvalue;
|
|
}stInputCommand;
|
|
|
|
class CInput : public CSingleton<CInput>
|
|
{
|
|
public:
|
|
CInput();
|
|
virtual ~CInput();
|
|
|
|
void pollEvents();
|
|
|
|
bool getHoldedKey(int key);
|
|
bool getPressedKey(int key);
|
|
bool getPressedAnyKey(void);
|
|
void sendKey(int key);
|
|
|
|
bool getPressedAnyCommand();
|
|
bool getPulsedCommand(int command, int msec);
|
|
bool getPulsedCommand(Uint8 player, int command, int msec);
|
|
bool getHoldedCommand(Uint8 player, int command);
|
|
bool getHoldedCommand(int command);
|
|
bool getPressedCommand(int command);
|
|
bool getPressedCommand(Uint8 player, int command);
|
|
bool getPressedAnyCommand(Uint8 player);
|
|
bool getExitEvent(void);
|
|
void cancelExitEvent(void);
|
|
|
|
void getEventName(int position, unsigned char input, char *buf);
|
|
bool readNewEvent(Uint8 device, int position);
|
|
|
|
short loadControlconfig();
|
|
void resetControls();
|
|
short saveControlconfig();
|
|
|
|
void flushKeys(void);
|
|
void flushCommands(void);
|
|
void flushAll(void);
|
|
|
|
void renderOverlay(); // for mouse wrapper gfx or other stuff
|
|
|
|
private:
|
|
SDL_Event Event;
|
|
stInputCommand InputCommand[NUM_INPUTS][NUMBER_OF_COMMANDS];
|
|
bool m_exit;
|
|
int m_cmdpulse;
|
|
short m_joydeadzone;
|
|
|
|
bool immediate_keytable[KEYTABLE_SIZE];
|
|
bool last_immediate_keytable[KEYTABLE_SIZE];
|
|
#ifdef WIZ
|
|
int volume;
|
|
int volume_direction;
|
|
#endif
|
|
|
|
void processKeys(int value);
|
|
void processJoystickAxis(void);
|
|
void processJoystickButton(int value);
|
|
void processMouse();
|
|
void processMouse(SDL_Event& ev);
|
|
void processMouse(int x, int y, bool down, int index);
|
|
#ifdef WIZ
|
|
void WIZ_EmuKeyboard( int button, int value );
|
|
void WIZ_AdjustVolume( int direction );
|
|
#endif
|
|
};
|
|
|
|
|
|
|
|
#endif /* CINPUT_H_ */
|