sigma update
This commit is contained in:
@@ -13,16 +13,20 @@ namespace LightlessSync.Services;
|
||||
public sealed class UiService : DisposableMediatorSubscriberBase
|
||||
{
|
||||
private readonly List<WindowMediatorSubscriberBase> _createdWindows = [];
|
||||
private readonly List<WindowMediatorSubscriberBase> _registeredWindows = [];
|
||||
private readonly HashSet<WindowMediatorSubscriberBase> _uiHiddenWindows = [];
|
||||
private readonly IUiBuilder _uiBuilder;
|
||||
private readonly FileDialogManager _fileDialogManager;
|
||||
private readonly ILogger<UiService> _logger;
|
||||
private readonly LightlessConfigService _lightlessConfigService;
|
||||
private readonly DalamudUtilService _dalamudUtilService;
|
||||
private readonly WindowSystem _windowSystem;
|
||||
private readonly UiFactory _uiFactory;
|
||||
private readonly PairFactory _pairFactory;
|
||||
private bool _uiHideActive;
|
||||
|
||||
public UiService(ILogger<UiService> logger, IUiBuilder uiBuilder,
|
||||
LightlessConfigService lightlessConfigService, WindowSystem windowSystem,
|
||||
LightlessConfigService lightlessConfigService, DalamudUtilService dalamudUtilService, WindowSystem windowSystem,
|
||||
IEnumerable<WindowMediatorSubscriberBase> windows,
|
||||
UiFactory uiFactory, FileDialogManager fileDialogManager,
|
||||
LightlessMediator lightlessMediator, PairFactory pairFactory) : base(logger, lightlessMediator)
|
||||
@@ -31,6 +35,7 @@ public sealed class UiService : DisposableMediatorSubscriberBase
|
||||
_logger.LogTrace("Creating {type}", GetType().Name);
|
||||
_uiBuilder = uiBuilder;
|
||||
_lightlessConfigService = lightlessConfigService;
|
||||
_dalamudUtilService = dalamudUtilService;
|
||||
_windowSystem = windowSystem;
|
||||
_uiFactory = uiFactory;
|
||||
_pairFactory = pairFactory;
|
||||
@@ -43,6 +48,7 @@ public sealed class UiService : DisposableMediatorSubscriberBase
|
||||
|
||||
foreach (var window in windows)
|
||||
{
|
||||
_registeredWindows.Add(window);
|
||||
_windowSystem.AddWindow(window);
|
||||
}
|
||||
|
||||
@@ -176,6 +182,8 @@ public sealed class UiService : DisposableMediatorSubscriberBase
|
||||
{
|
||||
_windowSystem.RemoveWindow(msg.Window);
|
||||
_createdWindows.Remove(msg.Window);
|
||||
_registeredWindows.Remove(msg.Window);
|
||||
_uiHiddenWindows.Remove(msg.Window);
|
||||
msg.Window.Dispose();
|
||||
});
|
||||
}
|
||||
@@ -219,12 +227,72 @@ public sealed class UiService : DisposableMediatorSubscriberBase
|
||||
MainStyle.PushStyle();
|
||||
try
|
||||
{
|
||||
var hideOtherUi = ShouldHideOtherUi();
|
||||
UpdateUiHideState(hideOtherUi);
|
||||
_windowSystem.Draw();
|
||||
_fileDialogManager.Draw();
|
||||
if (!hideOtherUi)
|
||||
_fileDialogManager.Draw();
|
||||
}
|
||||
finally
|
||||
{
|
||||
MainStyle.PopStyle();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private bool ShouldHideOtherUi()
|
||||
{
|
||||
var config = _lightlessConfigService.Current;
|
||||
if (!config.ShowUiWhenUiHidden && _dalamudUtilService.IsGameUiHidden)
|
||||
return true;
|
||||
|
||||
if (!config.ShowUiInGpose && _dalamudUtilService.IsInGpose)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private void UpdateUiHideState(bool hideOtherUi)
|
||||
{
|
||||
if (!hideOtherUi)
|
||||
{
|
||||
if (_uiHideActive)
|
||||
{
|
||||
foreach (var window in _uiHiddenWindows)
|
||||
{
|
||||
window.IsOpen = true;
|
||||
}
|
||||
|
||||
_uiHiddenWindows.Clear();
|
||||
_uiHideActive = false;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
_uiHideActive = true;
|
||||
foreach (var window in EnumerateManagedWindows())
|
||||
{
|
||||
if (window is ZoneChatUi)
|
||||
continue;
|
||||
|
||||
if (!window.IsOpen)
|
||||
continue;
|
||||
|
||||
_uiHiddenWindows.Add(window);
|
||||
window.IsOpen = false;
|
||||
}
|
||||
}
|
||||
|
||||
private IEnumerable<WindowMediatorSubscriberBase> EnumerateManagedWindows()
|
||||
{
|
||||
foreach (var window in _registeredWindows)
|
||||
{
|
||||
yield return window;
|
||||
}
|
||||
|
||||
foreach (var window in _createdWindows)
|
||||
{
|
||||
yield return window;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user