diff --git a/BunnymodXT/hud_custom.cpp b/BunnymodXT/hud_custom.cpp index 54d46ec8..74d6cc8d 100644 --- a/BunnymodXT/hud_custom.cpp +++ b/BunnymodXT/hud_custom.cpp @@ -1868,6 +1868,10 @@ namespace CustomHud milliseconds }; } + void SetTime(int h, int m, int s, double r) { + hours = h, minutes = m, seconds = s, timeRemainder = r; + } + bool GetCountingTime() { return countingTime; diff --git a/BunnymodXT/hud_custom.hpp b/BunnymodXT/hud_custom.hpp index 738446d9..02f1bd67 100644 --- a/BunnymodXT/hud_custom.hpp +++ b/BunnymodXT/hud_custom.hpp @@ -24,6 +24,7 @@ namespace CustomHud void UpdatePlayerInfoInaccurate(float vel[3], float org[3]); void TimePassed(double time); + void SetTime(int hours, int minutes, int seconds, double remainder); void ResetTime(); void SetCountingTime(bool counting); void SetInvalidRun(bool invalidated); diff --git a/BunnymodXT/runtime_data.cpp b/BunnymodXT/runtime_data.cpp index 3a2f59d5..5ed9c52e 100644 --- a/BunnymodXT/runtime_data.cpp +++ b/BunnymodXT/runtime_data.cpp @@ -510,22 +510,43 @@ namespace RuntimeData } // Visitor applied to each Data object found in demo. - class demo_data_visitor : public boost::static_visitor<> - { + class demo_data_visitor : public boost::static_visitor<> { public: - void operator()(const RuntimeData::Time& t) const {} + void operator()(const RuntimeData::Time& t) const { + CustomHud::SetTime((int)t.hours, (int)t.minutes, (int)t.seconds, t.remainder); + } + + void operator()(const RuntimeData::CommandExecution& e) const { + for (const auto& cmd : cmd_whitelist) { + if (e.command.rfind(cmd, 0) == 0) { + HwDLL::GetInstance().ORIG_Cbuf_InsertText(e.command.c_str()); + HwDLL::GetInstance().ORIG_Cbuf_InsertText("\n"); + } + } + } + + void operator()(const RuntimeData::GameEndMarker& m) const { + CustomHud::SetCountingTime(false); + } + void operator()(const RuntimeData::PlayerHealth& p) const {} void operator()(const RuntimeData::VersionInfo& v) const {} void operator()(const RuntimeData::CVarValues& v) const {} void operator()(const RuntimeData::BoundCommand& c) const {} void operator()(const RuntimeData::AliasExpansion& e) const {} void operator()(const RuntimeData::ScriptExecution& e) const {} - void operator()(const RuntimeData::CommandExecution& e) const {} - void operator()(const RuntimeData::GameEndMarker& m) const {} void operator()(const RuntimeData::LoadedModules& m) const {} void operator()(const RuntimeData::CustomTriggerCommand& c) const {} void operator()(const RuntimeData::Edicts& e) const {} - void operator()(const RuntimeData::SplitMarker& m) const { } + void operator()(const RuntimeData::SplitMarker& m) const {} + + private: + // bxt commands that should be executed when found during demo playback + const std::vector cmd_whitelist = { + "bxt_timer_stop", + "bxt_timer_start", + "bxt_timer_reset" + }; }; void ProcessRuntimeData(std::vector& data) {