mirror of
https://github.com/thunderbrewhq/thunderbrew
synced 2025-07-05 17:19:47 +03:00
feat(console): add functions to reset and default cvars
This commit is contained in:
parent
851c1aea5b
commit
17fc9017e0
@ -2,11 +2,12 @@
|
|||||||
#include "console/Command.hpp"
|
#include "console/Command.hpp"
|
||||||
#include "console/Types.hpp"
|
#include "console/Types.hpp"
|
||||||
#include "console/Line.hpp"
|
#include "console/Line.hpp"
|
||||||
|
#include "util/SFile.hpp"
|
||||||
|
|
||||||
#include <bc/os/File.hpp>
|
#include <bc/os/File.hpp>
|
||||||
#include <storm/String.hpp>
|
#include <storm/String.hpp>
|
||||||
|
|
||||||
|
const char* s_filename = nullptr;
|
||||||
bool CVar::m_needsSave;
|
bool CVar::m_needsSave;
|
||||||
TSHashTable<CVar, HASHKEY_STRI> CVar::s_registeredCVars;
|
TSHashTable<CVar, HASHKEY_STRI> CVar::s_registeredCVars;
|
||||||
|
|
||||||
@ -152,6 +153,25 @@ bool CVar::Set(const char* value, bool setValue, bool setReset, bool setDefault,
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CVar::Reset() {
|
||||||
|
auto value = this->m_resetValue;
|
||||||
|
if (value.GetString() == nullptr) {
|
||||||
|
value = this->m_defaultValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
this->InternalSet(value.GetString(), true, false, false, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CVar::Default() {
|
||||||
|
auto value = this->m_defaultValue;
|
||||||
|
if (value.GetString() == nullptr) {
|
||||||
|
value = this->m_resetValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
this->InternalSet(value.GetString(), true, false, false, true);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
int32_t CVar::Update() {
|
int32_t CVar::Update() {
|
||||||
if (!(this->m_flags & 0x2)) {
|
if (!(this->m_flags & 0x2)) {
|
||||||
return 0;
|
return 0;
|
||||||
@ -194,7 +214,7 @@ int32_t CVar::Load(HOSFILE file) {
|
|||||||
result = 0;
|
result = 0;
|
||||||
} else {
|
} else {
|
||||||
data[size] = '\0';
|
data[size] = '\0';
|
||||||
auto curr = data;
|
const char* curr = data;
|
||||||
|
|
||||||
// Skip over UTF-8 byte order mark
|
// Skip over UTF-8 byte order mark
|
||||||
if ((((data != nullptr) && (2 < bytesRead)) && (data[0] == 0xef)) && ((data[1] == 0xbb && (data[2] == 0xbf)))) {
|
if ((((data != nullptr) && (2 < bytesRead)) && (data[0] == 0xef)) && ((data[1] == 0xbb && (data[2] == 0xbf)))) {
|
||||||
@ -211,7 +231,7 @@ int32_t CVar::Load(HOSFILE file) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
result = 1;
|
result = 1;
|
||||||
} while ((curr != nullptr) && (*curr != '\0'))
|
} while ((curr != nullptr) && (*curr != '\0'));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (grown) {
|
if (grown) {
|
||||||
@ -264,6 +284,62 @@ void CVar::Initialize(const char* filename) {
|
|||||||
CVar::Load(s_filename);
|
CVar::Load(s_filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int32_t CvarResetCommandHandler(const char* command, const char* arguments) {
|
||||||
|
char cvarName[256] = {0};
|
||||||
|
auto string = arguments;
|
||||||
|
|
||||||
|
SStrTokenize(&string, cvarName, sizeof(cvarName), " ,;\t\"\r\n", nullptr);
|
||||||
|
|
||||||
|
if (*cvarName) {
|
||||||
|
// reset a specific cvar
|
||||||
|
auto cvar = CVar::Lookup(cvarName);
|
||||||
|
if (cvar) {
|
||||||
|
cvar->Reset();
|
||||||
|
} else {
|
||||||
|
ConsoleWriteA("No such cvar \"%s\"\n", ERROR_COLOR, cvarName);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
} else {
|
||||||
|
// reset all cvars
|
||||||
|
ConsoleWrite("Resetting all cvars\n", DEFAULT_COLOR);
|
||||||
|
|
||||||
|
for (auto cvar = s_registeredCVars.Head(); cvar != nullptr; cvar = s_registeredCVars.Next(i)) {
|
||||||
|
cvar->Reset();
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t CvarDefaultCommandHandler(const char* command, const char* arguments) {
|
||||||
|
char cvarName[256] = {0};
|
||||||
|
auto string = arguments;
|
||||||
|
|
||||||
|
SStrTokenize(&string, cvarName, sizeof(cvarName), " ,;\t\"\r\n", nullptr);
|
||||||
|
|
||||||
|
if (*cvarName) {
|
||||||
|
// restore a specific cvar
|
||||||
|
auto cvar = CVar::Lookup(cvarName);
|
||||||
|
if (cvar) {
|
||||||
|
cvar->Default();
|
||||||
|
} else {
|
||||||
|
ConsoleWriteA("No such cvar \"%s\"\n", ERROR_COLOR, cvarName);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
} else {
|
||||||
|
// restore all cvars
|
||||||
|
ConsoleWrite("Restoring all cvars\n", DEFAULT_COLOR);
|
||||||
|
|
||||||
|
for (auto cvar = s_registeredCVars.Head(); cvar != nullptr; cvar = s_registeredCVars.Next(i)) {
|
||||||
|
cvar->Default();
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int32_t CvarCommandHandler(const char* command, const char* arguments) {
|
int32_t CvarCommandHandler(const char* command, const char* arguments) {
|
||||||
auto cvar = CVar::Lookup(command);
|
auto cvar = CVar::Lookup(command);
|
||||||
STORM_ASSERT(cvar);
|
STORM_ASSERT(cvar);
|
||||||
@ -283,6 +359,25 @@ int32_t CvarCommandHandler(const char* command, const char* arguments) {
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int32_t SetCommandHandler(const char* command, const char* arguments) {
|
||||||
|
char cvarValue[2048] = {0};
|
||||||
|
char cvarName[256] = {0};
|
||||||
|
|
||||||
|
auto str = arguments;
|
||||||
|
|
||||||
|
SStrTokenize(&str, cvarName, sizeof(cvarName), " ,;\t\"\r\n", nullptr);
|
||||||
|
SStrTokenize(&str, cvarValue, sizeof(cvarValue), " ,;\t\"\r\n", nullptr);
|
||||||
|
|
||||||
|
auto var = CVar::Lookup(cvarName);
|
||||||
|
if (var) {
|
||||||
|
var->Set(cvarValue, true, false, false);
|
||||||
|
} else {
|
||||||
|
CVar::Register(cvarName, "", 0, cvarValue, nullptr, )
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
int32_t CvarListCommandHandler(const char* command, const char* arguments) {
|
int32_t CvarListCommandHandler(const char* command, const char* arguments) {
|
||||||
char text[256];
|
char text[256];
|
||||||
char text2[256];
|
char text2[256];
|
||||||
|
@ -39,6 +39,8 @@ class CVar : public TSHashObject<CVar, HASHKEY_STRI> {
|
|||||||
int32_t Load(HOSFILE fileHandle);
|
int32_t Load(HOSFILE fileHandle);
|
||||||
void InternalSet(const char*, bool, bool, bool, bool);
|
void InternalSet(const char*, bool, bool, bool, bool);
|
||||||
bool Set(const char*, bool, bool, bool, bool);
|
bool Set(const char*, bool, bool, bool, bool);
|
||||||
|
bool Reset();
|
||||||
|
bool Default();
|
||||||
int32_t Update();
|
int32_t Update();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user