Skip to content

Commit

Permalink
Add second game pause check.
Browse files Browse the repository at this point in the history
  • Loading branch information
aers committed Dec 21, 2019
1 parent dcfed74 commit 420aed4
Show file tree
Hide file tree
Showing 5 changed files with 13 additions and 19 deletions.
2 changes: 0 additions & 2 deletions hdtSMP64/ArmorManager.cpp
Expand Up @@ -106,8 +106,6 @@ namespace hdt

void ArmorManager::onEvent(const FrameEvent & e)
{
if (!e.frameEnd) return;

std::lock_guard<decltype(m_lock)> l(m_lock);
if (m_shutdown) return;

Expand Down
2 changes: 1 addition & 1 deletion hdtSMP64/HookEvents.h
Expand Up @@ -16,7 +16,7 @@ namespace hdt

struct FrameEvent
{
bool frameEnd;
bool gamePaused;
};

struct ShutdownEvent
Expand Down
9 changes: 5 additions & 4 deletions hdtSMP64/Hooks.cpp
Expand Up @@ -47,15 +47,16 @@ namespace hdt
DEFINE_MEMBER_FN_HOOK(onFrame, void, offset::GameLoopFunction);

void onFrame();

char unk[0x16];
bool gamePaused; // 16
};

void UnkEngine::onFrame()
{
FrameEvent e;
e.frameEnd = false;
g_frameEventDispatcher.dispatch(e);
CALL_MEMBER_FN(this, onFrame)();
e.frameEnd = true;
FrameEvent e;
e.gamePaused = this->gamePaused;
g_frameEventDispatcher.dispatch(e);
}

Expand Down
8 changes: 7 additions & 1 deletion hdtSMP64/hdtSkyrimPhysicsWorld.cpp
@@ -1,6 +1,7 @@
#include "hdtSkyrimPhysicsWorld.h"
#include <ppl.h>
#include "Offsets.h"
#include "skse64/GameMenus.h"

namespace hdt
{
Expand Down Expand Up @@ -216,7 +217,12 @@ namespace hdt

void SkyrimPhysicsWorld::onEvent(const FrameEvent & e)
{
if (!e.frameEnd) return;
auto mm = MenuManager::GetSingleton();

if ((e.gamePaused || mm->IsGamePaused()) && !m_suspended)
suspend();
else if (!(e.gamePaused || mm->IsGamePaused()) && m_suspended)
resume();

std::lock_guard<decltype(m_lock)> l(m_lock);
float interval = *(float*)(RelocationManager::s_baseAddr + offset::GameStepTimer_SlowTime);
Expand Down
11 changes: 0 additions & 11 deletions hdtSMP64/main.cpp
Expand Up @@ -27,17 +27,6 @@ namespace hdt
virtual EventResult ReceiveEvent(MenuOpenCloseEvent* evn, EventDispatcher<MenuOpenCloseEvent>* dispatcher) override
{
auto mm = MenuManager::GetSingleton();

if (mm->IsGamePaused() && !SkyrimPhysicsWorld::get()->isSuspended())
{
_DMESSAGE("game pause detected, suspending physics world");
SkyrimPhysicsWorld::get()->suspend();
}
else if (!mm->IsGamePaused() && SkyrimPhysicsWorld::get()->isSuspended())
{
_DMESSAGE("game unpause detected, resuming physics world");
SkyrimPhysicsWorld::get()->resume();
}

if (evn && evn->opening && !strcmp(evn->menuName.data, "Loading Menu"))
{
Expand Down

0 comments on commit 420aed4

Please sign in to comment.