169 lines
4.2 KiB
C++
169 lines
4.2 KiB
C++
#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(" ");
|
|
}
|
|
}
|