You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
298 lines
9.1 KiB
C
298 lines
9.1 KiB
C
//
|
|
// G A M E.O.N.E - LOW LEVEL LIB V1.0
|
|
// Copyright (C) 2001 LEVEL ONE ENTERTAINMENT,
|
|
// Licensed under the terms of LGPL.
|
|
//:---------------------------------------------------------------------------
|
|
//:Description
|
|
//
|
|
// LOW LEVEL INPUT DRIVER INCLUDE FILE
|
|
//
|
|
|
|
#ifndef _LLINPUT_H
|
|
#define _LLINPUT_H
|
|
|
|
#include "lib_base.h"
|
|
#include "llqueue.h"
|
|
|
|
/*
|
|
* global states of system devices
|
|
* if( llinput_Keys[LLINPUT_KEY_I] ) key is down;
|
|
*/
|
|
extern TxU8 llinput_Keys[256]; // llinput_keyboard.cpp
|
|
|
|
extern int llinput_MouseX; // llinput_mouse.cpp
|
|
extern int llinput_MouseY;
|
|
extern int llinput_MouseZ;
|
|
extern int llinput_MouseRelX;
|
|
extern int llinput_MouseRelY;
|
|
extern int llinput_MouseRelZ;
|
|
extern TxU8 llinput_MouseBtn1;
|
|
extern TxU8 llinput_MouseBtn2;
|
|
extern TxU8 llinput_MouseBtn3;
|
|
extern TxU8 llinput_MouseBtn4;
|
|
extern TxU8 llinput_MouseBtn5;
|
|
extern TxU8 llinput_MouseBtn6;
|
|
extern TxU8 llinput_MouseBtn7;
|
|
extern TxU8 llinput_MouseBtn8;
|
|
|
|
|
|
/*
|
|
* Input Event Struct
|
|
*/
|
|
typedef struct
|
|
{
|
|
// info
|
|
int id; // device identifier
|
|
int userid; // user identifier
|
|
const char *devicename;
|
|
const char *eventname;
|
|
// state
|
|
TxU32 state;
|
|
int ch; // character if this event is a keyboard event
|
|
int x,y,z; // rel or abs coords
|
|
|
|
} s_event, inputEvent, *PtrInputEvent;
|
|
|
|
|
|
#include "llinput_devices.h"
|
|
|
|
|
|
/*
|
|
* INPUT TYPES
|
|
*
|
|
*/
|
|
typedef enum {
|
|
KEYBOARD = 0x10000,
|
|
MOUSE = 0x20000,
|
|
JOYSTICK = 0x30000,
|
|
GAMEPAD = 0x40000,
|
|
WHEEL = 0x60000,
|
|
FORCE_FB_JOYSTICK = 0x70000,
|
|
FORCE_FB_WHEEL = 0x80000,
|
|
} eInputDevices;
|
|
|
|
#define LLINPUT_CHAR 0x1000 /* value of userid for characters */
|
|
|
|
|
|
#define LLINPUT_ESCAPE (0xFF)
|
|
|
|
#define LLINPUT_FKEY1 (0xA0)
|
|
#define LLINPUT_FKEY2 (0xA1)
|
|
#define LLINPUT_FKEY3 (0xA2)
|
|
#define LLINPUT_FKEY4 (0xA3)
|
|
#define LLINPUT_FKEY5 (0xA4)
|
|
#define LLINPUT_FKEY6 (0xA5)
|
|
#define LLINPUT_FKEY7 (0xA6)
|
|
#define LLINPUT_FKEY8 (0xA7)
|
|
#define LLINPUT_FKEY9 (0xA9)
|
|
#define LLINPUT_FKEY10 (0xAA)
|
|
#define LLINPUT_FKEY11 (0xAB)
|
|
#define LLINPUT_FKEY12 (0xAC)
|
|
|
|
|
|
|
|
#define LLINPUT_CURSOR_UP (0xB0) /* UpArrow on arrow keypad */
|
|
#define LLINPUT_CURSOR_LEFT (0xB1) /* LeftArrow on arrow keypad */
|
|
#define LLINPUT_CURSOR_RIGHT (0xB2) /* RightArrow on arrow keypad */
|
|
#define LLINPUT_CURSOR_DOWN (0xB3) /* DownArrow on arrow keypad */
|
|
#define LLINPUT_PAGEUP (0xB4) /* PgUp on arrow keypad */
|
|
#define LLINPUT_PAGEDOWN (0xB5) /* PgDn on arrow keypad */
|
|
#define LLINPUT_CURSOR_PAUSE (0xB6) /* PAUSE */
|
|
//#define LLINPUT_CURSOR_SCROLL (0xB7) /* Scroll */
|
|
#define LLINPUT_CURSOR_INSERT (0xB8) /* Insert on arrow keypad */
|
|
#define LLINPUT_CURSOR_DELETE (0xB9) /* Delete on arrow keypad */
|
|
#define LLINPUT_CURSOR_HOME (0xBA) /* Home on arrow keypad */
|
|
#define LLINPUT_CURSOR_END (0xBB) /* End on arrow keypad */
|
|
#define LLINPUT_NUMPAD_ENTER (0xBC) /* Enter on numeric keypad */
|
|
#define LLINPUT_NUMPAD_ADD (0xBD) /* + on numeric keypad */
|
|
#define LLINPUT_NUMPAD_SUBTRACT (0xBE) /* - on numeric keypad */
|
|
#define LLINPUT_NUMPAD_DIVIDE (0xBF) /* / on numeric keypad */
|
|
#define LLINPUT_NUMPAD_MULTIPLY (0xC0) /* * on numeric keypad */
|
|
#define LLINPUT_NUMPAD_DECIMAL (0xC1) /* . on numeric keypad */
|
|
#define LLINPUT_NUMPAD_0 (0xC5)
|
|
#define LLINPUT_NUMPAD_1 (0xC6)
|
|
#define LLINPUT_NUMPAD_2 (0xC7)
|
|
#define LLINPUT_NUMPAD_3 (0xC8)
|
|
#define LLINPUT_NUMPAD_4 (0xC9)
|
|
#define LLINPUT_NUMPAD_5 (0xCA)
|
|
#define LLINPUT_NUMPAD_6 (0xCB)
|
|
#define LLINPUT_NUMPAD_7 (0xCC)
|
|
#define LLINPUT_NUMPAD_8 (0xCD)
|
|
#define LLINPUT_NUMPAD_9 (0xCE)
|
|
|
|
#define LLINPUT_LSHIFT (0xCF)
|
|
#define LLINPUT_RSHIFT (0xD0)
|
|
#define LLINPUT_LCONTROL (0xD1)
|
|
#define LLINPUT_RCONTROL (0xD2)
|
|
#define LLINPUT_SYSRQ (0xD3)
|
|
#define LLINPUT_CAPITAL (0xD4)
|
|
#define LLINPUT_NUMLOCK (0xD5)
|
|
#define LLINPUT_SCROLL (0xD7) /* Scroll Lock */
|
|
#define LLINPUT_LMENU (0xD8) /* left Alt */
|
|
#define LLINPUT_RMENU (0xD9) /* right Alt */
|
|
#define LLINPUT_LWIN (0xDA) /* Left Windows key */
|
|
#define LLINPUT_RWIN (0xDB) /* Right Windows key */
|
|
#define LLINPUT_APPS (0xFD) /* AppMenu key */
|
|
|
|
#define LLINPUT_KEY_1 ((TxU8)'1')
|
|
#define LLINPUT_KEY_2 ((TxU8)'2')
|
|
#define LLINPUT_KEY_3 ((TxU8)'3')
|
|
#define LLINPUT_KEY_4 ((TxU8)'4')
|
|
#define LLINPUT_KEY_5 ((TxU8)'5')
|
|
#define LLINPUT_KEY_6 ((TxU8)'6')
|
|
#define LLINPUT_KEY_7 ((TxU8)'7')
|
|
#define LLINPUT_KEY_8 ((TxU8)'8')
|
|
#define LLINPUT_KEY_9 ((TxU8)'9')
|
|
#define LLINPUT_KEY_0 ((TxU8)'0')
|
|
#define LLINPUT_KEY_A ((TxU8)'A')
|
|
#define LLINPUT_KEY_B ((TxU8)'B')
|
|
#define LLINPUT_KEY_C ((TxU8)'C')
|
|
#define LLINPUT_KEY_D ((TxU8)'D')
|
|
#define LLINPUT_KEY_E ((TxU8)'E')
|
|
#define LLINPUT_KEY_F ((TxU8)'F')
|
|
#define LLINPUT_KEY_G ((TxU8)'G')
|
|
#define LLINPUT_KEY_H ((TxU8)'H')
|
|
#define LLINPUT_KEY_I ((TxU8)'I')
|
|
#define LLINPUT_KEY_J ((TxU8)'J')
|
|
#define LLINPUT_KEY_K ((TxU8)'K')
|
|
#define LLINPUT_KEY_L ((TxU8)'L')
|
|
#define LLINPUT_KEY_M ((TxU8)'M')
|
|
#define LLINPUT_KEY_N ((TxU8)'N')
|
|
#define LLINPUT_KEY_O ((TxU8)'O')
|
|
#define LLINPUT_KEY_P ((TxU8)'P')
|
|
#define LLINPUT_KEY_Q ((TxU8)'Q')
|
|
#define LLINPUT_KEY_R ((TxU8)'R')
|
|
#define LLINPUT_KEY_S ((TxU8)'S')
|
|
#define LLINPUT_KEY_T ((TxU8)'T')
|
|
#define LLINPUT_KEY_U ((TxU8)'U')
|
|
#define LLINPUT_KEY_V ((TxU8)'V')
|
|
#define LLINPUT_KEY_W ((TxU8)'W')
|
|
#define LLINPUT_KEY_X ((TxU8)'X')
|
|
#define LLINPUT_KEY_Y ((TxU8)'Y')
|
|
#define LLINPUT_KEY_Z ((TxU8)'Z')
|
|
|
|
#define LLINPUT_KEY_MINUS ((TxU8)'-') /* - on main keyboard */
|
|
#define LLINPUT_KEY_EQUALS ((TxU8)'=')
|
|
#define LLINPUT_KEY_BACK ((TxU8)'\b') /* backspace */
|
|
#define LLINPUT_KEY_TAB ((TxU8)'\t')
|
|
#define LLINPUT_KEY_LBRACKET ((TxU8)'[')
|
|
#define LLINPUT_KEY_RBRACKET ((TxU8)']')
|
|
#define LLINPUT_KEY_RETURN ((TxU8)'\n') /* Enter on main keyboard */
|
|
#define LLINPUT_KEY_SEMICOLON ((TxU8)';')
|
|
#define LLINPUT_KEY_APOSTROPHE ((TxU8)'\'')
|
|
#define LLINPUT_KEY_GRAVE ((TxU8)'`') /* accent grave */
|
|
#define LLINPUT_KEY_BACKSLASH ((TxU8)'\\')
|
|
#define LLINPUT_KEY_COMMA ((TxU8)',')
|
|
#define LLINPUT_KEY_PERIOD ((TxU8)'.') /* . on main keyboard */
|
|
#define LLINPUT_KEY_SLASH ((TxU8)'/') /* / on main keyboard */
|
|
#define LLINPUT_KEY_SPACE ((TxU8)' ')
|
|
|
|
//:-------------------------------------------------------------------------
|
|
|
|
#define LLINPUT_MOTION 0x101
|
|
#define LLINPUT_POSITION 0x102
|
|
|
|
#define LLINPUT_BUTTON(idx) (0x200+idx)
|
|
#define LLINPUT_BUTTON_0 0x200
|
|
#define LLINPUT_BUTTON_1 0x201
|
|
#define LLINPUT_BUTTON_2 0x202
|
|
#define LLINPUT_BUTTON_3 0x203
|
|
#define LLINPUT_BUTTON_4 0x204
|
|
#define LLINPUT_BUTTON_5 0x205
|
|
#define LLINPUT_BUTTON_6 0x206
|
|
#define LLINPUT_BUTTON_7 0x207
|
|
#define LLINPUT_BUTTON_8 0x208
|
|
#define LLINPUT_BUTTON_9 0x209
|
|
#define LLINPUT_BUTTON_10 0x20a
|
|
#define LLINPUT_BUTTON_11 0x20b
|
|
#define LLINPUT_BUTTON_12 0x20c
|
|
#define LLINPUT_BUTTON_13 0x20d
|
|
#define LLINPUT_BUTTON_14 0x20e
|
|
#define LLINPUT_BUTTON_15 0x20f
|
|
|
|
#define LLINPUT_MOTION_X 0x300
|
|
#define LLINPUT_MOTION_XP 0x301
|
|
#define LLINPUT_MOTION_XM 0x302
|
|
#define LLINPUT_MOTION_Y 0x303
|
|
#define LLINPUT_MOTION_YP 0x304
|
|
#define LLINPUT_MOTION_YM 0x305
|
|
#define LLINPUT_MOTION_Z 0x306
|
|
#define LLINPUT_MOTION_ZP 0x307
|
|
#define LLINPUT_MOTION_ZM 0x308
|
|
|
|
#define LLINPUT_WINDOW_ACTIVE 0x400
|
|
#define LLINPUT_WINDOW_MINIMIZED 0x401
|
|
#define LLINPUT_DISPLAYMODE_CHANGED 0x402
|
|
|
|
|
|
|
|
/*
|
|
* Utilities
|
|
* STATE_Justdown() - returns true when key just pressed
|
|
* STATE_Justup() - returns true when key just released
|
|
* STATE_Up() - returns true when key released
|
|
* STATE_Down() - returns true when key pressed
|
|
*/
|
|
|
|
inline bool STATE_Justdown(PtrInputEvent ev )
|
|
{
|
|
SYS_ASSERT_PTR(ev);
|
|
return (ev->state & 0x3) == 0x1; // just pressed
|
|
}
|
|
|
|
inline bool STATE_Justup(PtrInputEvent ev )
|
|
{
|
|
SYS_ASSERT_PTR(ev);
|
|
return (ev->state & 0x3) == 0x2; // just released
|
|
}
|
|
|
|
inline bool STATE_Up(PtrInputEvent ev )
|
|
{
|
|
SYS_ASSERT_PTR(ev);
|
|
return (ev->state & 0x1) == 0x0; // released
|
|
}
|
|
|
|
inline bool STATE_Down(PtrInputEvent ev )
|
|
{
|
|
SYS_ASSERT_PTR(ev);
|
|
return (ev->state & 0x1) == 0x1; // pressed
|
|
}
|
|
|
|
inline bool Justdown(TxU8 kbtn){
|
|
return (kbtn&0x3) == 0x1; // just pressed
|
|
}
|
|
|
|
inline bool Justup(TxU8 kbtn){
|
|
return (kbtn&0x3) == 0x2; // just pressed
|
|
}
|
|
|
|
inline bool down(TxU8 kbtn){
|
|
return (kbtn&0x1); // pressed
|
|
}
|
|
|
|
inline bool up(TxU8 kbtn){
|
|
return (kbtn&0x1) == 0; // released
|
|
}
|
|
|
|
extern queue<char> Input_Devices;
|
|
|
|
/*
|
|
* prototypes exported functions
|
|
*/
|
|
extern void llinput_Init(void *window);
|
|
extern void llinput_Exit(void);
|
|
extern void llinput_Update(void); //no msg wait
|
|
extern void llinput_Poll(void); //msg wait
|
|
extern void llinput_ResetEvent(void);
|
|
extern void llinput_ResetEvent(const char *devicename);
|
|
extern void llinput_ClearEvent(void);
|
|
extern void llinput_ClearEvent(const char *devicename);
|
|
extern inputEvent * llinput_GetEvent(void);
|
|
extern inputEvent * llinput_GetEvent(const char *devicename);
|
|
extern inputEvent * llinput_GetState(int eventid, const char *devicename);
|
|
extern void llinput_WaitforActivation(void);
|
|
extern const char * llinput_GetEventName(int eventid);
|
|
extern int llinput_GetEventId(const char *eventname);
|
|
|
|
#endif
|