Fix input handling
Keyboard input is blocked when a menu is receiving text input Mouse inputs are blocked when the mouse is visible and hovering over an imgui item
This commit is contained in:
@@ -18,6 +18,11 @@ internal class ImGuiHandler : IDisposable
|
|||||||
private DeviceContext? _deviceContext;
|
private DeviceContext? _deviceContext;
|
||||||
private static nint _wndproc;
|
private static nint _wndproc;
|
||||||
|
|
||||||
|
public bool BlockMouse { get; private set; }
|
||||||
|
public bool BlockKeys { get; private set; }
|
||||||
|
public bool DrawMouse { get; private set; }
|
||||||
|
|
||||||
|
|
||||||
public static ImGuiHandler? Instance;
|
public static ImGuiHandler? Instance;
|
||||||
|
|
||||||
public static RenderTargetView? Rtv;
|
public static RenderTargetView? Rtv;
|
||||||
@@ -65,7 +70,11 @@ internal class ImGuiHandler : IDisposable
|
|||||||
ImGui_ImplDX11_NewFrame();
|
ImGui_ImplDX11_NewFrame();
|
||||||
ImGui_ImplWin32_NewFrame();
|
ImGui_ImplWin32_NewFrame();
|
||||||
NewFrame();
|
NewFrame();
|
||||||
|
|
||||||
|
var io = GetIO();
|
||||||
|
BlockMouse = io.WantCaptureMouse;
|
||||||
|
BlockKeys = io.WantTextInput;
|
||||||
|
DrawMouse = io.MouseDrawCursor;
|
||||||
_renderHandler.OnFrame();
|
_renderHandler.OnFrame();
|
||||||
|
|
||||||
Render();
|
Render();
|
||||||
|
33
CringeLauncher/Patches/InputPatch.cs
Normal file
33
CringeLauncher/Patches/InputPatch.cs
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
using HarmonyLib;
|
||||||
|
using VRage;
|
||||||
|
using VRage.Input;
|
||||||
|
using VRage.Input.Keyboard;
|
||||||
|
using VRage.Platform.Windows.Input;
|
||||||
|
|
||||||
|
namespace CringeLauncher.Patches;
|
||||||
|
|
||||||
|
[HarmonyPatch]
|
||||||
|
internal static class InputPatch
|
||||||
|
{
|
||||||
|
[HarmonyPrefix, HarmonyPatch(typeof(MyDirectInput), nameof(MyDirectInput.GetMouseState))]
|
||||||
|
private static bool GetMouseStatePrefix(ref MyMouseState state)
|
||||||
|
{
|
||||||
|
if (ImGuiHandler.Instance?.BlockMouse == true && (MyVRage.Platform.Input.ShowCursor || ImGuiHandler.Instance.DrawMouse))
|
||||||
|
{
|
||||||
|
state = default;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
[HarmonyPrefix, HarmonyPatch("VRage.Input.Keyboard.MyGuiLocalizedKeyboardState", "GetCurrentState")]
|
||||||
|
private static bool GetKeyboardStatePrefix(ref MyKeyboardState __result)
|
||||||
|
{
|
||||||
|
if (ImGuiHandler.Instance?.BlockKeys == true)
|
||||||
|
{
|
||||||
|
__result = default;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user