UI/ui_state_manager.cs
using System;
using System.Collections.Generic;
using System.Linq;
using Sandbox;
public sealed class UIStateManager : Component
{
public static UIStateManager Instance { get; private set; }
private static readonly HashSet<object> _activeLocks = new();
public static bool IsGameplayLocked => _activeLocks.Count > 0;
protected override void OnAwake()
{
Instance = this;
UpdateMouseState();
}
public static void RequestFocus( object source )
{
if ( source == null ) return;
_activeLocks.Add( source );
UpdateMouseState();
}
public static void ReleaseFocus( object source )
{
if ( source == null ) return;
_activeLocks.Remove( source );
UpdateMouseState();
}
public static void ClearAllFocus()
{
_activeLocks.Clear();
UpdateMouseState();
}
private static void UpdateMouseState()
{
Mouse.Visibility = IsGameplayLocked ? MouseVisibility.Visible : MouseVisibility.Hidden;
}
}