diff --git a/CringeLauncher/ImGuiHandler.cs b/CringeLauncher/ImGuiHandler.cs
index decd8b5..97a9bbd 100644
--- a/CringeLauncher/ImGuiHandler.cs
+++ b/CringeLauncher/ImGuiHandler.cs
@@ -15,7 +15,7 @@ using Sandbox.Graphics.GUI;
namespace CringeLauncher;
-internal class ImGuiHandler : IDisposable
+internal sealed class ImGuiHandler : IGuiHandler, IDisposable
{
private DeviceContext? _deviceContext;
private int _blockKeysCounter;
@@ -25,16 +25,23 @@ internal class ImGuiHandler : IDisposable
public bool BlockKeys => _blockKeysCounter > 0;
public bool DrawMouse { get; private set; }
- internal bool MouseToggle { get; set; }
- internal bool MouseKey { get; set; }
+ public bool MouseToggle { get; set; }
+ public bool MouseKey { get; set; }
+
+ public bool Initialized => _init;
public static ImGuiHandler? Instance;
public static RenderTargetView? Rtv;
- private readonly IRootRenderComponent _renderHandler = new RenderHandler();
+ private readonly IRootRenderComponent _renderHandler;
private static bool _init;
+ public ImGuiHandler()
+ {
+ _renderHandler = new RenderHandler(this);
+ }
+
public unsafe void Init(nint windowHandle, Device1 device, DeviceContext deviceContext)
{
_deviceContext = deviceContext;
@@ -84,7 +91,7 @@ internal class ImGuiHandler : IDisposable
else
_blockKeysCounter--;
- DrawMouse = io.MouseDrawCursor || MouseToggle || MouseKey;
+ DrawMouse = io.MouseDrawCursor || MouseToggle || MouseKey;
var focusedScreen = MyScreenManager.GetScreenWithFocus(); //migrated logic from MyDX9Gui.Draw
diff --git a/CringePlugins/Abstractions/IGuiHandler.cs b/CringePlugins/Abstractions/IGuiHandler.cs
new file mode 100644
index 0000000..bb9d5e0
--- /dev/null
+++ b/CringePlugins/Abstractions/IGuiHandler.cs
@@ -0,0 +1,23 @@
+namespace CringePlugins.Abstractions;
+public interface IGuiHandler
+{
+ ///
+ /// Whether or not the Gui Handler is blocking keys from the game's input system.
+ ///
+ bool BlockKeys { get; }
+
+ ///
+ /// Whether or not the Gui Handler is blocking mouse input (excluding position) from the game's input system.
+ ///
+ bool BlockMouse { get; }
+
+ ///
+ /// Whether or not the Gui Handler is drawing the mouse cursor via keybinds (does not include when the game is drawing the mouse cursor).
+ ///
+ bool DrawMouse { get; }
+
+ ///
+ /// Whether or not the Gui Handler is initialized.
+ ///
+ bool Initialized { get; }
+}
diff --git a/CringePlugins/Render/RenderHandler.cs b/CringePlugins/Render/RenderHandler.cs
index 9d800ef..5cb413c 100644
--- a/CringePlugins/Render/RenderHandler.cs
+++ b/CringePlugins/Render/RenderHandler.cs
@@ -8,15 +8,18 @@ namespace CringePlugins.Render;
public sealed class RenderHandler : IRootRenderComponent
{
private static readonly Logger Log = LogManager.GetCurrentClassLogger();
-
+
private static RenderHandler? _current;
+ private static IGuiHandler? _guiHandler;
public static RenderHandler Current => _current ?? throw new InvalidOperationException("Render is not yet initialized");
-
+ public static IGuiHandler GuiHandler => _guiHandler ?? throw new InvalidOperationException("Render is not yet initialized");
+
private readonly ConcurrentBag _components = [];
- internal RenderHandler()
+ internal RenderHandler(IGuiHandler guiHandler)
{
_current = this;
+ _guiHandler = guiHandler;
}
public void RegisterComponent(TComponent instance) where TComponent : IRenderComponent
@@ -29,7 +32,7 @@ public sealed class RenderHandler : IRootRenderComponent
#if DEBUG
ImGui.ShowDemoWindow();
#endif
-
+
foreach (var (instanceType, renderComponent) in _components)
{
try