This repository has been archived on 2024-06-13. You can view files and clone it, but cannot push or open issues or pull requests.
2020-08-04 13:13:01 -04:00

56 lines
1.7 KiB
C++

/*
*
* An implimentation to prevent the framework from using its own console, and to
* use sources console instead.
*
*/
#include "../../../util/catvars.hpp"
#include "../../../util/logging.hpp"
#include "../../../util/strings.hpp"
#include "../hacks/ifaces.hpp"
#include "console.hpp"
namespace modules::source::framework::console {
class CatConVar : public ConVar {
public:
CatConVar(CatVar* _cat_var)
: ConVar(_cat_var->command_name.c_str(), _cat_var->GetValue().c_str(),
0, _cat_var->desc),
cat_var(_cat_var) {}
CatVar* cat_var;
virtual void SetValue(const char* value) {
cat_var->Callback(sepstr(value));
}
};
class CatConCommand : public ConCommand {
public:
CatConCommand(CatCommand* _cat_com)
: ConCommand(_cat_com->name.c_str(), [](const CCommand& con_args) {
CallCommand(con_args.GetCommandString());
}) {}
};
void Init() {
// Register Commands and vars
for (auto& tmp : CatCommand::GetList())
iface::cvar->RegisterConCommand(new CatConCommand(tmp));
for (auto& tmp : CatVar::GetList())
iface::cvar->RegisterConCommand(new CatConVar(tmp));
// ensure we sync the catvar values
CatVar::change_event.Listen([](CatVar* changed) {
auto con_var = iface::cvar->FindVar(changed->command_name.c_str());
if (con_var) con_var->ConVar::SetValue(changed->GetValue().c_str());
});
// Logging into console ;)
debug_log.log_event.Listen(
[](std::string& in) { iface::cvar->ConsolePrintf("%s", in.c_str()); });
debug_log.Puts("Now using game console!");
}
} // namespace modules::source::framework::console