| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393 |
- /*
- ** Command & Conquer Renegade(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/>.
- */
- /***********************************************************************************************
- *** Confidential - Westwood Studios ***
- ***********************************************************************************************
- * *
- * Project Name : Commando *
- * *
- * $Archive:: /Commando/Code/Combat/input.h $*
- * *
- * $Author:: Byon_g $*
- * *
- * $Modtime:: 2/13/02 2:49p $*
- * *
- * $Revision:: 87 $*
- * *
- *---------------------------------------------------------------------------------------------*
- * Functions: *
- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
- #ifndef INPUT_H
- #define INPUT_H
- #ifndef ALWAYS_H
- #include "always.h"
- #endif
- #ifndef WWMATH_H
- #include "wwmath.h"
- #endif
- #ifndef WWDEBUG_H
- #include "wwdebug.h"
- #endif
- #include "widestring.h"
- /*
- ** Forward declarations
- */
- class INIClass;
- /*
- ** Constants
- */
- extern const char *DEFAULT_INPUT_FILENAME;
- /*
- ** Input Functions
- */
- typedef enum {
- INPUT_FUNCTION_MOVE_FORWARD,
- INPUT_FUNCTION_MOVE_BACKWARD,
- INPUT_FUNCTION_MOVE_LEFT,
- INPUT_FUNCTION_MOVE_RIGHT,
- INPUT_FUNCTION_MOVE_UP, // helicopters and orcas
- INPUT_FUNCTION_MOVE_DOWN,
- INPUT_FUNCTION_WALK_MODE,
- INPUT_FUNCTION_TURN_LEFT,
- INPUT_FUNCTION_TURN_RIGHT,
- INPUT_FUNCTION_VEHICLE_TURN_LEFT,
- INPUT_FUNCTION_VEHICLE_TURN_RIGHT,
- INPUT_FUNCTION_VEHICLE_TOGGLE_GUNNER,
- INPUT_FUNCTION_WEAPON_UP,
- INPUT_FUNCTION_WEAPON_DOWN,
- INPUT_FUNCTION_WEAPON_LEFT,
- INPUT_FUNCTION_WEAPON_RIGHT,
- INPUT_FUNCTION_WEAPON_RESET,
- INPUT_FUNCTION_ZOOM_IN,
- INPUT_FUNCTION_ZOOM_OUT,
- INPUT_FUNCTION_ACTION, // Was LADDER
- INPUT_FUNCTION_JUMP,
- INPUT_FUNCTION_CROUCH,
- INPUT_FUNCTION_DIVE_FORWARD,
- INPUT_FUNCTION_DIVE_BACKWARD,
- INPUT_FUNCTION_DIVE_LEFT,
- INPUT_FUNCTION_DIVE_RIGHT,
- INPUT_FUNCTION_TURN_AROUND,
- INPUT_FUNCTION_DROP_FLAG,
- INPUT_FUNCTION_NEXT_WEAPON,
- INPUT_FUNCTION_PREV_WEAPON,
- INPUT_FUNCTION_FIRE_WEAPON_PRIMARY,
- INPUT_FUNCTION_FIRE_WEAPON_SECONDARY,
- INPUT_FUNCTION_USE_WEAPON,
- INPUT_FUNCTION_RELOAD_WEAPON,
- INPUT_FUNCTION_SELECT_NO_WEAPON,
- INPUT_FUNCTION_SELECT_WEAPON_0,
- INPUT_FUNCTION_SELECT_WEAPON_1,
- INPUT_FUNCTION_SELECT_WEAPON_2,
- INPUT_FUNCTION_SELECT_WEAPON_3,
- INPUT_FUNCTION_SELECT_WEAPON_4,
- INPUT_FUNCTION_SELECT_WEAPON_5,
- INPUT_FUNCTION_SELECT_WEAPON_6,
- INPUT_FUNCTION_SELECT_WEAPON_7,
- INPUT_FUNCTION_SELECT_WEAPON_8,
- INPUT_FUNCTION_SELECT_WEAPON_9,
- INPUT_FUNCTION_CYCLE_POG,
- // INPUT_FUNCTION_HUD_ZOOM_RADAR_IN,
- // INPUT_FUNCTION_HUD_ZOOM_RADAR_OUT,
- INPUT_FUNCTION_PANIC,
- INPUT_FUNCTION_CURSOR_TARGETING,
- INPUT_FUNCTION_FIRST_PERSON_TOGGLE,
- INPUT_FUNCTION_SUICIDE,
- INPUT_FUNCTION_VERBOSE_HELP,
- INPUT_FUNCTION_BEGIN_PUBLIC_MESSAGE,
- INPUT_FUNCTION_BEGIN_TEAM_MESSAGE,
- INPUT_FUNCTION_BEGIN_PRIVATE_MESSAGE,
- INPUT_FUNCTION_BEGIN_CONSOLE,
- INPUT_FUNCTION_HELP_SCREEN,
- INPUT_FUNCTION_EVA_OBJECTIVES_SCREEN,
- INPUT_FUNCTION_EVA_MAP_SCREEN,
- // DEBUGGING
- INPUT_FUNCTION_CAMERA_HEADING_LEFT,
- INPUT_FUNCTION_CAMERA_HEADING_RIGHT,
- INPUT_FUNCTION_CAMERA_TRANSTILT_INC,
- INPUT_FUNCTION_CAMERA_TRANSTILT_DEC,
- INPUT_FUNCTION_CAMERA_VIEWTILT_INC,
- INPUT_FUNCTION_CAMERA_VIEWTILT_DEC,
- INPUT_FUNCTION_CAMERA_DIST_INC,
- INPUT_FUNCTION_CAMERA_DIST_DEC,
- INPUT_FUNCTION_CAMERA_FOV_INC,
- INPUT_FUNCTION_CAMERA_FOV_DEC,
- INPUT_FUNCTION_CAMERA_HEIGHT_INC,
- INPUT_FUNCTION_CAMERA_HEIGHT_DEC,
- INPUT_FUNCTION_MENU_SERVERQUICKSTART,
- INPUT_FUNCTION_MENU_CLIENTQUICKSTART,
- INPUT_FUNCTION_MAKE_SCREEN_SHOT,
- INPUT_FUNCTION_TOGGLE_MOVIE_CAPTURE,
- //INPUT_FUNCTION_INCREMENT_ACTIVE_MESSAGE,
- //INPUT_FUNCTION_DECREMENT_ACTIVE_MESSAGE,
- //INPUT_FUNCTION_INCREMENT_DEBUG_SWITCH_1,
- //INPUT_FUNCTION_INCREMENT_DEBUG_SWITCH_2,
- INPUT_FUNCTION_DEBUG_SINGLE_STEP,
- INPUT_FUNCTION_DEBUG_SINGLE_STEP_STEP,
- INPUT_FUNCTION_DEBUG_RAPID_MOVE,
- INPUT_FUNCTION_DEBUG_GENERIC0,
- INPUT_FUNCTION_DEBUG_GENERIC1,
- INPUT_FUNCTION_DEBUG_FAR_CLIP_IN,
- INPUT_FUNCTION_DEBUG_FAR_CLIP_OUT,
- INPUT_FUNCTION_QUICK_FULL_EXIT,
- INPUT_FUNCTION_VIS_UPDATE,
- // INPUT_FUNCTION_TOGGLE_PERFORMANCE_SAMPLING,
- INPUT_FUNCTION_TOGGLE_SNAP_SHOT_MODE,
- INPUT_FUNCTION_SNAP_SHOT_ADVANCE,
- //INPUT_FUNCTION_DEBUG_OPTIONS_DIALOG,
- INPUT_FUNCTION_CNC,
- INPUT_FUNCTION_QUICKSAVE,
- // Menu
- INPUT_FUNCTION_MENU_TOGGLE,
- // In game EVA
- INPUT_FUNCTION_EVA_MISSION_OBJECTIVES_TOGGLE,
- INPUT_FUNCTION_RADIO_CMD_01,
- INPUT_FUNCTION_RADIO_CMD_02,
- INPUT_FUNCTION_RADIO_CMD_03,
- INPUT_FUNCTION_RADIO_CMD_04,
- INPUT_FUNCTION_RADIO_CMD_05,
- INPUT_FUNCTION_RADIO_CMD_06,
- INPUT_FUNCTION_RADIO_CMD_07,
- INPUT_FUNCTION_RADIO_CMD_08,
- INPUT_FUNCTION_RADIO_CMD_09,
- INPUT_FUNCTION_RADIO_CMD_10,
- INPUT_FUNCTION_RADIO_CMD_11,
- INPUT_FUNCTION_RADIO_CMD_12,
- INPUT_FUNCTION_RADIO_CMD_13,
- INPUT_FUNCTION_RADIO_CMD_14,
- INPUT_FUNCTION_RADIO_CMD_15,
- INPUT_FUNCTION_RADIO_CMD_16,
- INPUT_FUNCTION_RADIO_CMD_17,
- INPUT_FUNCTION_RADIO_CMD_18,
- INPUT_FUNCTION_RADIO_CMD_19,
- INPUT_FUNCTION_RADIO_CMD_20,
- INPUT_FUNCTION_RADIO_CMD_21,
- INPUT_FUNCTION_RADIO_CMD_22,
- INPUT_FUNCTION_RADIO_CMD_23,
- INPUT_FUNCTION_RADIO_CMD_24,
- INPUT_FUNCTION_RADIO_CMD_25,
- INPUT_FUNCTION_RADIO_CMD_26,
- INPUT_FUNCTION_RADIO_CMD_27,
- INPUT_FUNCTION_RADIO_CMD_28,
- INPUT_FUNCTION_RADIO_CMD_29,
- INPUT_FUNCTION_RADIO_CMD_30,
- INPUT_FUNCTION_TEAM_INFO_TOGGLE,
- INPUT_FUNCTION_BATTLE_INFO_TOGGLE,
- INPUT_FUNCTION_SERVER_INFO_TOGGLE,
- //INPUT_FUNCTION_VERBOSE_HELP_PAGE_UP,
- //INPUT_FUNCTION_VERBOSE_HELP_PAGE_DOWN,
- INPUT_FUNCTION_PROFILE_ENTER_CHILD0,
- INPUT_FUNCTION_PROFILE_ENTER_CHILD1,
- INPUT_FUNCTION_PROFILE_ENTER_CHILD2,
- INPUT_FUNCTION_PROFILE_ENTER_CHILD3,
- INPUT_FUNCTION_PROFILE_ENTER_CHILD4,
- INPUT_FUNCTION_PROFILE_ENTER_CHILD5,
- INPUT_FUNCTION_PROFILE_ENTER_CHILD6,
- INPUT_FUNCTION_PROFILE_ENTER_CHILD7,
- INPUT_FUNCTION_PROFILE_ENTER_CHILD8,
- INPUT_FUNCTION_PROFILE_ENTER_CHILD9,
- INPUT_FUNCTION_PROFILE_ENTER_PARENT,
- INPUT_FUNCTION_PROFILE_RESET,
- INPUT_FUNCTION_COUNT
- } InputFunction;
- class InputFunctionMode;
- class InputFunctionModeState;
- /*
- **
- */
- class Input {
- public:
- static void Init( bool use_dinput = true );
- static void Shutdown( void );
- static void Update( void );
- static void Flush( void );
- // Registry
- static void Load_Registry( const char * key );
- static void Save_Registry( const char * key );
- // Mouse
- static float Get_Mouse_Sensitivity( void );
- static void Set_Mouse_Sensitivity( float mouse_sensitivity );
- static bool Get_Mouse_Invert( void );
- static void Set_Mouse_Invert( bool invert );
- static bool Get_Mouse_2D_Invert( void );
- static void Set_Mouse_2D_Invert( bool invert );
- // Menu Mode
- static void Menu_Enable( bool onoff ) { MenuMode = onoff; }
- // Console Mode
- static void Console_Enable() { ConsoleMode = true; Flush_Queue(); }
- static void Console_Disable() { ConsoleMode = false; }
- static int Console_Get_Key();
- static void Console_Add_Key( int key );
- static bool Is_Console_Enabled( void ) { return ConsoleMode; }
- static void Flush_Queue() { QueueHead = QueueTail = QueueSize = 0; }
- // Get States
- static float Get_Amount( InputFunction function );
- static bool Get_State( InputFunction function ) { return (MenuMode || ConsoleMode) ? false : Peek_State (function); }
- static bool Peek_State( InputFunction function ) { return (FunctionValue[ function ] > 0.5f); }
- // Direct access
- static bool Is_Button_Down (int button_id);
- // Key name access
- static void Get_Translated_Key_Name (int dik_id, WideStringClass &name);
- enum {
- QUEUE_MAX = 20,
- /*
- ** Sliders
- */
- FIRST_SLIDER = 0x7000,
- SLIDER_MOUSE_LEFT = FIRST_SLIDER,
- SLIDER_MOUSE_RIGHT,
- SLIDER_MOUSE_UP,
- SLIDER_MOUSE_DOWN,
- SLIDER_MOUSE_WHEEL_FORWARD,
- SLIDER_MOUSE_WHEEL_BACKWARD,
- SLIDER_JOYSTICK_LEFT,
- SLIDER_JOYSTICK_RIGHT,
- SLIDER_JOYSTICK_UP,
- SLIDER_JOYSTICK_DOWN,
- LAST_SLIDER_PLUS_ONE,
- NUM_SLIDERS = LAST_SLIDER_PLUS_ONE - FIRST_SLIDER
- };
- //
- // Configuration editing support
- //
- static int Get_Primary_Key_For_Function (int function_id);
- static int Get_Secondary_Key_For_Function (int function_id);
- static void Set_Primary_Key_For_Function (int function_id, int key_id);
- static void Set_Secondary_Key_For_Function (int function_id, int key_id);
- static int Find_First_Function_By_Primary_Key (int key_id);
- static int Find_Next_Function_By_Primary_Key (int function_id, int key_id);
- static int Find_First_Function_By_Secondary_Key (int key_id);
- static int Find_Next_Function_By_Secondary_Key (int function_id, int key_id);
- static void Load_Configuration (const char *filename);
- static void Save_Configuration (const char *filename);
- //
- // Misc key settings
- //
- static void Enable_Damage_Indicators (bool onoff) { DamageIndicatorsEnabled = onoff; }
- static bool Are_Damage_Indicators_Enabled (void) { return DamageIndicatorsEnabled; }
- private:
- //
- // Internal methods
- //
- static void Update_Sliders( void );
- //
- // Private member data
- //
- static float Sliders[ NUM_SLIDERS ];
- static bool ConsoleMode;
- static bool MenuMode;
- static int Queue[ QUEUE_MAX ];
- static int QueueHead;
- static int QueueTail;
- static int QueueSize;
- static bool DamageIndicatorsEnabled;
- static float FunctionValue[ INPUT_FUNCTION_COUNT ];
- static float FunctionClamp[ INPUT_FUNCTION_COUNT ];
- static int FunctionPrimaryKeys[ INPUT_FUNCTION_COUNT ];
- static int FunctionSecondaryKeys[ INPUT_FUNCTION_COUNT ];
- static bool UsingDirectInput;
- static void Save_Accelerated_Keys (INIClass *input_ini);
- static void Load_Accelerated_Keys (INIClass *input_ini);
- static void Load_Accelerated_Key (INIClass *input_ini, const char *section_name);
- static void Load_Misc_Settings (INIClass *input_ini);
- static void Save_Misc_Settings (INIClass *input_ini);
- static void Free_Mappings( void );
- static float Get_Value( int function_index, int input, float clamp );
- static short Get_Function( const char *name );
- static short Get_Key( const char *name );
- static const char * Get_Key_Name (short key_id);
- };
- inline float Input::Get_Amount( InputFunction function )
- {
- WWASSERT(WWMath::Is_Valid_Float(FunctionValue[ function ]));
- return ((MenuMode || ConsoleMode) ? 0 : FunctionValue[ function ]);
- }
- #endif
|