mirror of
https://github.com/goatcorp/Dalamud.git
synced 2025-12-12 18:27:23 +01:00
feat: add /xlui command to disable all ImGui draw events, corresponding events to allow plugins to remove their atk mods
This commit is contained in:
parent
f9eb853a18
commit
cadcddf7b1
4 changed files with 126 additions and 28 deletions
|
|
@ -131,6 +131,13 @@ namespace Dalamud.Interface.Internal
|
||||||
HelpMessage = "Dalamud version info",
|
HelpMessage = "Dalamud version info",
|
||||||
});
|
});
|
||||||
|
|
||||||
|
commandManager.AddHandler("/xlui", new CommandInfo(this.OnUiCommand)
|
||||||
|
{
|
||||||
|
HelpMessage = Loc.Localize(
|
||||||
|
"DalamudUiModeHelp",
|
||||||
|
"Toggle Dalamud UI display modes. Native UI modifications may also be affected by this, but that depends on the plugin."),
|
||||||
|
});
|
||||||
|
|
||||||
commandManager.AddHandler("/imdebug", new CommandInfo(this.OnDebugImInfoCommand)
|
commandManager.AddHandler("/imdebug", new CommandInfo(this.OnDebugImInfoCommand)
|
||||||
{
|
{
|
||||||
HelpMessage = "ImGui DEBUG",
|
HelpMessage = "ImGui DEBUG",
|
||||||
|
|
@ -366,5 +373,31 @@ namespace Dalamud.Interface.Internal
|
||||||
{
|
{
|
||||||
Service<DalamudInterface>.Get().ToggleSettingsWindow();
|
Service<DalamudInterface>.Get().ToggleSettingsWindow();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void OnUiCommand(string command, string arguments)
|
||||||
|
{
|
||||||
|
var im = Service<InterfaceManager>.Get();
|
||||||
|
|
||||||
|
im.IsDispatchingEvents = arguments switch
|
||||||
|
{
|
||||||
|
"show" => true,
|
||||||
|
"hide" => false,
|
||||||
|
_ => !im.IsDispatchingEvents,
|
||||||
|
};
|
||||||
|
|
||||||
|
var pm = Service<PluginManager>.Get();
|
||||||
|
|
||||||
|
foreach (var plugin in pm.InstalledPlugins)
|
||||||
|
{
|
||||||
|
if (im.IsDispatchingEvents)
|
||||||
|
{
|
||||||
|
plugin.DalamudInterface?.UiBuilder.NotifyShowUi();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
plugin.DalamudInterface?.UiBuilder.NotifyHideUi();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -151,7 +151,7 @@ namespace Dalamud.Interface.Internal
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets an action that is executed right after font fallback mode has been changed.
|
/// Gets or sets an action that is executed right after font fallback mode has been changed.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public event Action<bool> OnFallbackFontModeChange;
|
public event Action<bool> FallbackFontModeChange;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the default ImGui font.
|
/// Gets the default ImGui font.
|
||||||
|
|
@ -202,6 +202,11 @@ namespace Dalamud.Interface.Internal
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public bool IsReady => this.scene != null;
|
public bool IsReady => this.scene != null;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets a value indicating whether or not Draw events should be dispatched.
|
||||||
|
/// </summary>
|
||||||
|
public bool IsDispatchingEvents { get; set; } = true;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets a value indicating whether the font has been loaded in fallback mode.
|
/// Gets or sets a value indicating whether the font has been loaded in fallback mode.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
@ -214,7 +219,7 @@ namespace Dalamud.Interface.Internal
|
||||||
return;
|
return;
|
||||||
|
|
||||||
this.isFallbackFontMode = value;
|
this.isFallbackFontMode = value;
|
||||||
this.OnFallbackFontModeChange?.Invoke(value);
|
this.FallbackFontModeChange?.Invoke(value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1109,7 +1114,10 @@ namespace Dalamud.Interface.Internal
|
||||||
WindowSystem.FocusedWindowSystemNamespace = string.Empty;
|
WindowSystem.FocusedWindowSystemNamespace = string.Empty;
|
||||||
|
|
||||||
var snap = ImGuiManagedAsserts.GetSnapshot();
|
var snap = ImGuiManagedAsserts.GetSnapshot();
|
||||||
this.Draw?.Invoke();
|
|
||||||
|
if (this.IsDispatchingEvents)
|
||||||
|
this.Draw?.Invoke();
|
||||||
|
|
||||||
ImGuiManagedAsserts.ReportProblems("Dalamud Core", snap);
|
ImGuiManagedAsserts.ReportProblems("Dalamud Core", snap);
|
||||||
|
|
||||||
Service<NotificationManager>.Get().Draw();
|
Service<NotificationManager>.Get().Draw();
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,7 @@ namespace Dalamud.Interface.Internal.Windows
|
||||||
var interfaceManager = Service<InterfaceManager>.Get();
|
var interfaceManager = Service<InterfaceManager>.Get();
|
||||||
var dalamud = Service<Dalamud>.Get();
|
var dalamud = Service<Dalamud>.Get();
|
||||||
|
|
||||||
Service<InterfaceManager>.Get().OnFallbackFontModeChange += this.OnFallbackFontModeChange;
|
Service<InterfaceManager>.Get().FallbackFontModeChange += this.OnFallbackFontModeChange;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static string Title => Loc.Localize("FallbackFontNoticeWindowTitle", "Fallback Font Mode Active");
|
private static string Title => Loc.Localize("FallbackFontNoticeWindowTitle", "Fallback Font Mode Active");
|
||||||
|
|
@ -80,7 +80,7 @@ namespace Dalamud.Interface.Internal.Windows
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
Service<InterfaceManager>.Get().OnFallbackFontModeChange -= this.OnFallbackFontModeChange;
|
Service<InterfaceManager>.Get().FallbackFontModeChange -= this.OnFallbackFontModeChange;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnFallbackFontModeChange(bool mode)
|
private void OnFallbackFontModeChange(bool mode)
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,8 @@ namespace Dalamud.Interface
|
||||||
private readonly Stopwatch stopwatch;
|
private readonly Stopwatch stopwatch;
|
||||||
private readonly string namespaceName;
|
private readonly string namespaceName;
|
||||||
|
|
||||||
private bool hasErrorWindow;
|
private bool hasErrorWindow = false;
|
||||||
|
private bool lastFrameUiHideState = false;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Initializes a new instance of the <see cref="UiBuilder"/> class and registers it.
|
/// Initializes a new instance of the <see cref="UiBuilder"/> class and registers it.
|
||||||
|
|
@ -78,6 +79,18 @@ namespace Dalamud.Interface
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public event Action AfterBuildFonts;
|
public event Action AfterBuildFonts;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets an action that is called when plugin UI or interface modifications are supposed to be hidden.
|
||||||
|
/// These may be fired consecutively.
|
||||||
|
/// </summary>
|
||||||
|
public event Action ShowUi;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets an action that is called when plugin UI or interface modifications are supposed to be shown.
|
||||||
|
/// These may be fired consecutively.
|
||||||
|
/// </summary>
|
||||||
|
public event Action HideUi;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the default Dalamud font based on Noto Sans CJK Medium in 17pt - supporting all game languages and icons.
|
/// Gets the default Dalamud font based on Noto Sans CJK Medium in 17pt - supporting all game languages and icons.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
@ -137,6 +150,36 @@ namespace Dalamud.Interface
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public ulong FrameCount { get; private set; } = 0;
|
public ulong FrameCount { get; private set; } = 0;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets a value indicating whether or not a cutscene is playing.
|
||||||
|
/// </summary>
|
||||||
|
public bool CutsceneActive
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
var condition = Service<Condition>.Get();
|
||||||
|
return condition[ConditionFlag.OccupiedInCutSceneEvent]
|
||||||
|
|| condition[ConditionFlag.WatchingCutscene78];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets a value indicating whether or not gpose is active.
|
||||||
|
/// </summary>
|
||||||
|
public bool GposeActive
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
var condition = Service<Condition>.Get();
|
||||||
|
return condition[ConditionFlag.WatchingCutscene];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets a value indicating whether this plugin should modify the game's interface at this time.
|
||||||
|
/// </summary>
|
||||||
|
public bool ShouldModifyUi => Service<InterfaceManager>.GetNullable()?.IsDispatchingEvents ?? true;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets a value indicating whether statistics about UI draw time should be collected.
|
/// Gets or sets a value indicating whether statistics about UI draw time should be collected.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
@ -166,25 +209,6 @@ namespace Dalamud.Interface
|
||||||
/// </summary>
|
/// </summary>
|
||||||
internal List<long> DrawTimeHistory { get; set; } = new List<long>();
|
internal List<long> DrawTimeHistory { get; set; } = new List<long>();
|
||||||
|
|
||||||
private bool CutsceneActive
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var condition = Service<Condition>.Get();
|
|
||||||
return condition[ConditionFlag.OccupiedInCutSceneEvent]
|
|
||||||
|| condition[ConditionFlag.WatchingCutscene78];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private bool GposeActive
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var condition = Service<Condition>.Get();
|
|
||||||
return condition[ConditionFlag.WatchingCutscene];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Loads an image from the specified file.
|
/// Loads an image from the specified file.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
@ -261,16 +285,49 @@ namespace Dalamud.Interface
|
||||||
this.OpenConfigUi?.Invoke();
|
this.OpenConfigUi?.Invoke();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Notify this UiBuilder about plugin UI being hidden.
|
||||||
|
/// </summary>
|
||||||
|
internal void NotifyHideUi()
|
||||||
|
{
|
||||||
|
this.HideUi?.Invoke();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Notify this UiBuilder about plugin UI being shown.
|
||||||
|
/// </summary>
|
||||||
|
internal void NotifyShowUi()
|
||||||
|
{
|
||||||
|
this.ShowUi?.Invoke();
|
||||||
|
}
|
||||||
|
|
||||||
private void OnDraw()
|
private void OnDraw()
|
||||||
{
|
{
|
||||||
var configuration = Service<DalamudConfiguration>.Get();
|
var configuration = Service<DalamudConfiguration>.Get();
|
||||||
var gameGui = Service<GameGui>.Get();
|
var gameGui = Service<GameGui>.Get();
|
||||||
var interfaceManager = Service<InterfaceManager>.Get();
|
var interfaceManager = Service<InterfaceManager>.Get();
|
||||||
|
|
||||||
if ((gameGui.GameUiHidden && configuration.ToggleUiHide && !(this.DisableUserUiHide || this.DisableAutomaticUiHide)) ||
|
if ((gameGui.GameUiHidden && configuration.ToggleUiHide &&
|
||||||
(this.CutsceneActive && configuration.ToggleUiHideDuringCutscenes && !(this.DisableCutsceneUiHide || this.DisableAutomaticUiHide)) ||
|
!(this.DisableUserUiHide || this.DisableAutomaticUiHide)) ||
|
||||||
(this.GposeActive && configuration.ToggleUiHideDuringGpose && !(this.DisableGposeUiHide || this.DisableAutomaticUiHide)))
|
(this.CutsceneActive && configuration.ToggleUiHideDuringCutscenes &&
|
||||||
|
!(this.DisableCutsceneUiHide || this.DisableAutomaticUiHide)) ||
|
||||||
|
(this.GposeActive && configuration.ToggleUiHideDuringGpose &&
|
||||||
|
!(this.DisableGposeUiHide || this.DisableAutomaticUiHide)))
|
||||||
|
{
|
||||||
|
if (!this.lastFrameUiHideState)
|
||||||
|
{
|
||||||
|
this.lastFrameUiHideState = true;
|
||||||
|
this.HideUi?.Invoke();
|
||||||
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.lastFrameUiHideState)
|
||||||
|
{
|
||||||
|
this.lastFrameUiHideState = false;
|
||||||
|
this.ShowUi?.Invoke();
|
||||||
|
}
|
||||||
|
|
||||||
if (!interfaceManager.FontsReady)
|
if (!interfaceManager.FontsReady)
|
||||||
return;
|
return;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue