mirror of
https://github.com/ddnet/ddnet.git
synced 2024-11-09 09:38:19 +00:00
Add CBindSlot
as return value for GetBindSlot
function
This commit is contained in:
parent
b28bac89d4
commit
d2222f55e7
|
@ -282,10 +282,9 @@ void CBinds::ConBind(IConsole::IResult *pResult, void *pUserData)
|
||||||
{
|
{
|
||||||
CBinds *pBinds = (CBinds *)pUserData;
|
CBinds *pBinds = (CBinds *)pUserData;
|
||||||
const char *pBindStr = pResult->GetString(0);
|
const char *pBindStr = pResult->GetString(0);
|
||||||
int Modifier;
|
const CBindSlot BindSlot = pBinds->GetBindSlot(pBindStr);
|
||||||
int KeyId = pBinds->GetBindSlot(pBindStr, &Modifier);
|
|
||||||
|
|
||||||
if(!KeyId)
|
if(!BindSlot.m_Key)
|
||||||
{
|
{
|
||||||
char aBuf[256];
|
char aBuf[256];
|
||||||
str_format(aBuf, sizeof(aBuf), "key %s not found", pBindStr);
|
str_format(aBuf, sizeof(aBuf), "key %s not found", pBindStr);
|
||||||
|
@ -298,16 +297,16 @@ void CBinds::ConBind(IConsole::IResult *pResult, void *pUserData)
|
||||||
char aBuf[256];
|
char aBuf[256];
|
||||||
const char *pKeyName = pResult->GetString(0);
|
const char *pKeyName = pResult->GetString(0);
|
||||||
|
|
||||||
if(!pBinds->m_aapKeyBindings[Modifier][KeyId])
|
if(!pBinds->m_aapKeyBindings[BindSlot.m_ModifierMask][BindSlot.m_Key])
|
||||||
str_format(aBuf, sizeof(aBuf), "%s (%d) is not bound", pKeyName, KeyId);
|
str_format(aBuf, sizeof(aBuf), "%s (%d) is not bound", pKeyName, BindSlot.m_Key);
|
||||||
else
|
else
|
||||||
str_format(aBuf, sizeof(aBuf), "%s (%d) = %s", pKeyName, KeyId, pBinds->m_aapKeyBindings[Modifier][KeyId]);
|
str_format(aBuf, sizeof(aBuf), "%s (%d) = %s", pKeyName, BindSlot.m_Key, pBinds->m_aapKeyBindings[BindSlot.m_ModifierMask][BindSlot.m_Key]);
|
||||||
|
|
||||||
pBinds->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "binds", aBuf, gs_BindPrintColor);
|
pBinds->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "binds", aBuf, gs_BindPrintColor);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
pBinds->Bind(KeyId, pResult->GetString(1), false, Modifier);
|
pBinds->Bind(BindSlot.m_Key, pResult->GetString(1), false, BindSlot.m_ModifierMask);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CBinds::ConBinds(IConsole::IResult *pResult, void *pUserData)
|
void CBinds::ConBinds(IConsole::IResult *pResult, void *pUserData)
|
||||||
|
@ -317,20 +316,18 @@ void CBinds::ConBinds(IConsole::IResult *pResult, void *pUserData)
|
||||||
{
|
{
|
||||||
char aBuf[256];
|
char aBuf[256];
|
||||||
const char *pKeyName = pResult->GetString(0);
|
const char *pKeyName = pResult->GetString(0);
|
||||||
|
const CBindSlot BindSlot = pBinds->GetBindSlot(pKeyName);
|
||||||
int Modifier;
|
if(!BindSlot.m_Key)
|
||||||
int KeyId = pBinds->GetBindSlot(pKeyName, &Modifier);
|
|
||||||
if(!KeyId)
|
|
||||||
{
|
{
|
||||||
str_format(aBuf, sizeof(aBuf), "key '%s' not found", pKeyName);
|
str_format(aBuf, sizeof(aBuf), "key '%s' not found", pKeyName);
|
||||||
pBinds->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "binds", aBuf, gs_BindPrintColor);
|
pBinds->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "binds", aBuf, gs_BindPrintColor);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if(!pBinds->m_aapKeyBindings[Modifier][KeyId])
|
if(!pBinds->m_aapKeyBindings[BindSlot.m_ModifierMask][BindSlot.m_Key])
|
||||||
str_format(aBuf, sizeof(aBuf), "%s (%d) is not bound", pKeyName, KeyId);
|
str_format(aBuf, sizeof(aBuf), "%s (%d) is not bound", pKeyName, BindSlot.m_Key);
|
||||||
else
|
else
|
||||||
str_format(aBuf, sizeof(aBuf), "%s (%d) = %s", pKeyName, KeyId, pBinds->m_aapKeyBindings[Modifier][KeyId]);
|
str_format(aBuf, sizeof(aBuf), "%s (%d) = %s", pKeyName, BindSlot.m_Key, pBinds->m_aapKeyBindings[BindSlot.m_ModifierMask][BindSlot.m_Key]);
|
||||||
|
|
||||||
pBinds->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "binds", aBuf, gs_BindPrintColor);
|
pBinds->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "binds", aBuf, gs_BindPrintColor);
|
||||||
}
|
}
|
||||||
|
@ -356,10 +353,9 @@ void CBinds::ConUnbind(IConsole::IResult *pResult, void *pUserData)
|
||||||
{
|
{
|
||||||
CBinds *pBinds = (CBinds *)pUserData;
|
CBinds *pBinds = (CBinds *)pUserData;
|
||||||
const char *pKeyName = pResult->GetString(0);
|
const char *pKeyName = pResult->GetString(0);
|
||||||
int Modifier;
|
const CBindSlot BindSlot = pBinds->GetBindSlot(pKeyName);
|
||||||
int KeyId = pBinds->GetBindSlot(pKeyName, &Modifier);
|
|
||||||
|
|
||||||
if(!KeyId)
|
if(!BindSlot.m_Key)
|
||||||
{
|
{
|
||||||
char aBuf[256];
|
char aBuf[256];
|
||||||
str_format(aBuf, sizeof(aBuf), "key %s not found", pKeyName);
|
str_format(aBuf, sizeof(aBuf), "key %s not found", pKeyName);
|
||||||
|
@ -367,7 +363,7 @@ void CBinds::ConUnbind(IConsole::IResult *pResult, void *pUserData)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
pBinds->Bind(KeyId, "", false, Modifier);
|
pBinds->Bind(BindSlot.m_Key, "", false, BindSlot.m_ModifierMask);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CBinds::ConUnbindAll(IConsole::IResult *pResult, void *pUserData)
|
void CBinds::ConUnbindAll(IConsole::IResult *pResult, void *pUserData)
|
||||||
|
@ -376,31 +372,31 @@ void CBinds::ConUnbindAll(IConsole::IResult *pResult, void *pUserData)
|
||||||
pBinds->UnbindAll();
|
pBinds->UnbindAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
int CBinds::GetBindSlot(const char *pBindString, int *pModifierCombination)
|
CBinds::CBindSlot CBinds::GetBindSlot(const char *pBindString) const
|
||||||
{
|
{
|
||||||
*pModifierCombination = MODIFIER_NONE;
|
int ModifierMask = MODIFIER_NONE;
|
||||||
char aMod[32];
|
char aMod[32];
|
||||||
aMod[0] = '\0';
|
aMod[0] = '\0';
|
||||||
const char *pKey = str_next_token(pBindString, "+", aMod, sizeof(aMod));
|
const char *pKey = str_next_token(pBindString, "+", aMod, sizeof(aMod));
|
||||||
while(aMod[0] && *(pKey))
|
while(aMod[0] && *(pKey))
|
||||||
{
|
{
|
||||||
if(!str_comp_nocase(aMod, "shift"))
|
if(!str_comp_nocase(aMod, "shift"))
|
||||||
*pModifierCombination |= (1 << MODIFIER_SHIFT);
|
ModifierMask |= (1 << MODIFIER_SHIFT);
|
||||||
else if(!str_comp_nocase(aMod, "ctrl"))
|
else if(!str_comp_nocase(aMod, "ctrl"))
|
||||||
*pModifierCombination |= (1 << MODIFIER_CTRL);
|
ModifierMask |= (1 << MODIFIER_CTRL);
|
||||||
else if(!str_comp_nocase(aMod, "alt"))
|
else if(!str_comp_nocase(aMod, "alt"))
|
||||||
*pModifierCombination |= (1 << MODIFIER_ALT);
|
ModifierMask |= (1 << MODIFIER_ALT);
|
||||||
else if(!str_comp_nocase(aMod, "gui"))
|
else if(!str_comp_nocase(aMod, "gui"))
|
||||||
*pModifierCombination |= (1 << MODIFIER_GUI);
|
ModifierMask |= (1 << MODIFIER_GUI);
|
||||||
else
|
else
|
||||||
return 0;
|
return {KEY_UNKNOWN, MODIFIER_NONE};
|
||||||
|
|
||||||
if(str_find(pKey + 1, "+"))
|
if(str_find(pKey + 1, "+"))
|
||||||
pKey = str_next_token(pKey + 1, "+", aMod, sizeof(aMod));
|
pKey = str_next_token(pKey + 1, "+", aMod, sizeof(aMod));
|
||||||
else
|
else
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return Input()->FindKeyByName(*pModifierCombination == MODIFIER_NONE ? aMod : pKey + 1);
|
return {Input()->FindKeyByName(ModifierMask == MODIFIER_NONE ? aMod : pKey + 1), ModifierMask};
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *CBinds::GetModifierName(int Modifier)
|
const char *CBinds::GetModifierName(int Modifier)
|
||||||
|
|
|
@ -20,6 +20,20 @@ class CBinds : public CComponent
|
||||||
|
|
||||||
static void ConfigSaveCallback(IConfigManager *pConfigManager, void *pUserData);
|
static void ConfigSaveCallback(IConfigManager *pConfigManager, void *pUserData);
|
||||||
|
|
||||||
|
class CBindSlot
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
int m_Key;
|
||||||
|
int m_ModifierMask;
|
||||||
|
|
||||||
|
CBindSlot(int Key, int ModifierMask) :
|
||||||
|
m_Key(Key),
|
||||||
|
m_ModifierMask(ModifierMask)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
};
|
||||||
|
CBindSlot GetBindSlot(const char *pBindString) const;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CBinds();
|
CBinds();
|
||||||
~CBinds();
|
~CBinds();
|
||||||
|
@ -53,7 +67,6 @@ public:
|
||||||
void UnbindAll();
|
void UnbindAll();
|
||||||
const char *Get(int KeyId, int ModifierCombination);
|
const char *Get(int KeyId, int ModifierCombination);
|
||||||
void GetKey(const char *pBindStr, char *pBuf, size_t BufSize);
|
void GetKey(const char *pBindStr, char *pBuf, size_t BufSize);
|
||||||
int GetBindSlot(const char *pBindString, int *pModifierCombination);
|
|
||||||
static int GetModifierMask(IInput *pInput);
|
static int GetModifierMask(IInput *pInput);
|
||||||
static int GetModifierMaskOfKey(int Key);
|
static int GetModifierMaskOfKey(int Key);
|
||||||
static const char *GetModifierName(int Modifier);
|
static const char *GetModifierName(int Modifier);
|
||||||
|
|
Loading…
Reference in a new issue