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