runtime fixes (Editor running)

Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com>
monroegm-disable-blank-issue-2
Esteban Papp 4 years ago
parent 6d79f1beee
commit 4358b6eb27

@ -562,15 +562,15 @@ static void OnVariableUpdated([[maybe_unused]] int row, ICVar* pCVar)
static CVarBlock* VarBlockFromConsoleVars() static CVarBlock* VarBlockFromConsoleVars()
{ {
IConsole* console = GetIEditor()->GetSystem()->GetIConsole(); IConsole* console = GetIEditor()->GetSystem()->GetIConsole();
std::vector<const char*> cmds; AZStd::vector<AZStd::string_view> cmds;
cmds.resize(console->GetNumVars()); cmds.resize(console->GetNumVars());
size_t cmdCount = console->GetSortedVars(&cmds[0], cmds.size()); size_t cmdCount = console->GetSortedVars(cmds);
CVarBlock* vb = new CVarBlock; CVarBlock* vb = new CVarBlock;
IVariable* pVariable = 0; IVariable* pVariable = 0;
for (int i = 0; i < cmdCount; i++) for (int i = 0; i < cmdCount; i++)
{ {
ICVar* pCVar = console->GetCVar(cmds[i]); ICVar* pCVar = console->GetCVar(cmds[i].data());
if (!pCVar) if (!pCVar)
{ {
continue; continue;
@ -602,7 +602,7 @@ static CVarBlock* VarBlockFromConsoleVars()
pCVar->AddOnChangeFunctor(onChange); pCVar->AddOnChangeFunctor(onChange);
pVariable->SetDescription(pCVar->GetHelp()); pVariable->SetDescription(pCVar->GetHelp());
pVariable->SetName(cmds[i]); pVariable->SetName(cmds[i].data());
// Transfer the custom limits have they have been set for this variable // Transfer the custom limits have they have been set for this variable
if (pCVar->HasCustomLimits()) if (pCVar->HasCustomLimits())

@ -68,12 +68,12 @@ void CQuickAccessBar::OnInitDialog()
// Add console variables & commands. // Add console variables & commands.
IConsole* console = GetIEditor()->GetSystem()->GetIConsole(); IConsole* console = GetIEditor()->GetSystem()->GetIConsole();
std::vector<const char*> cmds; AZStd::vector<AZStd::string_view> cmds;
cmds.resize(console->GetNumVars()); cmds.resize(console->GetNumVars());
size_t cmdCount = console->GetSortedVars(&cmds[0], cmds.size()); size_t cmdCount = console->GetSortedVars(cmds);
for (int i = 0; i < cmdCount; ++i) for (int i = 0; i < cmdCount; ++i)
{ {
m_model->setStringList(m_model->stringList() += cmds[i]); m_model->setStringList(m_model->stringList() += cmds[i].data());
} }
} }

@ -607,7 +607,7 @@ void CSettingsManager::SerializeCVars(XmlNodeRef& node, bool bLoad)
int nCurrentVariable(0); int nCurrentVariable(0);
IConsole* piConsole(NULL); IConsole* piConsole(NULL);
ICVar* piVariable(NULL); ICVar* piVariable(NULL);
std::vector<char*> cszVariableNames; AZStd::vector<AZStd::string_view> cszVariableNames;
char* szKey(NULL); char* szKey(NULL);
char* szValue(NULL); char* szValue(NULL);
@ -662,7 +662,7 @@ void CSettingsManager::SerializeCVars(XmlNodeRef& node, bool bLoad)
nNumberOfVariables = piConsole->GetNumVisibleVars(); nNumberOfVariables = piConsole->GetNumVisibleVars();
cszVariableNames.resize(nNumberOfVariables, NULL); cszVariableNames.resize(nNumberOfVariables, NULL);
if (piConsole->GetSortedVars((const char**)&cszVariableNames.front(), nNumberOfVariables, NULL) != nNumberOfVariables) if (piConsole->GetSortedVars(cszVariableNames, NULL) != nNumberOfVariables)
{ {
assert(false); assert(false);
return; return;
@ -670,12 +670,12 @@ void CSettingsManager::SerializeCVars(XmlNodeRef& node, bool bLoad)
for (nCurrentVariable = 0; nCurrentVariable < cszVariableNames.size(); ++nCurrentVariable) for (nCurrentVariable = 0; nCurrentVariable < cszVariableNames.size(); ++nCurrentVariable)
{ {
if (_stricmp(cszVariableNames[nCurrentVariable], "_TestFormatMessage") == 0) if (_stricmp(cszVariableNames[nCurrentVariable].data(), "_TestFormatMessage") == 0)
{ {
continue; continue;
} }
piVariable = piConsole->GetCVar(cszVariableNames[nCurrentVariable]); piVariable = piConsole->GetCVar(cszVariableNames[nCurrentVariable].data());
if (!piVariable) if (!piVariable)
{ {
assert(false); assert(false);
@ -683,7 +683,7 @@ void CSettingsManager::SerializeCVars(XmlNodeRef& node, bool bLoad)
} }
newCVarNode = XmlHelpers::CreateXmlNode(CVAR_NODE); newCVarNode = XmlHelpers::CreateXmlNode(CVAR_NODE);
newCVarNode->setAttr(cszVariableNames[nCurrentVariable], piVariable->GetString()); newCVarNode->setAttr(cszVariableNames[nCurrentVariable].data(), piVariable->GetString());
cvarsNode->addChild(newCVarNode); cvarsNode->addChild(newCVarNode);
} }

@ -818,12 +818,12 @@ void CToolsConfigPage::FillConsoleCmds()
{ {
QStringList commands; QStringList commands;
IConsole* console = GetIEditor()->GetSystem()->GetIConsole(); IConsole* console = GetIEditor()->GetSystem()->GetIConsole();
std::vector<const char*> cmds; AZStd::vector<AZStd::string_view> cmds;
cmds.resize(console->GetNumVars()); cmds.resize(console->GetNumVars());
size_t cmdCount = console->GetSortedVars(&cmds[0], cmds.size()); size_t cmdCount = console->GetSortedVars(cmds);
for (int i = 0; i < cmdCount; ++i) for (int i = 0; i < cmdCount; ++i)
{ {
commands.push_back(cmds[i]); commands.push_back(cmds[i].data());
} }
m_completionModel->setStringList(commands); m_completionModel->setStringList(commands);
} }

@ -426,7 +426,7 @@ struct IConsole
// szPrefix - 0 or prefix e.g. "sys_spec_" // szPrefix - 0 or prefix e.g. "sys_spec_"
// Return // Return
// used size // used size
virtual size_t GetSortedVars(const char** pszArray, size_t numItems, const char* szPrefix = 0) = 0; virtual size_t GetSortedVars(AZStd::vector<AZStd::string_view>& pszArray, const char* szPrefix = 0) = 0;
virtual const char* AutoComplete(const char* substr) = 0; virtual const char* AutoComplete(const char* substr) = 0;
virtual const char* AutoCompletePrev(const char* substr) = 0; virtual const char* AutoCompletePrev(const char* substr) = 0;
virtual const char* ProcessCompletion(const char* szInputBuffer) = 0; virtual const char* ProcessCompletion(const char* szInputBuffer) = 0;

@ -56,7 +56,7 @@ public:
MOCK_METHOD0(IsOpened, bool ()); MOCK_METHOD0(IsOpened, bool ());
MOCK_METHOD0(GetNumVars, int()); MOCK_METHOD0(GetNumVars, int());
MOCK_METHOD0(GetNumVisibleVars, int()); MOCK_METHOD0(GetNumVisibleVars, int());
MOCK_METHOD3(GetSortedVars, size_t (const char** pszArray, size_t numItems, const char* szPrefix)); MOCK_METHOD2(GetSortedVars, size_t (AZStd::vector<AZStd::string_view>& pszArray, const char* szPrefix));
MOCK_METHOD1(AutoComplete, const char*(const char* substr)); MOCK_METHOD1(AutoComplete, const char*(const char* substr));
MOCK_METHOD1(AutoCompletePrev, const char*(const char* substr)); MOCK_METHOD1(AutoCompletePrev, const char*(const char* substr));
MOCK_METHOD1(ProcessCompletion, const char*(const char* szInputBuffer)); MOCK_METHOD1(ProcessCompletion, const char*(const char* szInputBuffer));

@ -84,35 +84,6 @@ inline int GetCharPrio(char x)
return x; return x;
} }
} }
// case sensitive
inline bool less_CVar(const AZStd::string& left, const AZStd::string& right)
{
AZStd::string_view leftView(left);
AZStd::string_view rightView(right);
for (;; )
{
uint32 l = GetCharPrio(leftView.front()), r = GetCharPrio(rightView.front());
if (l < r)
{
return true;
}
if (l > r)
{
return false;
}
if (leftView.front() == 0 || rightView.front() == 0)
{
break;
}
leftView.remove_prefix(1);
rightView.remove_prefix(1);
}
return false;
}
void Command_SetWaitSeconds(IConsoleCmdArgs* pCmd) void Command_SetWaitSeconds(IConsoleCmdArgs* pCmd)
{ {
@ -347,28 +318,6 @@ void CXConsole::Init(ISystem* pSystem)
con_restricted = 0; con_restricted = 0;
} }
// test cases -----------------------------------------------
assert(GetCVar("con_debug") != 0); // should be registered a few lines above
assert(GetCVar("Con_Debug") == GetCVar("con_debug")); // different case
// editor
assert(strcmp(AutoComplete("con_"), "con_debug") == 0);
assert(strcmp(AutoComplete("CON_"), "con_debug") == 0);
assert(strcmp(AutoComplete("con_debug"), "con_display_last_messages") == 0); // actually we should reconsider this behavior
assert(strcmp(AutoComplete("Con_Debug"), "con_display_last_messages") == 0); // actually we should reconsider this behavior
// game
assert(strcmp(ProcessCompletion("con_"), "con_debug ") == 0);
ResetAutoCompletion();
assert(strcmp(ProcessCompletion("CON_"), "con_debug ") == 0);
ResetAutoCompletion();
assert(strcmp(ProcessCompletion("con_debug"), "con_debug ") == 0);
ResetAutoCompletion();
assert(strcmp(ProcessCompletion("Con_Debug"), "con_debug ") == 0);
ResetAutoCompletion();
// ----------------------------------------------------------
m_nLoadingBackTexID = -1; m_nLoadingBackTexID = -1;
if (gEnv->IsDedicated()) if (gEnv->IsDedicated())
@ -2424,7 +2373,7 @@ const char* CXConsole::ProcessCompletion(const char* szInputBuffer)
if (!matches.empty()) if (!matches.empty())
{ {
std::sort(matches.begin(), matches.end(), less_CVar); // to sort commands with variables std::sort(matches.begin(), matches.end()); // to sort commands with variables
} }
if (showlist && !matches.empty()) if (showlist && !matches.empty())
{ {
@ -3181,7 +3130,7 @@ char* CXConsole::GetCheatVarAt(uint32 nOffset)
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
size_t CXConsole::GetSortedVars(const char** pszArray, size_t numItems, const char* szPrefix) size_t CXConsole::GetSortedVars(AZStd::vector<AZStd::string_view>& pszArray, const char* szPrefix)
{ {
size_t i = 0; size_t i = 0;
size_t iPrefixLen = szPrefix ? strlen(szPrefix) : 0; size_t iPrefixLen = szPrefix ? strlen(szPrefix) : 0;
@ -3191,7 +3140,7 @@ size_t CXConsole::GetSortedVars(const char** pszArray, size_t numItems, const ch
ConsoleVariablesMap::const_iterator it, end = m_mapVariables.end(); ConsoleVariablesMap::const_iterator it, end = m_mapVariables.end();
for (it = m_mapVariables.begin(); it != end; ++it) for (it = m_mapVariables.begin(); it != end; ++it)
{ {
if (pszArray && i >= numItems) if (i >= pszArray.size())
{ {
break; break;
} }
@ -3209,10 +3158,7 @@ size_t CXConsole::GetSortedVars(const char** pszArray, size_t numItems, const ch
continue; continue;
} }
if (pszArray)
{
pszArray[i] = it->first; pszArray[i] = it->first;
}
i++; i++;
} }
@ -3223,7 +3169,7 @@ size_t CXConsole::GetSortedVars(const char** pszArray, size_t numItems, const ch
ConsoleCommandsMap::iterator it, end = m_mapCommands.end(); ConsoleCommandsMap::iterator it, end = m_mapCommands.end();
for (it = m_mapCommands.begin(); it != end; ++it) for (it = m_mapCommands.begin(); it != end; ++it)
{ {
if (pszArray && i >= numItems) if (i >= pszArray.size())
{ {
break; break;
} }
@ -3241,18 +3187,15 @@ size_t CXConsole::GetSortedVars(const char** pszArray, size_t numItems, const ch
continue; continue;
} }
if (pszArray)
{
pszArray[i] = it->first.c_str(); pszArray[i] = it->first.c_str();
}
i++; i++;
} }
} }
if (i != 0 && pszArray) if (i != 0)
{ {
std::sort(pszArray, pszArray + i, less_CVar); std::sort(pszArray.begin(), pszArray.end());
} }
return i; return i;
@ -3261,22 +3204,22 @@ size_t CXConsole::GetSortedVars(const char** pszArray, size_t numItems, const ch
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
void CXConsole::FindVar(const char* substr) void CXConsole::FindVar(const char* substr)
{ {
std::vector<const char*> cmds; AZStd::vector<AZStd::string_view> cmds;
cmds.resize(GetNumVars() + m_mapCommands.size()); cmds.resize(GetNumVars() + m_mapCommands.size());
size_t cmdCount = GetSortedVars(&cmds[0], cmds.size()); size_t cmdCount = GetSortedVars(cmds);
for (size_t i = 0; i < cmdCount; i++) for (size_t i = 0; i < cmdCount; i++)
{ {
if (AZ::StringFunc::Find(cmds[i], substr) != AZStd::string::npos) if (AZ::StringFunc::Find(cmds[i], substr) != AZStd::string::npos)
{ {
ICVar* pCvar = gEnv->pConsole->GetCVar(cmds[i]); ICVar* pCvar = gEnv->pConsole->GetCVar(cmds[i].data());
if (pCvar) if (pCvar)
{ {
DisplayVarValue(pCvar); DisplayVarValue(pCvar);
} }
else else
{ {
ConsoleLogInputResponse(" $3%s $6(Command)", cmds[i]); ConsoleLogInputResponse(" $3%.*s $6(Command)", aznumeric_cast<int>(cmds[i].size()), cmds[i].data());
} }
} }
} }
@ -3287,22 +3230,22 @@ const char* CXConsole::AutoComplete(const char* substr)
{ {
// following code can be optimized // following code can be optimized
std::vector<const char*> cmds; AZStd::vector<AZStd::string_view> cmds;
cmds.resize(GetNumVars() + m_mapCommands.size()); cmds.resize(GetNumVars() + m_mapCommands.size());
size_t cmdCount = GetSortedVars(&cmds[0], cmds.size()); size_t cmdCount = GetSortedVars(cmds);
size_t substrLen = strlen(substr); size_t substrLen = strlen(substr);
// If substring is empty return first command. // If substring is empty return first command.
if (substrLen == 0 && cmdCount > 0) if (substrLen == 0 && cmdCount > 0)
{ {
return cmds[0]; return cmds[0].data();
} }
// find next // find next
for (size_t i = 0; i < cmdCount; i++) for (size_t i = 0; i < cmdCount; i++)
{ {
const char* szCmd = cmds[i]; const char* szCmd = cmds[i].data();
size_t cmdlen = strlen(szCmd); size_t cmdlen = strlen(szCmd);
if (cmdlen >= substrLen && memcmp(szCmd, substr, substrLen) == 0) if (cmdlen >= substrLen && memcmp(szCmd, substr, substrLen) == 0)
{ {
@ -3311,18 +3254,18 @@ const char* CXConsole::AutoComplete(const char* substr)
i++; i++;
if (i < cmdCount) if (i < cmdCount)
{ {
return cmds[i]; return cmds[i].data();
} }
return cmds[i - 1]; return cmds[i - 1].data();
} }
return cmds[i]; return cmds[i].data();
} }
} }
// then first matching case insensitive // then first matching case insensitive
for (size_t i = 0; i < cmdCount; i++) for (size_t i = 0; i < cmdCount; i++)
{ {
const char* szCmd = cmds[i]; const char* szCmd = cmds[i].data();
size_t cmdlen = strlen(szCmd); size_t cmdlen = strlen(szCmd);
if (cmdlen >= substrLen && azstrnicmp(szCmd, substr, substrLen) == 0) if (cmdlen >= substrLen && azstrnicmp(szCmd, substr, substrLen) == 0)
@ -3332,11 +3275,11 @@ const char* CXConsole::AutoComplete(const char* substr)
i++; i++;
if (i < cmdCount) if (i < cmdCount)
{ {
return cmds[i]; return cmds[i].data();
} }
return cmds[i - 1]; return cmds[i - 1].data();
} }
return cmds[i]; return cmds[i].data();
} }
} }
@ -3357,27 +3300,27 @@ void CXConsole::SetInputLine(const char* szLine)
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
const char* CXConsole::AutoCompletePrev(const char* substr) const char* CXConsole::AutoCompletePrev(const char* substr)
{ {
std::vector<const char*> cmds; AZStd::vector<AZStd::string_view> cmds;
cmds.resize(GetNumVars() + m_mapCommands.size()); cmds.resize(GetNumVars() + m_mapCommands.size());
size_t cmdCount = GetSortedVars(&cmds[0], cmds.size()); size_t cmdCount = GetSortedVars(cmds);
// If substring is empty return last command. // If substring is empty return last command.
if (strlen(substr) == 0 && cmds.size() > 0) if (strlen(substr) == 0 && cmds.size() > 0)
{ {
return cmds[cmdCount - 1]; return cmds[cmdCount - 1].data();
} }
for (unsigned int i = 0; i < cmdCount; i++) for (unsigned int i = 0; i < cmdCount; i++)
{ {
if (azstricmp(substr, cmds[i]) == 0) if (azstricmp(substr, cmds[i].data()) == 0)
{ {
if (i > 0) if (i > 0)
{ {
return cmds[i - 1]; return cmds[i - 1].data();
} }
else else
{ {
return cmds[0]; return cmds[0].data();
} }
} }
} }

@ -181,7 +181,7 @@ public:
virtual bool IsOpened(); virtual bool IsOpened();
virtual int GetNumVars(); virtual int GetNumVars();
virtual int GetNumVisibleVars(); virtual int GetNumVisibleVars();
virtual size_t GetSortedVars(const char** pszArray, size_t numItems, const char* szPrefix = 0); virtual size_t GetSortedVars(AZStd::vector<AZStd::string_view>& pszArray, const char* szPrefix = 0);
virtual int GetNumCheatVars(); virtual int GetNumCheatVars();
virtual void SetCheatVarHashRange(size_t firstVar, size_t lastVar); virtual void SetCheatVarHashRange(size_t firstVar, size_t lastVar);
virtual void CalcCheatVarHash(); virtual void CalcCheatVarHash();

@ -178,10 +178,13 @@ public:
// constructor // constructor
CXConsoleVariableString(CXConsole* pConsole, const char* sName, const char* szDefault, int nFlags, const char* help) CXConsoleVariableString(CXConsole* pConsole, const char* sName, const char* szDefault, int nFlags, const char* help)
: CXConsoleVariableBase(pConsole, sName, nFlags, help) : CXConsoleVariableBase(pConsole, sName, nFlags, help)
{
if (szDefault)
{ {
m_sValue = szDefault; m_sValue = szDefault;
m_sDefault = szDefault; m_sDefault = szDefault;
} }
}
// interface ICVar -------------------------------------------------------------------------------------- // interface ICVar --------------------------------------------------------------------------------------

@ -446,10 +446,10 @@ bool SRemoteClient::SendPackage(const char* buffer, int size)
///////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////
void SRemoteClient::FillAutoCompleteList(AZStd::vector<AZStd::string>& list) void SRemoteClient::FillAutoCompleteList(AZStd::vector<AZStd::string>& list)
{ {
AZStd::vector<const char*> cmds; AZStd::vector<AZStd::string_view> cmds;
size_t count = gEnv->pConsole->GetSortedVars(nullptr, 0); size_t count = gEnv->pConsole->GetSortedVars(cmds);
cmds.resize(count); cmds.resize(count);
count = gEnv->pConsole->GetSortedVars(&cmds[0], count); count = gEnv->pConsole->GetSortedVars(cmds);
for (size_t i = 0; i < count; ++i) for (size_t i = 0; i < count; ++i)
{ {
list.push_back(cmds[i]); list.push_back(cmds[i]);

Loading…
Cancel
Save