| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- /*
- ** Command & Conquer Generals(tm)
- ** Copyright 2025 Electronic Arts Inc.
- **
- ** 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 3 of the License, or
- ** (at your option) any later version.
- **
- ** 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, see <http://www.gnu.org/licenses/>.
- */
- ////////////////////////////////////////////////////////////////////////////////
- // //
- // (c) 2001-2003 Electronic Arts Inc. //
- // //
- ////////////////////////////////////////////////////////////////////////////////
- // FILE: Keyboard.h ///////////////////////////////////////////////////////////
- //-----------------------------------------------------------------------------
- //
- // Westwood Studios Pacific.
- //
- // Confidential Information
- // Copyright (C) 2001 - All Rights Reserved
- //
- //-----------------------------------------------------------------------------
- //
- // Project: RTS3
- //
- // File name: Keyboard.h
- //
- // Created: Mike Morrison, 1995
- // Colin Day, June 2001
- //
- // Desc: Basic keyboard
- //
- //-----------------------------------------------------------------------------
- ///////////////////////////////////////////////////////////////////////////////
- #pragma once
- #ifndef __KEYBOARD_H_
- #define __KEYBOARD_H_
- // SYSTEM INCLUDES ////////////////////////////////////////////////////////////
- // USER INCLUDES //////////////////////////////////////////////////////////////
- #include "Common/SubsystemInterface.h"
- #include "GameClient/KeyDefs.h"
- #include "Lib/BaseType.h"
- // FORWARD REFERENCES /////////////////////////////////////////////////////////
- ///////////////////////////////////////////////////////////////////////////////
- // TYPE DEFINITIONS ///////////////////////////////////////////////////////////
- ///////////////////////////////////////////////////////////////////////////////
- // KeyboardIO -----------------------------------------------------------------
- /** Holds a single keyboard event */
- //-----------------------------------------------------------------------------
- struct KeyboardIO
- {
- enum StatusType
- {
- STATUS_UNUSED = 0x00, // Key has not been used
- STATUS_USED = 0x01 // Key has been eaten
- };
- UnsignedByte key; // key data
- UnsignedByte status; // StatusType, above
- UnsignedShort state; // KEY_STATE_* in KeyDefs.h
- UnsignedInt sequence; // sequence info from DirectX used for order
- }; // end KeyboardIO
- // class Keyboard =============================================================
- /** Keyboard singleton to interface with the keyboard */
- //=============================================================================
- class Keyboard : public SubsystemInterface
- {
- enum { KEY_REPEAT_DELAY = 10 };
- public:
- Keyboard( void );
- virtual ~Keyboard( void );
- // you may extend the functionanilty of these for your device
- virtual void init( void ); /**< initialize the keyboard, only extend this
- functionality, do not replace */
- virtual void reset( void ); ///< Reset keyboard system
- virtual void update( void ); /**< gather current state of all keys, extend
- this functionality, do not replace */
- virtual Bool getCapsState( void ) = 0; ///< get state of caps lock key, return TRUE if down
- virtual void createStreamMessages( void ); /**< given state of device, create
- messages and put them on the
- stream for the raw state. */
- // simplified versions where the caller doesn't care which key type was pressed.
- Bool isShift();
- Bool isCtrl();
- Bool isAlt();
- Int getModifierFlags() { return m_modifiers; }
-
- // access methods for key data
- void resetKeys( void ); ///< reset the state of the keys
- KeyboardIO *getFirstKey( void ); ///< get first key ready for processing
- void setKeyStatusData( UnsignedByte key,
- KeyboardIO::StatusType data ); ///< set key status
- WideChar translateKey( WideChar keyCode ); ///< translte key code to printable UNICODE char
- WideChar getPrintableKey( UnsignedByte key, Int state );
- enum { MAX_KEY_STATES = 3};
- protected:
- /** get the key data for a single key, KEY_NONE should be returned when
- no key data is available to get anymore, you must implement this for your device */
- virtual void getKey( KeyboardIO *key ) = 0;
- // internal methods to update the key states
- void initKeyNames( void ); ///< initialize the key names table
- void updateKeys( void ); ///< update the state of our key data
- Bool checkKeyRepeat( void ); ///< check for repeating keys
- UnsignedByte getKeyStatusData( UnsignedByte key ); ///< get key status
- Bool getKeyStateBit( UnsignedByte key, Int bit ); ///< get key state bit
- UnsignedInt getKeySequenceData( UnsignedByte key ); ///< get key sequence
- void setKeyStateData( UnsignedByte key, UnsignedByte data ); ///< get key state
- UnsignedShort m_modifiers;
- // internal keyboard data members
- //Bool m_capsState; // 1 if caps lock is on
- //Bool m_shiftState; // 1 if either shift key is pressed
- //Bool m_shift2State; // 1 if secondary shift key is pressed
- //Bool m_lShiftState; // 1 if left state is down
- //Bool m_rShiftState; // 1 if right shift is down
- //Bool m_lControlState; // 1 if left control is down
- //Bool m_rControlState; // 1 if right control is down
- //Bool m_lAltState; // 1 if left alt is down
- //Bool m_rAltState; // 1 if right alt is down
- UnsignedByte m_shift2Key; // what key is the secondary shift key
- enum { NUM_KEYS = 256 };
- KeyboardIO m_keys[ NUM_KEYS ]; ///< the keys
- KeyboardIO m_keyStatus[ NUM_KEYS ]; ///< the key status flags
- enum { KEY_NAMES_COUNT = 256 };
- struct
- {
- WideChar stdKey;
- WideChar shifted;
- WideChar shifted2;
- } m_keyNames[ KEY_NAMES_COUNT ];
- UnsignedInt m_inputFrame; ///< frame input was gathered on
- }; // end Keyboard
- // INLINING ///////////////////////////////////////////////////////////////////
- // EXTERNALS //////////////////////////////////////////////////////////////////
- extern Keyboard *TheKeyboard;
- #endif // __KEYBOARD_H_
|