1
0
mirror of https://github.com/alliedmodders/hl2sdk.git synced 2025-01-08 10:13:28 +08:00

Update ICvar, ConVar & ConCommand classes

This commit is contained in:
GAMMACASE 2023-03-31 06:19:32 +03:00 committed by Nicholas Hastings
parent 11fc23faa0
commit e56c443c09
2 changed files with 114 additions and 53 deletions

View File

@ -56,24 +56,24 @@ abstract_class ICvar : public IAppSystem
{
public:
// allow_developer - Allows finding convars with FCVAR_DEVELOPMENTONLY flag
virtual ConVarID FindConVar(const char *szName, bool bAllowDeveloper = false) = 0;
virtual ConVarID FindFirstConVar() = 0;
virtual ConVarID FindNextConVar(ConVarID previous) = 0;
virtual ConVarHandle FindConVar(const char *szName, bool bAllowDeveloper = false) = 0;
virtual ConVarHandle FindFirstConVar() = 0;
virtual ConVarHandle FindNextConVar(ConVarHandle previous) = 0;
virtual void SetConVarValue(ConVarID cvarid, CSplitScreenSlot nSlot, CVValue_t *pNewValue, CVValue_t *pOldValue) = 0;
virtual void SetConVarValue(ConVarHandle cvarid, CSplitScreenSlot nSlot, CVValue_t *pNewValue, CVValue_t *pOldValue) = 0;
virtual ConCommandID FindCommand(const char *szName) = 0;
virtual ConCommandID FindFirstCommand() = 0;
virtual ConCommandID FindNextCommand(ConCommandID previous) = 0;
virtual ConCommandHandle FindCommand(const char *szName) = 0;
virtual ConCommandHandle FindFirstCommand() = 0;
virtual ConCommandHandle FindNextCommand(ConCommandHandle previous) = 0;
virtual void DispatchConCommand(ConCommandID commandid, CCommandContext& ctx, CCommand& tok) = 0;
virtual void DispatchConCommand(ConCommandHandle commandid, CCommandContext& ctx, CCommand& tok) = 0;
// Install a global change callback (to be called when any convar changes)
virtual void InstallGlobalChangeCallback(FnChangeCallbackGlobal_t callback) = 0;
virtual void RemoveGlobalChangeCallback(FnChangeCallbackGlobal_t callback) = 0;
virtual void CallGlobalChangeCallbacks(ConVarRefAbstract *cvar, CSplitScreenSlot nSlot, const char *pNewValue, const char* pOldValue) = 0;
// Reverts cvars which contain a specific flag
// Reverts to default cvars which contain a specific flag
virtual void RevertFlaggedConVars(int nFlag) = 0;
virtual void SetMaxSplitScreenSlots(int nSlots) = 0;
@ -94,13 +94,13 @@ public:
virtual void SetConVarsFromGameInfo(KeyValues *) = 0;
virtual void RegisterConVar(ConVarDesc_t*, void*, ConVarID&, ConVar&) = 0;
virtual void UnregisterConVar(ConVarID cvarid) = 0;
virtual ConVar* GetConVar(ConVarID cvarid) = 0;
virtual void RegisterConVar(ConVarDesc_t *pDesc, bool bAdditionalFlags, ConVarRefAbstract &pCvarRef) = 0;
virtual void UnregisterConVar(ConVarHandle handle) = 0;
virtual ConVar* GetConVar(ConVarHandle handle) = 0;
virtual void RegisterConCommand(void*, void*, ConCommandID&, ConCommand&) = 0;
virtual void UnregisterConCommand(ConCommandID commandid) = 0;
virtual ConCommand* GetConCommand(ConCommandID commandid) = 0;
virtual ConCommandRef* RegisterConCommand(ConCommandDesc_t *pDesc, bool bAdditionalFlags = FCVAR_NONE) = 0;
virtual void UnregisterConCommand(ConCommandHandle handle) = 0;
virtual ConCommand* GetConCommand(ConCommandHandle handle) = 0;
virtual void QueueThreadSetValue(ConVarRefAbstract *ref, CSplitScreenSlot nSlot, CVValue_t *value) = 0;
};

View File

@ -51,11 +51,11 @@ union CVValue_t;
//-----------------------------------------------------------------------------
//#define CONVAR_TEST_MATERIAL_THREAD_CONVARS 1
DECLARE_HANDLE_32BIT(ConVarID);
#define CONVAR_ID_INVALID ConVarID::MakeHandle( 0xFFFFFFFF )
DECLARE_HANDLE_32BIT(ConVarHandle);
#define CONVAR_ID_INVALID ConVarHandle::MakeHandle( 0xFFFFFFFF )
DECLARE_HANDLE_32BIT(ConCommandID);
#define CONCOMMAND_ID_INVALID ConCommandID::MakeHandle( 0xFFFFFFFF )
DECLARE_HANDLE_32BIT(ConCommandHandle);
#define CONCOMMAND_ID_INVALID ConCommandHandle::MakeHandle( 0xFFFFFFFF )
//-----------------------------------------------------------------------------
// ConVar flags
@ -122,7 +122,7 @@ class ICreationListenerCallbacks
{
public:
virtual void ConVarCreationCallback(ConVarRefAbstract *pNewCvar) = 0;
virtual void ConCommandCreationCallback(ConCommandID commandID) = 0;
virtual void ConCommandCreationCallback(ConCommandRef *pNewCommand) = 0;
};
struct CCommandContext
@ -167,9 +167,9 @@ void ConVar_PublishToVXConsole();
//-----------------------------------------------------------------------------
// Called when a ConCommand needs to execute
//-----------------------------------------------------------------------------
typedef void ( *FnCommandCallbackV1_t )( const CCommandContext &context );
typedef void ( *FnCommandCallbackV2_t )( const CCommandContext &context, const CCommand &command );
typedef void ( *FnCommandCallback_t )( const CCommand &command );
typedef void ( *FnCommandCallback_t )( const CCommandContext &context );
typedef void ( *FnCommandCallbackDefault_t )( const CCommandContext &context, const CCommand &command );
typedef void ( *FnCommandCallbackEmpty_t )( );
//-----------------------------------------------------------------------------
// Returns 0 to COMMAND_COMPLETION_MAXITEMS worth of completion strings
@ -229,47 +229,59 @@ union CVValue_t
Vector4D m_vec4Value;
QAngle m_angValue;
};
};
struct ConVarDataType_t
{
const char* name;
int data_size;
int primitive; // 1 for primitive types, 0 for others
void* InitValue;
int primitive;
void* InitValue; // Only used for string type
void* CloneValue;
void* DestroyValue;
void* DestroyValue; // Only used for string type
void* FromString;
void* ToString;
void* IsEqual;
void* Clamp;
const char* default_string_value;
ConVar* undefined_cvar;
ConVarDataType_t* default;
};
class ConVarRefAbstract
{
public:
ConVarHandle *handle;
ConVar *cvar;
};
// Should be size of 56 (0x38)
struct ConVarValueDescription_t
{
// This gets copied to the ConVar class on creation
int unk1;
bool has_default;
bool has_min;
bool has_max;
CVValue_t default_value;
CVValue_t min_value;
CVValue_t max_value;
};
// Should be size of 96 (0x60)
struct ConVarDesc_t
{
const char *name;
const char *description;
int64 flags;
char unk[64];
ConVarDataType_t type;
void *handle;
void *convar;
};
struct ConCommandDesc_t
{
const char* name;
const char* description;
int64 flags;
void* callback;
void* unk1;
void* unk2;
void* unk3;
void* output_id_holder;
ConVarValueDescription_t value_info;
void *callback;
EConVarType type;
};
// Should be size of 64 (0x40)
class ConVar
{
public:
@ -279,26 +291,75 @@ public:
CVValue_t *maxValue;
const char *description;
EConVarType type;
char padding[2];
// This gets copied from the ConVarDesc_t on creation
short unk1;
unsigned int timesChanged;
int64 flags;
unsigned int callbackId;
int unk;
CVValue_t value[];
unsigned int callback_index;
// Used when setting default, max, min values from the ConVarDesc_t
// although that's not the only place of usage
// flags seems to be:
// (1 << 0) Skip setting value to split screen slots and also something keyvalues related
// (1 << 1) Skip setting default value
// (1 << 2) Skip setting min/max values
int allocation_flag_of_some_sort;
CVValue_t values[];
};
class ConCommand
class ConCommandRef
{
ConCommandHandle handle;
};
class ConVarRefAbstract
class ConCommandBase
{
public:
ConVarID *cvarid;
ConVar *cvar;
const char *name;
const char *description;
int64 flags;
};
struct ConCommandCB
{
// Call this function when executing the command
union
{
void *m_fnCallbackAny;
FnCommandCallback_t m_fnCommandCallback;
FnCommandCallbackEmpty_t m_fnCommandCallbackEmpty;
FnCommandCallbackDefault_t m_fnCommandCallbackDefault;
ICommandCallback *m_pCommandCallback;
};
bool m_bUsingCommandCallbackInterface : 1;
bool m_bUsingEmptyCommandCallback : 1;
bool m_bUsingCommandCallback : 1;
};
// Should be size of 64 (0x40)
class ConCommandDesc_t : ConCommandBase
{
public:
ConCommandCB callback;
ConCommandCB autocompletion_callback;
ConCommandRef *parent;
};
// Should be size of 48 (0x30) (56 in linked list)
class ConCommand : ConCommandBase
{
public:
ConCommandCB autocompletion_callback;
int ccvar_autocomplete_callback_index;
int ccvar_callbackslist_callback_index;
};
//class CConCommandMemberAccessor : IConCommandAccessor, ConCommandRef
//-----------------------------------------------------------------------------
// Purpose: The base console invoked command/cvar interface
//-----------------------------------------------------------------------------