Implement fully mapped out ConCommandBase VFTable interface class

This commit is contained in:
Kawe Mazidjatari 2022-07-25 20:06:06 +02:00
parent 19d264ec11
commit 25e2581f2b
11 changed files with 72 additions and 5 deletions

View File

@ -0,0 +1,35 @@
#ifndef ICONCOMMAND_H
#define ICONCOMMAND_H
#include "icvar.h"
//-----------------------------------------------------------------------------
// Abstract interface for ConVars
//-----------------------------------------------------------------------------
abstract_class IConCommandBase
{
public:
virtual ~IConCommandBase(void) = 0;
virtual bool IsCommand(void) const = 0;
virtual bool IsFlagSet(int flag) const = 0; // Check flag
virtual void AddFlags(int flags) = 0; // Set flag
virtual void RemoveFlags(int flags) = 0; // Clear flag
virtual int GetFlags() const = 0; // Get flag
virtual const char* GetName(void) const = 0; // Return name of cvar
virtual const char* GetHelpText(void) const = 0; // Return help text for cvar
virtual const char* GetUsageText(void) const = 0; // Return usage text for cvar
virtual void SetAccessor(char* bAccessors) const = 0;
virtual bool IsRegistered(void) const = 0;
virtual CVarDLLIdentifier_t GetDLLIdentifier() const = 0; // Returns the DLL identifier
protected:
virtual void Create(const char* pName, const char* pHelpString = 0,
int flags = 0) = 0;
virtual void Init() = 0; // Used internally by OneTimeInit to initialize/shutdown
};
#endif // ICONCOMMAND_H

View File

@ -0,0 +1,9 @@
#ifndef ICVAR_H
#define ICVAR_H
//-----------------------------------------------------------------------------
// ConVars/ComCommands are marked as having a particular DLL identifier
//-----------------------------------------------------------------------------
typedef int CVarDLLIdentifier_t;
#endif // ICVAR_H

View File

@ -11,6 +11,8 @@
#include "tier1/cvar.h"
#include "mathlib/bits.h"
#include "vstdlib/callback.h"
#include "public/include/iconvar.h"
#include "public/include/iconcommand.h"
//-----------------------------------------------------------------------------
// Purpose: construct/allocate
@ -20,7 +22,7 @@ ConVar::ConVar(const char* pszName, const char* pszDefaultValue, int nFlags, con
ConVar* pNewConVar = MemAllocSingleton()->Alloc<ConVar>(sizeof(ConVar)); // Allocate new memory with StdMemAlloc else we crash.
memset(pNewConVar, '\0', sizeof(ConVar)); // Set all to null.
pNewConVar->m_pConCommandBaseVFTable = g_pConVarVFTable.RCast<void*>();
pNewConVar->m_pConCommandBaseVFTable = g_pConVarVFTable.RCast<IConCommandBase*>();
pNewConVar->m_pIConVarVFTable = g_pIConVarVFTable.RCast<IConVar*>();
ConVar_Register(pNewConVar, pszName, pszDefaultValue, nFlags, pszHelpString, bMin, fMin, bMax, fMax, pCallback, pszUsageString);

View File

@ -101,7 +101,7 @@ ConCommand::ConCommand(const char* pszName, const char* pszHelpString, int nFlag
ConCommand* pCommand = MemAllocSingleton()->Alloc<ConCommand>(sizeof(ConCommand));
memset(pCommand, '\0', sizeof(ConCommand));
pCommand->m_pConCommandBaseVTable = g_pConCommandVtable.RCast<void*>();
pCommand->m_pConCommandBaseVFTable = g_pConCommandVtable.RCast<IConCommandBase*>();
pCommand->m_pszName = pszName;
pCommand->m_pszHelpString = pszHelpString;
pCommand->m_nFlags = nFlags;
@ -266,7 +266,7 @@ bool ConCommand::IsCommand(void) const
//-----------------------------------------------------------------------------
bool ConCommandBase::IsCommand(void) const
{
return m_pConCommandBaseVTable != g_pConVarVtable.RCast<void*>();
return m_pConCommandBaseVFTable != g_pConVarVFTable.RCast<void*>();
}
//-----------------------------------------------------------------------------

View File

@ -1,4 +1,5 @@
#pragma once
#include "public/include/iconcommand.h"
//-----------------------------------------------------------------------------
// Forward declarations
@ -99,7 +100,7 @@ public:
char* CopyString(const char* szFrom) const;
void* m_pConCommandBaseVTable; //0x0000
IConCommandBase* m_pConCommandBaseVFTable; //0x0000
ConCommandBase* m_pNext; //0x0008
bool m_bRegistered; //0x0010
char pad_0011[7]; //0x0011

View File

@ -243,6 +243,7 @@
<ClInclude Include="..\public\include\iclientthinkable.h" />
<ClInclude Include="..\public\include\iclientunknown.h" />
<ClInclude Include="..\public\include\icommandline.h" />
<ClInclude Include="..\public\include\iconcommand.h" />
<ClInclude Include="..\public\include\iconvar.h" />
<ClInclude Include="..\public\include\idebugoverlay.h" />
<ClInclude Include="..\public\include\ihandleentity.h" />

View File

@ -1646,8 +1646,11 @@
<ClInclude Include="..\game\client\view.h">
<Filter>sdk\game\client</Filter>
</ClInclude>
<ClInclude Include="..\public\include\iconcommand.h">
<Filter>sdk\public\include</Filter>
</ClInclude>
<ClInclude Include="..\public\include\iconvar.h">
<Filter>sdk\tier1</Filter>
<Filter>sdk\public\include</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>

View File

@ -216,7 +216,9 @@
<ClInclude Include="..\public\include\edict.h" />
<ClInclude Include="..\public\include\globalvars_base.h" />
<ClInclude Include="..\public\include\icommandline.h" />
<ClInclude Include="..\public\include\iconcommand.h" />
<ClInclude Include="..\public\include\iconvar.h" />
<ClInclude Include="..\public\include\icvar.h" />
<ClInclude Include="..\public\include\inetchannel.h" />
<ClInclude Include="..\public\include\inetmsghandler.h" />
<ClInclude Include="..\public\include\iserver.h" />

View File

@ -1179,6 +1179,12 @@
<ClInclude Include="..\public\include\iconvar.h">
<Filter>sdk\public\include</Filter>
</ClInclude>
<ClInclude Include="..\public\include\iconcommand.h">
<Filter>sdk\public\include</Filter>
</ClInclude>
<ClInclude Include="..\public\include\icvar.h">
<Filter>sdk\public\include</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\common\opcodes.cpp">

View File

@ -267,7 +267,9 @@
<ClInclude Include="..\public\include\iclientthinkable.h" />
<ClInclude Include="..\public\include\iclientunknown.h" />
<ClInclude Include="..\public\include\icommandline.h" />
<ClInclude Include="..\public\include\iconcommand.h" />
<ClInclude Include="..\public\include\iconvar.h" />
<ClInclude Include="..\public\include\icvar.h" />
<ClInclude Include="..\public\include\idebugoverlay.h" />
<ClInclude Include="..\public\include\ihandleentity.h" />
<ClInclude Include="..\public\include\inetchannel.h" />

View File

@ -1739,6 +1739,12 @@
<ClInclude Include="..\public\include\iconvar.h">
<Filter>sdk\public\include</Filter>
</ClInclude>
<ClInclude Include="..\public\include\iconcommand.h">
<Filter>sdk\public\include</Filter>
</ClInclude>
<ClInclude Include="..\public\include\icvar.h">
<Filter>sdk\public\include</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<Image Include="..\shared\resource\lockedserver.png">