aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoruniboi <64006268+uniboi@users.noreply.github.com>2023-01-21 10:36:55 +0000
committerGitHub <noreply@github.com>2023-01-21 10:36:55 +0000
commit9b6731de9a0980515d1d8954f46935a1445dcf02 (patch)
tree7dca50d57b17518e0e4cd1ebbb421e9c92b602c0
parent3a6162627155ec48244c5870729c67fd201e6d6f (diff)
downloadNorthstarLauncher-9b6731de9a0980515d1d8954f46935a1445dcf02.tar.gz
NorthstarLauncher-9b6731de9a0980515d1d8954f46935a1445dcf02.zip
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
-rw-r--r--NorthstarDLL/NorthstarDLL.vcxproj5
-rw-r--r--NorthstarDLL/NorthstarDLL.vcxproj.filters10
-rw-r--r--NorthstarDLL/scripts/client/cursorposition.cpp24
-rw-r--r--NorthstarDLL/util/wininfo.cpp11
-rw-r--r--NorthstarDLL/util/wininfo.h6
5 files changed, 54 insertions, 2 deletions
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 @@
<ClInclude Include="squirrel\squirreldatatypes.h" />
<ClInclude Include="util\utils.h" />
<ClInclude Include="util\version.h" />
+ <ClInclude Include="util\wininfo.h" />
</ItemGroup>
<ItemGroup>
<None Include="..\include\spdlog\fmt\bundled\LICENSE.rst" />
@@ -504,6 +505,7 @@
</ClCompile>
<ClCompile Include="plugins\plugins.cpp" />
<ClCompile Include="scripts\client\clientchathooks.cpp" />
+ <ClCompile Include="scripts\client\cursorposition.cpp" />
<ClCompile Include="scripts\client\scriptbrowserhooks.cpp" />
<ClCompile Include="scripts\client\scriptmainmenupromos.cpp" />
<ClCompile Include="scripts\client\scriptmodmenu.cpp" />
@@ -536,6 +538,7 @@
<ClCompile Include="util\printmaps.cpp" />
<ClCompile Include="util\utils.cpp" />
<ClCompile Include="util\version.cpp" />
+ <ClCompile Include="util\wininfo.cpp" />
</ItemGroup>
<ItemGroup>
<MASM Include="audio_asm.asm" />
@@ -544,4 +547,4 @@
<ImportGroup Label="ExtensionTargets">
<Import Project="$(VCTargetsPath)\BuildCustomizations\masm.targets" />
</ImportGroup>
-</Project> \ No newline at end of file
+</Project>
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 @@
<ClInclude Include="core\macros.h">
<Filter>Header Files\core</Filter>
</ClInclude>
+ <ClInclude Include="util\wininfo.h">
+ <Filter>Header Files</Filter>
<ClInclude Include="util\utils.h">
<Filter>Header Files\util</Filter>
</ClInclude>
@@ -1324,6 +1326,9 @@
<ClCompile Include="scripts\client\clientchathooks.cpp">
<Filter>Source Files\scripts\client</Filter>
</ClCompile>
+ <ClCompile Include="scripts\client\cursorposition.cpp">
+ <Filter>Source Files\scripts\client</Filter>
+ </ClCompile>
<ClCompile Include="scripts\client\scriptbrowserhooks.cpp">
<Filter>Source Files\scripts\client</Filter>
</ClCompile>
@@ -1414,6 +1419,9 @@
<ClCompile Include="core\sourceinterface.cpp">
<Filter>Source Files\core</Filter>
</ClCompile>
+ <ClCompile Include="util\wininfo.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
<ClCompile Include="client\rejectconnectionfixes.cpp">
<Filter>Source Files</Filter>
</ClCompile>
@@ -1426,4 +1434,4 @@
<Filter>Source Files</Filter>
</MASM>
</ItemGroup>
-</Project> \ No newline at end of file
+</Project>
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<context>->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<context>->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<HWND*>();
+}
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;