summaryrefslogtreecommitdiff
path: root/tier2/keybindings.cpp
diff options
context:
space:
mode:
authorFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
committerFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
commit3bf9df6b2785fa6d951086978a3e66f49427166a (patch)
tree2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /tier2/keybindings.cpp
downloadarchived-source-engine-2018-hl2-src-master.tar.xz
archived-source-engine-2018-hl2-src-master.zip
Diffstat (limited to 'tier2/keybindings.cpp')
-rw-r--r--tier2/keybindings.cpp143
1 files changed, 143 insertions, 0 deletions
diff --git a/tier2/keybindings.cpp b/tier2/keybindings.cpp
new file mode 100644
index 0000000..d2c9257
--- /dev/null
+++ b/tier2/keybindings.cpp
@@ -0,0 +1,143 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+// $NoKeywords: $
+//
+//===========================================================================//
+
+#include "tier2/keybindings.h"
+#include "tier2/tier2.h"
+#include "inputsystem/iinputsystem.h"
+#include "tier1/utlbuffer.h"
+
+// memdbgon must be the last include file in a .cpp file!!!
+#include "tier0/memdbgon.h"
+
+
+
+//-----------------------------------------------------------------------------
+// Set a key binding
+//-----------------------------------------------------------------------------
+void CKeyBindings::SetBinding( ButtonCode_t code, const char *pBinding )
+{
+ if ( code == BUTTON_CODE_INVALID || code == KEY_NONE )
+ return;
+
+ // free old bindings
+ if ( !m_KeyInfo[code].IsEmpty() )
+ {
+ // Exactly the same, don't re-bind and fragment memory
+ if ( !Q_stricmp( m_KeyInfo[code], pBinding ) )
+ return;
+ }
+
+ // allocate memory for new binding
+ m_KeyInfo[code] = pBinding;
+}
+
+void CKeyBindings::SetBinding( const char *pButtonName, const char *pBinding )
+{
+ ButtonCode_t code = g_pInputSystem->StringToButtonCode( pButtonName );
+ SetBinding( code, pBinding );
+}
+
+void CKeyBindings::Unbind( ButtonCode_t code )
+{
+ if ( code != KEY_NONE && code != BUTTON_CODE_INVALID )
+ {
+ m_KeyInfo[code] = "";
+ }
+}
+
+void CKeyBindings::Unbind( const char *pButtonName )
+{
+ ButtonCode_t code = g_pInputSystem->StringToButtonCode( pButtonName );
+ Unbind( code );
+}
+
+void CKeyBindings::UnbindAll()
+{
+ for ( int i = 0; i < BUTTON_CODE_LAST; i++ )
+ {
+ m_KeyInfo[i] = "";
+ }
+}
+
+
+//-----------------------------------------------------------------------------
+// Count number of lines of bindings we'll be writing
+//-----------------------------------------------------------------------------
+int CKeyBindings::GetBindingCount( ) const
+{
+ int nCount = 0;
+ for ( int i = 0; i < BUTTON_CODE_LAST; i++ )
+ {
+ if ( !m_KeyInfo[i].IsEmpty() )
+ {
+ nCount++;
+ }
+ }
+
+ return nCount;
+}
+
+
+//-----------------------------------------------------------------------------
+// Writes lines containing "bind key value"
+//-----------------------------------------------------------------------------
+void CKeyBindings::WriteBindings( CUtlBuffer &buf )
+{
+ for ( int i = 0; i < BUTTON_CODE_LAST; i++ )
+ {
+ if ( !m_KeyInfo[i].IsEmpty() )
+ {
+ const char *pButtonCode = g_pInputSystem->ButtonCodeToString( (ButtonCode_t)i );
+ buf.Printf( "bind \"%s\" \"%s\"\n", pButtonCode, m_KeyInfo[i].Get() );
+ }
+ }
+}
+
+
+//-----------------------------------------------------------------------------
+// Returns the keyname to which a binding string is bound. E.g., if
+// TAB is bound to +use then searching for +use will return "TAB"
+//-----------------------------------------------------------------------------
+const char *CKeyBindings::ButtonNameForBinding( const char *pBinding )
+{
+ const char *pBind = pBinding;
+ if ( pBinding[0] == '+' )
+ {
+ ++pBind;
+ }
+
+ for ( int i = 0; i < BUTTON_CODE_LAST; i++ )
+ {
+ if ( m_KeyInfo[i].IsEmpty() )
+ continue;
+
+ if ( m_KeyInfo[i][0] == '+' )
+ {
+ if ( !Q_stricmp( &m_KeyInfo[i].Get()[1], pBind ) )
+ return g_pInputSystem->ButtonCodeToString( (ButtonCode_t)i );
+ }
+ else
+ {
+ if ( !Q_stricmp( m_KeyInfo[i], pBind ) )
+ return g_pInputSystem->ButtonCodeToString( (ButtonCode_t)i );
+ }
+ }
+
+ return NULL;
+}
+
+const char *CKeyBindings::GetBindingForButton( ButtonCode_t code )
+{
+ if ( m_KeyInfo[code].IsEmpty() )
+ return NULL;
+
+ return m_KeyInfo[ code ];
+}
+
+
+