From dfca7b1bd5fd0492bf840c2de8e6bc519470baa7 Mon Sep 17 00:00:00 2001 From: Kyle Sanderson Date: Wed, 31 Aug 2016 22:33:53 -0700 Subject: [PATCH] Add FrameTasks to C++. --- core/logic/frame_tasks.cpp | 20 ++++++++++++++++++++ core/logic/frame_tasks.h | 11 +++++++++++ 2 files changed, 31 insertions(+) diff --git a/core/logic/frame_tasks.cpp b/core/logic/frame_tasks.cpp index d2b98962e..bb520bc8f 100644 --- a/core/logic/frame_tasks.cpp +++ b/core/logic/frame_tasks.cpp @@ -24,6 +24,7 @@ // this exception to all derivative works. AlliedModders LLC defines further // exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), // or . +#include "common_logic.h" #include "frame_tasks.h" #include @@ -31,6 +32,19 @@ using namespace SourceMod; ke::Vector> sNextTasks; ke::Vector> sWorkTasks; +FrameTasks sPawnTasks; + +void +FrameTasks::OnSourceModAllInitialized() +{ + m_pOnThink = forwardsys->CreateForward("OnThinkFrame", ET_Ignore, 1, NULL, Param_Cell); +} + +void +FrameTasks::OnSourceModShutdown() +{ + forwardsys->ReleaseForward(m_pOnThink); +} void SourceMod::ScheduleTaskForNextFrame(ke::Lambda&& task) @@ -41,6 +55,12 @@ SourceMod::ScheduleTaskForNextFrame(ke::Lambda&& task) void SourceMod::RunScheduledFrameTasks(bool simulating) { + if (sPawnTasks.pOnThink->GetFunctionCount() != 0) + { + sPawnTasks.pOnThink->PushCell(simulating); + sPawnTasks.pOnThink->Execute(NULL); + } + if (sNextTasks.empty()) return; diff --git a/core/logic/frame_tasks.h b/core/logic/frame_tasks.h index 270417f77..217d753d9 100644 --- a/core/logic/frame_tasks.h +++ b/core/logic/frame_tasks.h @@ -29,6 +29,17 @@ #include +class FrameTasks : + public SMGlobalClass +{ + friend class SourceMod; +public: // SMGlobalClass + void OnSourceModAllInitialized(); + void OnSourceModShutdown(); +protected: + IForward *m_pOnThink; +}; + namespace SourceMod { void ScheduleTaskForNextFrame(ke::Lambda&& task);