From 9b6731de9a0980515d1d8954f46935a1445dcf02 Mon Sep 17 00:00:00 2001 From: uniboi <64006268+uniboi@users.noreply.github.com> Date: Sat, 21 Jan 2023 10:36:55 +0000 Subject: Expose Cursor Position to UI vm (#387) * add NSGetCursorPosition * fix vs filters * fix clang formatting * Create wininfo.h * Create wininfo.cpp * add wininfo to compiler options * add wininfo to filters * move wininfo * clamp position to screen size --- NorthstarDLL/NorthstarDLL.vcxproj | 5 ++++- NorthstarDLL/NorthstarDLL.vcxproj.filters | 10 +++++++++- NorthstarDLL/scripts/client/cursorposition.cpp | 24 ++++++++++++++++++++++++ NorthstarDLL/util/wininfo.cpp | 11 +++++++++++ NorthstarDLL/util/wininfo.h | 6 ++++++ 5 files changed, 54 insertions(+), 2 deletions(-) create mode 100644 NorthstarDLL/scripts/client/cursorposition.cpp create mode 100644 NorthstarDLL/util/wininfo.cpp create mode 100644 NorthstarDLL/util/wininfo.h (limited to 'NorthstarDLL') diff --git a/NorthstarDLL/NorthstarDLL.vcxproj b/NorthstarDLL/NorthstarDLL.vcxproj index 35062012..ebbeb375 100644 --- a/NorthstarDLL/NorthstarDLL.vcxproj +++ b/NorthstarDLL/NorthstarDLL.vcxproj @@ -447,6 +447,7 @@ + @@ -504,6 +505,7 @@ + @@ -536,6 +538,7 @@ + @@ -544,4 +547,4 @@ - \ No newline at end of file + diff --git a/NorthstarDLL/NorthstarDLL.vcxproj.filters b/NorthstarDLL/NorthstarDLL.vcxproj.filters index bbb0dfc0..aecfa1c5 100644 --- a/NorthstarDLL/NorthstarDLL.vcxproj.filters +++ b/NorthstarDLL/NorthstarDLL.vcxproj.filters @@ -1173,6 +1173,8 @@ Header Files\core + + Header Files Header Files\util @@ -1324,6 +1326,9 @@ Source Files\scripts\client + + Source Files\scripts\client + Source Files\scripts\client @@ -1414,6 +1419,9 @@ Source Files\core + + Source Files + Source Files @@ -1426,4 +1434,4 @@ Source Files - \ No newline at end of file + diff --git a/NorthstarDLL/scripts/client/cursorposition.cpp b/NorthstarDLL/scripts/client/cursorposition.cpp new file mode 100644 index 00000000..c80a0930 --- /dev/null +++ b/NorthstarDLL/scripts/client/cursorposition.cpp @@ -0,0 +1,24 @@ +#include "pch.h" +#include "squirrel/squirrel.h" +#include "util/wininfo.h" + +ADD_SQFUNC("vector ornull", NSGetCursorPosition, "", "", ScriptContext::UI) +{ + RECT rcClient; + POINT p; + if (GetCursorPos(&p) && ScreenToClient(*g_gameHWND, &p) && GetClientRect(*g_gameHWND, &rcClient)) + { + std::cout << rcClient.right << " : " << rcClient.bottom << "\n"; + if (GetAncestor(GetForegroundWindow(), GA_ROOTOWNER) != *g_gameHWND) + return SQRESULT_NULL; + + g_pSquirrel->pushvector( + sqvm, + {p.x > 0 ? p.x > rcClient.right ? rcClient.right : (float)p.x : 0, + p.y > 0 ? p.y > rcClient.bottom ? rcClient.bottom : (float)p.y : 0, + 0}); + return SQRESULT_NOTNULL; + } + g_pSquirrel->raiseerror(sqvm, "Failed retrieving cursor position of game window"); + return SQRESULT_ERROR; +} diff --git a/NorthstarDLL/util/wininfo.cpp b/NorthstarDLL/util/wininfo.cpp new file mode 100644 index 00000000..991deb33 --- /dev/null +++ b/NorthstarDLL/util/wininfo.cpp @@ -0,0 +1,11 @@ +#include "pch.h" + +AUTOHOOK_INIT() + +HWND* g_gameHWND; +HMODULE g_NorthstarModule = 0; + +ON_DLL_LOAD("engine.dll", WinInfo, (CModule module)) +{ + g_gameHWND = module.Offset(0x7d88a0).As(); +} diff --git a/NorthstarDLL/util/wininfo.h b/NorthstarDLL/util/wininfo.h new file mode 100644 index 00000000..ac417034 --- /dev/null +++ b/NorthstarDLL/util/wininfo.h @@ -0,0 +1,6 @@ +#pragma once +#pragma once +#include "pch.h" + +extern HWND* g_gameHWND; +extern HMODULE g_NorthstarModule; -- cgit v1.2.3