diff --git a/Dalamud/Game/Addon/Lifecycle/AddonArgTypes/AddonArgs.cs b/Dalamud/Game/Addon/Lifecycle/AddonArgTypes/AddonArgs.cs index 1d0087c5b..f069a0b86 100644 --- a/Dalamud/Game/Addon/Lifecycle/AddonArgTypes/AddonArgs.cs +++ b/Dalamud/Game/Addon/Lifecycle/AddonArgTypes/AddonArgs.cs @@ -54,6 +54,15 @@ public abstract unsafe class AddonArgs return name == addonName; } + /// + /// Clears this AddonArgs values. + /// + internal virtual void Clear() + { + this.addonName = null; + this.Addon = 0; + } + /// /// Helper method for ensuring the name of the addon is valid. /// diff --git a/Dalamud/Game/Addon/Lifecycle/AddonArgTypes/AddonReceiveEventArgs.cs b/Dalamud/Game/Addon/Lifecycle/AddonArgTypes/AddonReceiveEventArgs.cs index a557b0cb3..980fe4f2f 100644 --- a/Dalamud/Game/Addon/Lifecycle/AddonArgTypes/AddonReceiveEventArgs.cs +++ b/Dalamud/Game/Addon/Lifecycle/AddonArgTypes/AddonReceiveEventArgs.cs @@ -41,4 +41,14 @@ public class AddonReceiveEventArgs : AddonArgs, ICloneable /// object ICloneable.Clone() => this.Clone(); + + /// + internal override void Clear() + { + base.Clear(); + this.AtkEventType = default; + this.EventParam = default; + this.AtkEvent = default; + this.Data = default; + } } diff --git a/Dalamud/Game/Addon/Lifecycle/AddonArgTypes/AddonRefreshArgs.cs b/Dalamud/Game/Addon/Lifecycle/AddonArgTypes/AddonRefreshArgs.cs index 6e1b11ead..d28631c3c 100644 --- a/Dalamud/Game/Addon/Lifecycle/AddonArgTypes/AddonRefreshArgs.cs +++ b/Dalamud/Game/Addon/Lifecycle/AddonArgTypes/AddonRefreshArgs.cs @@ -38,4 +38,12 @@ public class AddonRefreshArgs : AddonArgs, ICloneable /// object ICloneable.Clone() => this.Clone(); + + /// + internal override void Clear() + { + base.Clear(); + this.AtkValueCount = default; + this.AtkValues = default; + } } diff --git a/Dalamud/Game/Addon/Lifecycle/AddonArgTypes/AddonRequestedUpdateArgs.cs b/Dalamud/Game/Addon/Lifecycle/AddonArgTypes/AddonRequestedUpdateArgs.cs index 26357abb0..e87a980fd 100644 --- a/Dalamud/Game/Addon/Lifecycle/AddonArgTypes/AddonRequestedUpdateArgs.cs +++ b/Dalamud/Game/Addon/Lifecycle/AddonArgTypes/AddonRequestedUpdateArgs.cs @@ -1,4 +1,4 @@ -namespace Dalamud.Game.Addon.Lifecycle.AddonArgTypes; +namespace Dalamud.Game.Addon.Lifecycle.AddonArgTypes; /// /// Addon argument data for OnRequestedUpdate events. @@ -31,4 +31,12 @@ public class AddonRequestedUpdateArgs : AddonArgs, ICloneable /// object ICloneable.Clone() => this.Clone(); + + /// + internal override void Clear() + { + base.Clear(); + this.NumberArrayData = default; + this.StringArrayData = default; + } } diff --git a/Dalamud/Game/Addon/Lifecycle/AddonArgTypes/AddonSetupArgs.cs b/Dalamud/Game/Addon/Lifecycle/AddonArgTypes/AddonSetupArgs.cs index 19c93ce25..0dd9ecee2 100644 --- a/Dalamud/Game/Addon/Lifecycle/AddonArgTypes/AddonSetupArgs.cs +++ b/Dalamud/Game/Addon/Lifecycle/AddonArgTypes/AddonSetupArgs.cs @@ -1,4 +1,4 @@ -using FFXIVClientStructs.FFXIV.Component.GUI; +using FFXIVClientStructs.FFXIV.Component.GUI; namespace Dalamud.Game.Addon.Lifecycle.AddonArgTypes; @@ -38,4 +38,12 @@ public class AddonSetupArgs : AddonArgs, ICloneable /// object ICloneable.Clone() => this.Clone(); + + /// + internal override void Clear() + { + base.Clear(); + this.AtkValueCount = default; + this.AtkValues = default; + } } diff --git a/Dalamud/Game/Addon/Lifecycle/AddonArgTypes/AddonUpdateArgs.cs b/Dalamud/Game/Addon/Lifecycle/AddonArgTypes/AddonUpdateArgs.cs index cc34a7531..a263f6ae4 100644 --- a/Dalamud/Game/Addon/Lifecycle/AddonArgTypes/AddonUpdateArgs.cs +++ b/Dalamud/Game/Addon/Lifecycle/AddonArgTypes/AddonUpdateArgs.cs @@ -35,4 +35,11 @@ public class AddonUpdateArgs : AddonArgs, ICloneable /// object ICloneable.Clone() => this.Clone(); + + /// + internal override void Clear() + { + base.Clear(); + this.TimeDeltaInternal = default; + } } diff --git a/Dalamud/Game/Addon/Lifecycle/AddonLifecycle.cs b/Dalamud/Game/Addon/Lifecycle/AddonLifecycle.cs index ee9f3a44c..e43ea848c 100644 --- a/Dalamud/Game/Addon/Lifecycle/AddonLifecycle.cs +++ b/Dalamud/Game/Addon/Lifecycle/AddonLifecycle.cs @@ -239,6 +239,7 @@ internal unsafe class AddonLifecycle : IInternalDisposableService } using var returner = this.argsPool.Rent(out AddonSetupArgs arg); + arg.Clear(); arg.Addon = (nint)addon; arg.AtkValueCount = valueCount; arg.AtkValues = (nint)values; @@ -271,6 +272,7 @@ internal unsafe class AddonLifecycle : IInternalDisposableService } using var returner = this.argsPool.Rent(out AddonFinalizeArgs arg); + arg.Clear(); arg.Addon = (nint)atkUnitBase[0]; this.InvokeListenersSafely(AddonEvent.PreFinalize, arg); @@ -287,6 +289,7 @@ internal unsafe class AddonLifecycle : IInternalDisposableService private void OnAddonDraw(AtkUnitBase* addon) { using var returner = this.argsPool.Rent(out AddonDrawArgs arg); + arg.Clear(); arg.Addon = (nint)addon; this.InvokeListenersSafely(AddonEvent.PreDraw, arg); @@ -305,6 +308,7 @@ internal unsafe class AddonLifecycle : IInternalDisposableService private void OnAddonUpdate(AtkUnitBase* addon, float delta) { using var returner = this.argsPool.Rent(out AddonUpdateArgs arg); + arg.Clear(); arg.Addon = (nint)addon; arg.TimeDeltaInternal = delta; this.InvokeListenersSafely(AddonEvent.PreUpdate, arg); @@ -326,6 +330,7 @@ internal unsafe class AddonLifecycle : IInternalDisposableService var result = false; using var returner = this.argsPool.Rent(out AddonRefreshArgs arg); + arg.Clear(); arg.Addon = (nint)addon; arg.AtkValueCount = valueCount; arg.AtkValues = (nint)values; @@ -349,6 +354,7 @@ internal unsafe class AddonLifecycle : IInternalDisposableService private void OnRequestedUpdate(AtkUnitBase* addon, NumberArrayData** numberArrayData, StringArrayData** stringArrayData) { using var returner = this.argsPool.Rent(out AddonRequestedUpdateArgs arg); + arg.Clear(); arg.Addon = (nint)addon; arg.NumberArrayData = (nint)numberArrayData; arg.StringArrayData = (nint)stringArrayData; diff --git a/Dalamud/Game/Addon/Lifecycle/AddonLifecycleReceiveEventListener.cs b/Dalamud/Game/Addon/Lifecycle/AddonLifecycleReceiveEventListener.cs index 110c67491..0d2bcc7f2 100644 --- a/Dalamud/Game/Addon/Lifecycle/AddonLifecycleReceiveEventListener.cs +++ b/Dalamud/Game/Addon/Lifecycle/AddonLifecycleReceiveEventListener.cs @@ -86,6 +86,7 @@ internal unsafe class AddonLifecycleReceiveEventListener : IDisposable } using var returner = this.argsPool.Rent(out AddonReceiveEventArgs arg); + arg.Clear(); arg.Addon = (nint)addon; arg.AtkEventType = (byte)eventType; arg.EventParam = eventParam;