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.