diff options
author | uniboi <64006268+uniboi@users.noreply.github.com> | 2023-01-21 10:36:55 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-01-21 10:36:55 +0000 |
commit | 9b6731de9a0980515d1d8954f46935a1445dcf02 (patch) | |
tree | 7dca50d57b17518e0e4cd1ebbb421e9c92b602c0 /NorthstarDLL | |
parent | 3a6162627155ec48244c5870729c67fd201e6d6f (diff) | |
download | NorthstarLauncher-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
Diffstat (limited to 'NorthstarDLL')
-rw-r--r-- | NorthstarDLL/NorthstarDLL.vcxproj | 5 | ||||
-rw-r--r-- | NorthstarDLL/NorthstarDLL.vcxproj.filters | 10 | ||||
-rw-r--r-- | NorthstarDLL/scripts/client/cursorposition.cpp | 24 | ||||
-rw-r--r-- | NorthstarDLL/util/wininfo.cpp | 11 | ||||
-rw-r--r-- | NorthstarDLL/util/wininfo.h | 6 |
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; |