Initial revision
This commit is contained in:
307
source/gameengine/GameLogic/SCA_IInputDevice.h
Normal file
307
source/gameengine/GameLogic/SCA_IInputDevice.h
Normal file
@@ -0,0 +1,307 @@
|
||||
/**
|
||||
* Interface for input devices. The defines for keyboard/system/mouse events
|
||||
* here are for internal use in the KX module.
|
||||
*
|
||||
* $Id$
|
||||
*
|
||||
* ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version. The Blender
|
||||
* Foundation also sells licenses for use in proprietary software under
|
||||
* the Blender License. See http://www.blender.org/BL/ for information
|
||||
* about this.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software Foundation,
|
||||
* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
|
||||
* All rights reserved.
|
||||
*
|
||||
* The Original Code is: all of this file.
|
||||
*
|
||||
* Contributor(s): none yet.
|
||||
*
|
||||
* ***** END GPL/BL DUAL LICENSE BLOCK *****
|
||||
*/
|
||||
|
||||
#ifndef KX_INPUTDEVICE_H
|
||||
#define KX_INPUTDEVICE_H
|
||||
|
||||
|
||||
class SCA_InputEvent
|
||||
{
|
||||
|
||||
public:
|
||||
enum SCA_EnumInputs {
|
||||
|
||||
KX_NO_INPUTSTATUS = 0,
|
||||
KX_JUSTACTIVATED,
|
||||
KX_ACTIVE,
|
||||
KX_JUSTRELEASED,
|
||||
KX_MAX_INPUTSTATUS
|
||||
};
|
||||
|
||||
SCA_InputEvent(SCA_EnumInputs status=KX_NO_INPUTSTATUS,int eventval=0)
|
||||
: m_status(status),
|
||||
m_eventval(eventval)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
SCA_EnumInputs m_status;
|
||||
int m_eventval;
|
||||
};
|
||||
|
||||
class SCA_IInputDevice
|
||||
{
|
||||
|
||||
|
||||
public:
|
||||
|
||||
SCA_IInputDevice();
|
||||
virtual ~SCA_IInputDevice();
|
||||
|
||||
enum KX_EnumInputs {
|
||||
|
||||
KX_NOKEY = 0,
|
||||
|
||||
// TIMERS
|
||||
|
||||
KX_TIMER0,
|
||||
KX_TIMER1,
|
||||
KX_TIMER2,
|
||||
KX_TIMER3,
|
||||
|
||||
// SYSTEM
|
||||
|
||||
/* Moved to avoid clashes with KX_RETKEY */
|
||||
KX_KEYBD,
|
||||
KX_RAWKEYBD,
|
||||
KX_REDRAW,
|
||||
KX_INPUTCHANGE,
|
||||
KX_QFULL,
|
||||
KX_WINFREEZE,
|
||||
KX_WINTHAW,
|
||||
/* thaw is 11 */
|
||||
|
||||
/* move past retkey*/
|
||||
KX_WINCLOSE = 14,
|
||||
KX_WINQUIT,
|
||||
KX_Q_FIRSTTIME,
|
||||
/* sequence ends on 16 */
|
||||
|
||||
// standard keyboard
|
||||
|
||||
/* Because of the above preamble, KX_BEGINKEY is 15 ! This
|
||||
* means that KX_RETKEY on 13d (0Dh)) will double up with
|
||||
* KX_WINQUIT! Why is it 13? Because ascii 13d is Ctrl-M aka
|
||||
* CR! Its little brother, LF has 10d (0Ah). This is
|
||||
* dangerous, since the keyboards start scanning at
|
||||
* KX_BEGINKEY. I think the keyboard system should push its
|
||||
* key events instead of demanding the user to poll the
|
||||
* table... But that's for another time... The fix for now is
|
||||
* to move the above system events into a 'safe' (ie. unused)
|
||||
* range. I am loathe to move it away from this 'magical'
|
||||
* coincidence.. it's probably exploited somewhere. I hope the
|
||||
* close and quit events don't mess up 'normal' kb code
|
||||
* scanning.
|
||||
* */
|
||||
KX_BEGINKEY = 12,
|
||||
|
||||
KX_RETKEY = 13,
|
||||
KX_SPACEKEY = 32,
|
||||
KX_PADASTERKEY = 42,
|
||||
KX_COMMAKEY = 44,
|
||||
KX_MINUSKEY = 45,
|
||||
KX_PERIODKEY = 46,
|
||||
KX_ZEROKEY = 48,
|
||||
|
||||
KX_ONEKEY, // =49
|
||||
KX_TWOKEY,
|
||||
KX_THREEKEY,
|
||||
KX_FOURKEY,
|
||||
KX_FIVEKEY,
|
||||
KX_SIXKEY,
|
||||
KX_SEVENKEY,
|
||||
KX_EIGHTKEY,
|
||||
KX_NINEKEY, // = 57
|
||||
|
||||
KX_AKEY = 97,
|
||||
KX_BKEY,
|
||||
KX_CKEY,
|
||||
KX_DKEY,
|
||||
KX_EKEY,
|
||||
KX_FKEY,
|
||||
KX_GKEY,
|
||||
KX_HKEY,
|
||||
KX_IKEY,
|
||||
KX_JKEY,
|
||||
KX_KKEY,
|
||||
KX_LKEY,
|
||||
KX_MKEY,
|
||||
KX_NKEY, // =110
|
||||
KX_OKEY,
|
||||
KX_PKEY,
|
||||
KX_QKEY,
|
||||
KX_RKEY,
|
||||
KX_SKEY,
|
||||
KX_TKEY,
|
||||
KX_UKEY,
|
||||
KX_VKEY,
|
||||
KX_WKEY,
|
||||
KX_XKEY, // =120
|
||||
KX_YKEY,
|
||||
KX_ZKEY, // =122
|
||||
|
||||
|
||||
|
||||
KX_CAPSLOCKKEY, // 123
|
||||
|
||||
KX_LEFTCTRLKEY, // 124
|
||||
KX_LEFTALTKEY,
|
||||
KX_RIGHTALTKEY,
|
||||
KX_RIGHTCTRLKEY,
|
||||
KX_RIGHTSHIFTKEY,
|
||||
KX_LEFTSHIFTKEY,// 129
|
||||
|
||||
KX_ESCKEY, // 130
|
||||
KX_TABKEY, //131
|
||||
|
||||
|
||||
KX_LINEFEEDKEY, // 132
|
||||
KX_BACKSPACEKEY,
|
||||
KX_DELKEY,
|
||||
KX_SEMICOLONKEY, // 135
|
||||
|
||||
|
||||
KX_QUOTEKEY, //136
|
||||
KX_ACCENTGRAVEKEY, //137
|
||||
|
||||
KX_SLASHKEY, //138
|
||||
KX_BACKSLASHKEY,
|
||||
KX_EQUALKEY,
|
||||
KX_LEFTBRACKETKEY,
|
||||
KX_RIGHTBRACKETKEY, // 142
|
||||
|
||||
KX_LEFTARROWKEY, // 145
|
||||
KX_DOWNARROWKEY,
|
||||
KX_RIGHTARROWKEY,
|
||||
KX_UPARROWKEY, // 148
|
||||
|
||||
KX_PAD2 ,
|
||||
KX_PAD4 ,
|
||||
KX_PAD6 ,
|
||||
KX_PAD8 ,
|
||||
|
||||
KX_PAD1 ,
|
||||
KX_PAD3 ,
|
||||
KX_PAD5 ,
|
||||
KX_PAD7 ,
|
||||
KX_PAD9 ,
|
||||
|
||||
KX_PADPERIOD,
|
||||
KX_PADSLASHKEY,
|
||||
|
||||
|
||||
|
||||
KX_PAD0 ,
|
||||
KX_PADMINUS,
|
||||
KX_PADENTER,
|
||||
KX_PADPLUSKEY,
|
||||
|
||||
|
||||
KX_F1KEY ,
|
||||
KX_F2KEY ,
|
||||
KX_F3KEY ,
|
||||
KX_F4KEY ,
|
||||
KX_F5KEY ,
|
||||
KX_F6KEY ,
|
||||
KX_F7KEY ,
|
||||
KX_F8KEY ,
|
||||
KX_F9KEY ,
|
||||
KX_F10KEY,
|
||||
KX_F11KEY,
|
||||
KX_F12KEY,
|
||||
|
||||
KX_PAUSEKEY,
|
||||
KX_INSERTKEY,
|
||||
KX_HOMEKEY ,
|
||||
KX_PAGEUPKEY,
|
||||
KX_PAGEDOWNKEY,
|
||||
KX_ENDKEY,
|
||||
|
||||
// MOUSE
|
||||
KX_BEGINMOUSE,
|
||||
|
||||
KX_BEGINMOUSEBUTTONS,
|
||||
|
||||
KX_LEFTMOUSE,
|
||||
KX_MIDDLEMOUSE,
|
||||
KX_RIGHTMOUSE,
|
||||
|
||||
KX_ENDMOUSEBUTTONS,
|
||||
|
||||
KX_MOUSEX,
|
||||
KX_MOUSEY,
|
||||
|
||||
KX_ENDMOUSE,
|
||||
|
||||
|
||||
|
||||
KX_MAX_KEYS
|
||||
|
||||
} ; // enum
|
||||
|
||||
|
||||
protected:
|
||||
/**
|
||||
m_eventStatusTables are two tables that contain current and previous
|
||||
status of all events
|
||||
*/
|
||||
|
||||
SCA_InputEvent m_eventStatusTables[2][SCA_IInputDevice::KX_MAX_KEYS];
|
||||
/**
|
||||
m_currentTable is index for m_keyStatusTable that toggle between 0 or 1
|
||||
*/
|
||||
int m_currentTable;
|
||||
void ClearStatusTable(int tableid);
|
||||
|
||||
public:
|
||||
virtual bool IsPressed(SCA_IInputDevice::KX_EnumInputs inputcode)=0;
|
||||
virtual const SCA_InputEvent& GetEventValue(SCA_IInputDevice::KX_EnumInputs inputcode);
|
||||
|
||||
/**
|
||||
* Count active events(active and just_activated)
|
||||
*/
|
||||
virtual int GetNumActiveEvents();
|
||||
|
||||
/**
|
||||
* Get the number of ramping events (just_activated, just_released)
|
||||
*/
|
||||
virtual int GetNumJustEvents();
|
||||
|
||||
/* Next frame: we calculate the new key states. This goes as follows:
|
||||
*
|
||||
* KX_NO_INPUTSTATUS -> KX_NO_INPUTSTATUS
|
||||
* KX_JUSTACTIVATED -> KX_ACTIVE
|
||||
* KX_ACTIVE -> KX_ACTIVE
|
||||
* KX_JUSTRELEASED -> KX_NO_INPUTSTATUS
|
||||
*
|
||||
* Getting new events provides the
|
||||
* KX_NO_INPUTSTATUS->KX_JUSTACTIVATED and
|
||||
* KX_ACTIVE->KX_JUSTRELEASED transitions.
|
||||
*/
|
||||
virtual void NextFrame();
|
||||
|
||||
};
|
||||
|
||||
#endif //KX_INPUTDEVICE_H
|
Reference in New Issue
Block a user