Scheduler works

This commit is contained in:
ineedbots 2021-06-29 15:02:28 -06:00
parent fbeca33cfb
commit 2be8cd138c
4 changed files with 35 additions and 9 deletions

View File

@ -43,7 +43,7 @@ namespace Components
void Scheduler::ReadyHandler()
{
if (!false)
if (!*Game::isDvarSystemActive)
{
Scheduler::Once(Scheduler::ReadyHandler);
}
@ -55,7 +55,7 @@ namespace Components
}
}
void Scheduler::FrameHandler()
void Scheduler::FrameHandler([[maybe_unused]]bool isRenderer)
{
Scheduler::DelaySignal();
Scheduler::FrameSignal();
@ -95,10 +95,11 @@ namespace Components
signal();
}
void Scheduler::ShutdownStub(int num)
void Scheduler::ShutdownStub(const char* str)
{
Scheduler::ShutdownSignal();
//Utils::Hook::Call<void(int)>(0x46B370)(num);
Game::Com_Printf(str);
}
void Scheduler::OnFrameAsync(Utils::Slot<Scheduler::Callback> callback)
@ -111,13 +112,20 @@ namespace Components
Scheduler::AsyncFrameOnceSignal.connect(callback);
}
void Scheduler::GameFrameStub()
{
FrameHandler();
Game::Com_DedicatedModified();
}
Scheduler::Scheduler()
{
Scheduler::ReadyPassed = false;
Scheduler::Once(Scheduler::ReadyHandler);
// hook frames,
//Utils::Hook(0x4D697A, Scheduler::ShutdownStub, HOOK_CALL).install()->quick();
Utils::Hook(0x4326C5, Scheduler::ShutdownStub, HOOK_CALL).install()->quick();
Utils::Hook(0x43503D, Scheduler::GameFrameStub, HOOK_CALL).install()->quick();
if (!Loader::IsPerformingUnitTests())
{

View File

@ -21,8 +21,6 @@ namespace Components
static void OnFrameAsync(Utils::Slot<Callback> callback);
static void OnceAsync(Utils::Slot<Callback> callback);
static void FrameHandler();
private:
class DelayedSlot
{
@ -49,6 +47,10 @@ namespace Components
static void ReadyHandler();
static void DelaySignal();
static void ShutdownStub(int num);
static void ShutdownStub(const char*);
static void GameFrameStub();
static void FrameHandler(bool = 0);
};
}

View File

@ -34,6 +34,10 @@ namespace Game
GScr_LoadGameTypeScript_t* GScr_LoadGameTypeScript;
G_LoadStructs_t* G_LoadStructs;
Sys_Milliseconds_t* Sys_Milliseconds;
Com_Printf_t* Com_Printf;
Com_DedicatedModified_t* Com_DedicatedModified;
char* isDvarSystemActive;
bool IsDedicated()
{
@ -48,8 +52,12 @@ namespace Game
GScr_LoadGameTypeScript = ASSIGN(GScr_LoadGameTypeScript_t*, 0x503F90);
G_LoadStructs = ASSIGN(G_LoadStructs_t*, 0x5118A0);
Sys_Milliseconds = ASSIGN(Sys_Milliseconds_t*, 0x435200);
Com_Printf = ASSIGN(Com_Printf_t*, 0x431EE0);
Com_DedicatedModified = ASSIGN(Com_DedicatedModified_t*, 0x434DC0);
isDvarSystemActive = ASSIGN(char*, 0xC5C5C8);
cls = ASSIGN(clientStatic_t*, 0x68A408);
svs = ASSIGN(serverStatic_t*, 0xD35700);
sv = ASSIGN(server_t*, 0xCD6180);

View File

@ -8,6 +8,8 @@ namespace Game
void Init(GAMEEXE);
bool IsDedicated();
extern char* isDvarSystemActive;
extern clientStatic_t* cls;
extern serverStatic_t* svs;
extern server_t* sv;
@ -46,6 +48,12 @@ namespace Game
typedef int (Sys_Milliseconds_t)();
extern Sys_Milliseconds_t* Sys_Milliseconds;
typedef void (Com_DedicatedModified_t)();
extern Com_DedicatedModified_t* Com_DedicatedModified;
typedef void(Com_Printf_t)(const char *, ...);
extern Com_Printf_t* Com_Printf;
extern unsigned int Scr_GetFunctionHandle(char*, const char*);
extern __int16 Scr_ExecThread(int);
extern void RemoveRefToObject(int);