Skip to content

Commit

Permalink
CVar improvements
Browse files Browse the repository at this point in the history
  • Loading branch information
pursche committed Apr 6, 2024
1 parent 8c11c2c commit c54454d
Show file tree
Hide file tree
Showing 6 changed files with 709 additions and 190 deletions.
74 changes: 61 additions & 13 deletions Source/Base/Base/CVarSystem/CVarSystem.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,49 +5,97 @@
enum class CVarFlags : u32
{
None = 0,
Noedit = 1 << 1,
Hidden = 1 << 1,
EditReadOnly = 1 << 2,
Advanced = 1 << 3,

EditCheckbox = 1 << 8,
EditFloatDrag = 1 << 9,

RuntimeCreated = 1 << 20,
DoNotSave = 1 << 21,
};
DECLARE_GENERIC_BITWISE_OPERATORS(CVarFlags);

enum class ShowFlag : bool
{
ENABLED,
DISABLED
};

enum class CVarCategory : u8
{
Server = 1 << 0,
Client = 1 << 1,
Rendering = 1 << 2,
Physics = 1 << 3,
Network = 1 << 4,

COUNT = 5, // Keep this updated!
};
DECLARE_GENERIC_BITWISE_OPERATORS(CVarCategory);

constexpr char* CVarCategoryToString[u8(CVarCategory::COUNT)] =
{
"Server",
"Client",
"Rendering",
"Physics",
"Network",
};

constexpr char* CVarCategoryToPrefix[u8(CVarCategory::COUNT)] =
{
"sv_",
"cl_",
"r_",
"phys_",
"net_",
};

class CVarParameter;
class CVarSystem
{
public:
static CVarSystem* Get();
static std::string GetQualifiedName(CVarCategory category, const char* name);

//pimpl
virtual CVarParameter* GetCVar(StringUtils::StringHash hash) = 0;
virtual CVarParameter* GetCVar(CVarCategory category, StringUtils::StringHash hash) = 0;

virtual f64* GetFloatCVar(StringUtils::StringHash hash) = 0;
virtual f64* GetFloatCVar(CVarCategory category, StringUtils::StringHash hash) = 0;
virtual i32* GetIntCVar(StringUtils::StringHash hash) = 0;
virtual i32* GetIntCVar(CVarCategory category, StringUtils::StringHash hash) = 0;
virtual const char* GetStringCVar(StringUtils::StringHash hash) = 0;
virtual const char* GetStringCVar(CVarCategory category, StringUtils::StringHash hash) = 0;
virtual vec4* GetVecFloatCVar(StringUtils::StringHash hash) = 0;
virtual vec4* GetVecFloatCVar(CVarCategory category, StringUtils::StringHash hash) = 0;
virtual ivec4* GetVecIntCVar(StringUtils::StringHash hash) = 0;
virtual ivec4* GetVecIntCVar(CVarCategory category, StringUtils::StringHash hash) = 0;
virtual ShowFlag* GetShowFlagCVar(StringUtils::StringHash hash) = 0;
virtual ShowFlag* GetShowFlagCVar(CVarCategory category, StringUtils::StringHash hash) = 0;

virtual void SetFloatCVar(StringUtils::StringHash hash, f64 value) = 0;
virtual void SetFloatCVar(CVarCategory category, StringUtils::StringHash hash, f64 value) = 0;
virtual void SetIntCVar(StringUtils::StringHash hash, i32 value) = 0;
virtual void SetIntCVar(CVarCategory category, StringUtils::StringHash hash, i32 value) = 0;
virtual void SetStringCVar(StringUtils::StringHash hash, const char* value) = 0;
virtual void SetStringCVar(CVarCategory category, StringUtils::StringHash hash, const char* value) = 0;
virtual void SetVecFloatCVar(StringUtils::StringHash hash, const vec4& value) = 0;
virtual void SetVecFloatCVar(CVarCategory category, StringUtils::StringHash hash, const vec4& value) = 0;
virtual void SetVecIntCVar(StringUtils::StringHash hash, const ivec4& value) = 0;
virtual void SetVecIntCVar(CVarCategory category, StringUtils::StringHash hash, const ivec4& value) = 0;
virtual void SetShowFlagCVar(StringUtils::StringHash hash, const ShowFlag& value) = 0;
virtual void SetShowFlagCVar(CVarCategory category, StringUtils::StringHash hash, const ShowFlag& value) = 0;

virtual CVarParameter* CreateFloatCVar(const char* name, const char* description, f64 defaultValue, f64 currentValue) = 0;
virtual CVarParameter* CreateIntCVar(const char* name, const char* description, i32 defaultValue, i32 currentValue) = 0;
virtual CVarParameter* CreateStringCVar(const char* name, const char* description, const char* defaultValue, const char* currentValue) = 0;
virtual CVarParameter* CreateVecFloatCVar(const char* name, const char* description, const vec4& defaultValue, const vec4& currentValue) = 0;
virtual CVarParameter* CreateVecIntCVar(const char* name, const char* description, const ivec4& defaultValue, const ivec4& currentValue) = 0;
virtual CVarParameter* CreateShowFlagCVar(const char* name, const char* description, const ShowFlag& defaultValue, const ShowFlag& currentValue) = 0;
virtual CVarParameter* CreateFloatCVar(CVarCategory category, const char* name, const char* description, f64 defaultValue, f64 currentValue, CVarFlags flags = CVarFlags::None) = 0;
virtual CVarParameter* CreateIntCVar(CVarCategory category, const char* name, const char* description, i32 defaultValue, i32 currentValue, CVarFlags flags = CVarFlags::None) = 0;
virtual CVarParameter* CreateStringCVar(CVarCategory category, const char* name, const char* description, const char* defaultValue, const char* currentValue, CVarFlags flags = CVarFlags::None) = 0;
virtual CVarParameter* CreateVecFloatCVar(CVarCategory category, const char* name, const char* description, const vec4& defaultValue, const vec4& currentValue, CVarFlags flags = CVarFlags::None) = 0;
virtual CVarParameter* CreateVecIntCVar(CVarCategory category, const char* name, const char* description, const ivec4& defaultValue, const ivec4& currentValue, CVarFlags flags = CVarFlags::None) = 0;
virtual CVarParameter* CreateShowFlagCVar(CVarCategory category, const char* name, const char* description, const ShowFlag& defaultValue, const ShowFlag& currentValue, CVarFlags flags = CVarFlags::None) = 0;

void MarkDirty() { _isDirty = true; }
void ClearDirty() { _isDirty = false; }
Expand All @@ -66,7 +114,7 @@ struct AutoCVar
struct AutoCVar_Float : AutoCVar
{
public:
AutoCVar_Float(const char* name, const char* description, f64 defaultValue, CVarFlags flags = CVarFlags::None);
AutoCVar_Float(CVarCategory category, const char* name, const char* description, f64 defaultValue, CVarFlags flags = CVarFlags::None);

f64 Get();
f64* GetPtr();
Expand All @@ -78,7 +126,7 @@ struct AutoCVar_Float : AutoCVar
struct AutoCVar_Int : AutoCVar
{
public:
AutoCVar_Int(const char* name, const char* description, i32 defaultValue, CVarFlags flags = CVarFlags::None);
AutoCVar_Int(CVarCategory category, const char* name, const char* description, i32 defaultValue, CVarFlags flags = CVarFlags::None);
i32 Get();
i32* GetPtr();
void Set(i32 val);
Expand All @@ -89,7 +137,7 @@ struct AutoCVar_Int : AutoCVar
struct AutoCVar_String : AutoCVar
{
public:
AutoCVar_String(const char* name, const char* description, const char* defaultValue, CVarFlags flags = CVarFlags::None);
AutoCVar_String(CVarCategory category, const char* name, const char* description, const char* defaultValue, CVarFlags flags = CVarFlags::None);

const char* Get();
void Set(std::string&& val);
Expand All @@ -98,7 +146,7 @@ struct AutoCVar_String : AutoCVar
struct AutoCVar_VecFloat : AutoCVar
{
public:
AutoCVar_VecFloat(const char* name, const char* description, const vec4& defaultValue, CVarFlags flags = CVarFlags::None);
AutoCVar_VecFloat(CVarCategory category, const char* name, const char* description, const vec4& defaultValue, CVarFlags flags = CVarFlags::None);

vec4 Get();
void Set(const vec4& val);
Expand All @@ -107,7 +155,7 @@ struct AutoCVar_VecFloat : AutoCVar
struct AutoCVar_VecInt : AutoCVar
{
public:
AutoCVar_VecInt(const char* name, const char* description, const ivec4& defaultValue, CVarFlags flags = CVarFlags::None);
AutoCVar_VecInt(CVarCategory category, const char* name, const char* description, const ivec4& defaultValue, CVarFlags flags = CVarFlags::None);

ivec4 Get();
void Set(const ivec4& val);
Expand All @@ -116,7 +164,7 @@ struct AutoCVar_VecInt : AutoCVar
struct AutoCVar_ShowFlag : AutoCVar
{
public:
AutoCVar_ShowFlag(const char* name, const char* description, const ShowFlag& defaultValue);
AutoCVar_ShowFlag(CVarCategory category, const char* name, const char* description, const ShowFlag& defaultValue, CVarFlags flags = CVarFlags::None);

ShowFlag Get();
void Set(const ShowFlag& val);
Expand Down
Loading

0 comments on commit c54454d

Please sign in to comment.