added keybinds
This commit is contained in:
168
game/client/userinput.cpp
Normal file
168
game/client/userinput.cpp
Normal file
@@ -0,0 +1,168 @@
|
||||
#include "userinput.h"
|
||||
#include "tier1/utlstring.h"
|
||||
#include "game.h"
|
||||
|
||||
class CFunnyInput: public IHumanDeviceInput
|
||||
{
|
||||
public:
|
||||
virtual EInputType GetInputType() override { return k_EInput_Game; };
|
||||
|
||||
virtual void OnGameButton( EInputDeviceType eDevice, EInputButton eScancode, bool bIsPressed ) override;
|
||||
virtual void OnGameAxis( EInputDeviceType eDevice, EInputAxis eAxis, float fValue) override;
|
||||
virtual void OnGameAxisDiff( EInputDeviceType eDevice, EInputAxis eAxis, float fValue ) override;
|
||||
|
||||
virtual void OnButton( EInputDeviceType eDevice, EInputButton eScancode, bool bIsPressed ) override {};
|
||||
virtual void OnAxis( EInputDeviceType eDevice, EInputAxis eAxis, float fValue) override {};
|
||||
virtual void OnAxisDiff( EInputDeviceType eDevice, EInputAxis eAxis, float fValue ) override {};
|
||||
|
||||
virtual void OnTextWriteUTF8( uint32_t uCode ) override {};
|
||||
|
||||
CUtlString m_aszBindings[k_EInputButton_Count];
|
||||
};
|
||||
|
||||
static CFunnyInput s_mainInput;
|
||||
IHumanDeviceInput *g_pMainInput = &s_mainInput;
|
||||
|
||||
void CFunnyInput::OnGameButton( EInputDeviceType eDevice, EInputButton eScancode, bool bIsPressed )
|
||||
{
|
||||
if (bIsPressed)
|
||||
{
|
||||
Console()->AddCommand(m_aszBindings[eScancode]);
|
||||
Console()->AddCommand("\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
auto binding = Console()->ParseCommandLine(m_aszBindings[eScancode]);
|
||||
if (binding.GetSize()==0)
|
||||
return;
|
||||
if (binding[0].GetSize() == 0)
|
||||
return;
|
||||
if (binding[0][0].GetString()[0] == '+')
|
||||
{
|
||||
CUtlString &command = binding[0][0];
|
||||
command.GetString()[0] = '-';
|
||||
}
|
||||
Console()->AddCommand(binding[0][0]);
|
||||
Console()->AddCommand("\n");
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
void CFunnyInput::OnGameAxis( EInputDeviceType eDevice, EInputAxis eAxis, float fValue)
|
||||
{
|
||||
|
||||
}
|
||||
void CFunnyInput::OnGameAxisDiff( EInputDeviceType eDevice, EInputAxis eAxis, float fValue )
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
struct KeyName_t {
|
||||
const char *szName;
|
||||
EInputButton eKey;
|
||||
};
|
||||
|
||||
static KeyName_t s_keys[] = {
|
||||
|
||||
{"ESCAPE",k_EInputButton_ESCAPE},
|
||||
{"ESC",k_EInputButton_ESCAPE},
|
||||
{"TAB",k_EInputButton_TAB},
|
||||
{"ENTER",k_EInputButton_ENTER},
|
||||
{"CTRL",k_EInputButton_CONTROL},
|
||||
{"CONTROL",k_EInputButton_CONTROL},
|
||||
{"SHIFT",k_EInputButton_SHIFT},
|
||||
{"ALT",k_EInputButton_ALT},
|
||||
{"SPACE",k_EInputButton_SPACE},
|
||||
|
||||
{"BACKSPACE",k_EInputButton_BACKSPACE},
|
||||
{"[",k_EInputButton_LBRACKET},
|
||||
{"]",k_EInputButton_RBRACKET},
|
||||
{"{",k_EInputButton_LBRACKET},
|
||||
{"}",k_EInputButton_RBRACKET},
|
||||
{"\\",k_EInputButton_BACKSLASH},
|
||||
{";",k_EInputButton_SEMICOLON},
|
||||
{":",k_EInputButton_SEMICOLON},
|
||||
{"\'",k_EInputButton_APOSTROPHE},
|
||||
{"\"",k_EInputButton_APOSTROPHE},
|
||||
|
||||
{"F1",k_EInputButton_F1},
|
||||
{"F2",k_EInputButton_F2},
|
||||
{"F3",k_EInputButton_F3},
|
||||
{"F4",k_EInputButton_F4},
|
||||
{"F5",k_EInputButton_F5},
|
||||
{"F6",k_EInputButton_F6},
|
||||
{"F7",k_EInputButton_F7},
|
||||
{"F8",k_EInputButton_F8},
|
||||
{"F9",k_EInputButton_F9},
|
||||
{"F10",k_EInputButton_F10},
|
||||
{"F11",k_EInputButton_F11},
|
||||
{"F12",k_EInputButton_F12},
|
||||
|
||||
{"1",k_EInputButton_1},
|
||||
{"2",k_EInputButton_2},
|
||||
{"3",k_EInputButton_3},
|
||||
{"4",k_EInputButton_4},
|
||||
{"5",k_EInputButton_5},
|
||||
{"6",k_EInputButton_6},
|
||||
{"7",k_EInputButton_7},
|
||||
{"8",k_EInputButton_8},
|
||||
{"9",k_EInputButton_9},
|
||||
{"0",k_EInputButton_0},
|
||||
|
||||
{"A",k_EInputButton_A},
|
||||
{"B",k_EInputButton_B},
|
||||
{"C",k_EInputButton_C},
|
||||
{"D",k_EInputButton_D},
|
||||
{"E",k_EInputButton_E},
|
||||
{"F",k_EInputButton_F},
|
||||
{"G",k_EInputButton_G},
|
||||
{"H",k_EInputButton_H},
|
||||
{"I",k_EInputButton_I},
|
||||
{"J",k_EInputButton_J},
|
||||
{"K",k_EInputButton_K},
|
||||
{"L",k_EInputButton_L},
|
||||
{"M",k_EInputButton_M},
|
||||
{"N",k_EInputButton_N},
|
||||
{"O",k_EInputButton_O},
|
||||
{"P",k_EInputButton_P},
|
||||
{"Q",k_EInputButton_Q},
|
||||
{"R",k_EInputButton_R},
|
||||
{"S",k_EInputButton_S},
|
||||
{"T",k_EInputButton_T},
|
||||
{"U",k_EInputButton_U},
|
||||
{"V",k_EInputButton_V},
|
||||
{"W",k_EInputButton_W},
|
||||
{"X",k_EInputButton_X},
|
||||
{"Y",k_EInputButton_Y},
|
||||
{"Z",k_EInputButton_Z},
|
||||
};
|
||||
|
||||
static EInputButton GetStringAsKey( char *psz )
|
||||
{
|
||||
for (uint32_t i = 0; i<sizeof(s_keys)/sizeof(KeyName_t); i++)
|
||||
{
|
||||
if (!V_stricmp(s_keys[i].szName, psz))
|
||||
return s_keys[i].eKey;
|
||||
};
|
||||
return k_EInputButton_NONE;
|
||||
};
|
||||
|
||||
CON_COMMAND(bind, "Allows to run a command when button is pressed")
|
||||
{
|
||||
if (c == 1)
|
||||
return;
|
||||
if (c == 2)
|
||||
return;
|
||||
EInputButton key = GetStringAsKey(v[1]);
|
||||
if (key == k_EInputButton_NONE)
|
||||
return;
|
||||
|
||||
s_mainInput.m_aszBindings[key] = 0;
|
||||
for ( int i = 2; i<c; i++ )
|
||||
{
|
||||
s_mainInput.m_aszBindings[key].AppendTail(v[i]);
|
||||
s_mainInput.m_aszBindings[key].AppendTail(" ");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user