Files
funnygame/game/client/userinput.cpp
2026-03-06 01:43:48 +02:00

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(" ");
}
}