diff --git a/Dalamud/Game/Gui/AgentUpdateFlag.cs b/Dalamud/Game/Gui/AgentUpdateFlag.cs new file mode 100644 index 000000000..1c99e104c --- /dev/null +++ b/Dalamud/Game/Gui/AgentUpdateFlag.cs @@ -0,0 +1,34 @@ +using FFXIVClientStructs.FFXIV.Client.UI.Agent; + +namespace Dalamud.Game.Gui; + +/// +/// Represents a flag set by the game used by agents to conditionally update their addons. +/// +[Flags] +public enum AgentUpdateFlag : byte +{ + /// Set when an inventory has been updated. + InventoryUpdate = 1 << 0, + + /// Set when a hotbar slot has been executed, or a Gearset or Macro has been changed. + ActionBarUpdate = 1 << 1, + + /// Set when the RetainerMarket inventory has been updated. + RetainerMarketInventoryUpdate = 1 << 2, + + /// Unknown use case. + NameplateUpdate = 1 << 3, + + /// Set when the player unlocked collectibles, contents or systems. + UnlocksUpdate = 1 << 4, + + /// Set when was called. + MainCommandEnabledStateUpdate = 1 << 5, + + /// Set when any housing inventory has been updated. + HousingInventoryUpdate = 1 << 6, + + /// Set when any content inventory has been updated. + ContentInventoryUpdate = 1 << 7, +} diff --git a/Dalamud/Game/Gui/GameGui.cs b/Dalamud/Game/Gui/GameGui.cs index 51ab6b1d2..1d887055e 100644 --- a/Dalamud/Game/Gui/GameGui.cs +++ b/Dalamud/Game/Gui/GameGui.cs @@ -95,16 +95,7 @@ internal sealed unsafe class GameGui : IInternalDisposableService, IGameGui public event EventHandler? HoveredActionChanged; /// - public event Action InventoryUpdate; - - /// - public event Action ActionBarUpdate; - - /// - public event Action UnlocksUpdate; - - /// - public event Action MainCommandEnabledStateUpdate; + public event Action AgentUpdate; /// public bool GameUiHidden { get; private set; } @@ -393,20 +384,7 @@ internal sealed unsafe class GameGui : IInternalDisposableService, IGameGui if (agentUpdateFlag != RaptureAtkModule.AgentUpdateFlags.None) { - if (agentUpdateFlag.HasFlag(RaptureAtkModule.AgentUpdateFlags.InventoryUpdate) || - agentUpdateFlag.HasFlag(RaptureAtkModule.AgentUpdateFlags.RetainerMarketInventoryUpdate) || - agentUpdateFlag.HasFlag(RaptureAtkModule.AgentUpdateFlags.HousingInventoryUpdate) || - agentUpdateFlag.HasFlag(RaptureAtkModule.AgentUpdateFlags.ContentInventoryUpdate)) - this.InventoryUpdate.InvokeSafely(); - - if (agentUpdateFlag.HasFlag(RaptureAtkModule.AgentUpdateFlags.ActionBarUpdate)) - this.ActionBarUpdate.InvokeSafely(); - - if (agentUpdateFlag.HasFlag(RaptureAtkModule.AgentUpdateFlags.UnlocksUpdate)) - this.UnlocksUpdate.InvokeSafely(); - - if (agentUpdateFlag.HasFlag(RaptureAtkModule.AgentUpdateFlags.MainCommandEnabledStateUpdate)) - this.MainCommandEnabledStateUpdate.InvokeSafely(); + this.AgentUpdate.InvokeSafely((AgentUpdateFlag)agentUpdateFlag); } } } @@ -432,10 +410,7 @@ internal class GameGuiPluginScoped : IInternalDisposableService, IGameGui this.gameGuiService.UiHideToggled += this.UiHideToggledForward; this.gameGuiService.HoveredItemChanged += this.HoveredItemForward; this.gameGuiService.HoveredActionChanged += this.HoveredActionForward; - this.gameGuiService.InventoryUpdate += this.InventoryUpdateForward; - this.gameGuiService.ActionBarUpdate += this.ActionBarUpdateForward; - this.gameGuiService.UnlocksUpdate += this.UnlocksUpdateForward; - this.gameGuiService.MainCommandEnabledStateUpdate += this.MainCommandEnabledStateUpdateForward; + this.gameGuiService.AgentUpdate += this.AgentUpdateForward; } /// @@ -448,16 +423,7 @@ internal class GameGuiPluginScoped : IInternalDisposableService, IGameGui public event EventHandler? HoveredActionChanged; /// - public event Action InventoryUpdate; - - /// - public event Action ActionBarUpdate; - - /// - public event Action UnlocksUpdate; - - /// - public event Action MainCommandEnabledStateUpdate; + public event Action AgentUpdate; /// public bool GameUiHidden => this.gameGuiService.GameUiHidden; @@ -478,10 +444,7 @@ internal class GameGuiPluginScoped : IInternalDisposableService, IGameGui this.gameGuiService.UiHideToggled -= this.UiHideToggledForward; this.gameGuiService.HoveredItemChanged -= this.HoveredItemForward; this.gameGuiService.HoveredActionChanged -= this.HoveredActionForward; - this.gameGuiService.InventoryUpdate -= this.InventoryUpdateForward; - this.gameGuiService.ActionBarUpdate -= this.ActionBarUpdateForward; - this.gameGuiService.UnlocksUpdate -= this.UnlocksUpdateForward; - this.gameGuiService.MainCommandEnabledStateUpdate -= this.MainCommandEnabledStateUpdateForward; + this.gameGuiService.AgentUpdate -= this.AgentUpdateForward; this.UiHideToggled = null; this.HoveredItemChanged = null; @@ -534,11 +497,5 @@ internal class GameGuiPluginScoped : IInternalDisposableService, IGameGui private void HoveredActionForward(object sender, HoveredAction hoverAction) => this.HoveredActionChanged?.Invoke(sender, hoverAction); - private void InventoryUpdateForward() => this.InventoryUpdate.InvokeSafely(); - - private void ActionBarUpdateForward() => this.ActionBarUpdate.InvokeSafely(); - - private void UnlocksUpdateForward() => this.UnlocksUpdate.InvokeSafely(); - - private void MainCommandEnabledStateUpdateForward() => this.MainCommandEnabledStateUpdate.InvokeSafely(); + private void AgentUpdateForward(AgentUpdateFlag agentUpdateFlag) => this.AgentUpdate.InvokeSafely(agentUpdateFlag); } diff --git a/Dalamud/Game/Inventory/GameInventory.cs b/Dalamud/Game/Inventory/GameInventory.cs index e2e3c1ec2..535b84372 100644 --- a/Dalamud/Game/Inventory/GameInventory.cs +++ b/Dalamud/Game/Inventory/GameInventory.cs @@ -46,7 +46,7 @@ internal class GameInventory : IInternalDisposableService this.inventoryTypes = Enum.GetValues(); this.inventoryItems = new GameInventoryItem[this.inventoryTypes.Length][]; - this.gameGui.InventoryUpdate += this.OnInventoryUpdate; + this.gameGui.AgentUpdate += this.OnAgentUpdate; } /// @@ -58,7 +58,7 @@ internal class GameInventory : IInternalDisposableService this.subscribersPendingChange.Clear(); this.subscribersChanged = false; this.framework.Update -= this.OnFrameworkUpdate; - this.gameGui.InventoryUpdate -= this.OnInventoryUpdate; + this.gameGui.AgentUpdate -= this.OnAgentUpdate; } } @@ -309,7 +309,7 @@ internal class GameInventory : IInternalDisposableService return items; } - private void OnInventoryUpdate() + private void OnAgentUpdate(AgentUpdateFlag agentUpdateFlag) { this.inventoriesMightBeChanged |= true; } diff --git a/Dalamud/Plugin/Services/IGameGui.cs b/Dalamud/Plugin/Services/IGameGui.cs index fc37c14b7..6c2e0083e 100644 --- a/Dalamud/Plugin/Services/IGameGui.cs +++ b/Dalamud/Plugin/Services/IGameGui.cs @@ -27,25 +27,10 @@ public unsafe interface IGameGui public event EventHandler HoveredActionChanged; /// - /// Event that is fired when the inventory has been updated. + /// Fired when the game sets one or more values, + /// used by agents to conditionally update their addons. /// - event Action InventoryUpdate; - - /// - /// Fired when the action bar needs to be updated, e.g. after changing Class/Job, - /// updating Gear Sets, modifying Macros, or executing a hotbar slot. - /// - event Action ActionBarUpdate; - - /// - /// Event that is fired when collectibles, content or systems were unlocked. - /// - event Action UnlocksUpdate; - - /// - /// Event that is fired when the enable state of MainCommands has been updated. - /// - event Action MainCommandEnabledStateUpdate; + event Action AgentUpdate; /// /// Gets a value indicating whether the game UI is hidden.