mirror of
https://github.com/goatcorp/Dalamud.git
synced 2025-12-15 13:14:17 +01:00
Add typed event variants
This commit is contained in:
parent
b2fc0c4ad2
commit
35b0d53e80
2 changed files with 123 additions and 0 deletions
|
|
@ -86,6 +86,24 @@ internal class GameInventory : IDisposable, IServiceType, IGameInventory
|
|||
/// <inheritdoc/>
|
||||
public event IGameInventory.InventoryChangedDelegate? ItemMerged;
|
||||
|
||||
/// <inheritdoc/>
|
||||
public event IGameInventory.InventoryChangedDelegate<InventoryItemAddedArgs>? ItemAddedExplicit;
|
||||
|
||||
/// <inheritdoc/>
|
||||
public event IGameInventory.InventoryChangedDelegate<InventoryItemRemovedArgs>? ItemRemovedExplicit;
|
||||
|
||||
/// <inheritdoc/>
|
||||
public event IGameInventory.InventoryChangedDelegate<InventoryItemChangedArgs>? ItemChangedExplicit;
|
||||
|
||||
/// <inheritdoc/>
|
||||
public event IGameInventory.InventoryChangedDelegate<InventoryItemMovedArgs>? ItemMovedExplicit;
|
||||
|
||||
/// <inheritdoc/>
|
||||
public event IGameInventory.InventoryChangedDelegate<InventoryItemSplitArgs>? ItemSplitExplicit;
|
||||
|
||||
/// <inheritdoc/>
|
||||
public event IGameInventory.InventoryChangedDelegate<InventoryItemMergedArgs>? ItemMergedExplicit;
|
||||
|
||||
/// <inheritdoc/>
|
||||
public void Dispose()
|
||||
{
|
||||
|
|
@ -118,6 +136,19 @@ internal class GameInventory : IDisposable, IServiceType, IGameInventory
|
|||
}
|
||||
}
|
||||
|
||||
private static void InvokeSafely<T>(IGameInventory.InventoryChangedDelegate<T>? cb, T arg)
|
||||
where T : InventoryEventArgs
|
||||
{
|
||||
try
|
||||
{
|
||||
cb?.Invoke(arg);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Log.Error(e, "Exception during {argType} callback", arg.Type);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnFrameworkUpdate(IFramework framework1)
|
||||
{
|
||||
for (var i = 0; i < this.inventoryTypes.Length; i++)
|
||||
|
|
@ -279,22 +310,40 @@ internal class GameInventory : IDisposable, IServiceType, IGameInventory
|
|||
.Concat(this.mergedEvents)));
|
||||
|
||||
foreach (var x in this.addedEvents)
|
||||
{
|
||||
InvokeSafely(this.ItemAdded, x);
|
||||
InvokeSafely(this.ItemAddedExplicit, x);
|
||||
}
|
||||
|
||||
foreach (var x in this.removedEvents)
|
||||
{
|
||||
InvokeSafely(this.ItemRemoved, x);
|
||||
InvokeSafely(this.ItemRemovedExplicit, x);
|
||||
}
|
||||
|
||||
foreach (var x in this.changedEvents)
|
||||
{
|
||||
InvokeSafely(this.ItemChanged, x);
|
||||
InvokeSafely(this.ItemChangedExplicit, x);
|
||||
}
|
||||
|
||||
foreach (var x in this.movedEvents)
|
||||
{
|
||||
InvokeSafely(this.ItemMoved, x);
|
||||
InvokeSafely(this.ItemMovedExplicit, x);
|
||||
}
|
||||
|
||||
foreach (var x in this.splitEvents)
|
||||
{
|
||||
InvokeSafely(this.ItemSplit, x);
|
||||
InvokeSafely(this.ItemSplitExplicit, x);
|
||||
}
|
||||
|
||||
foreach (var x in this.mergedEvents)
|
||||
{
|
||||
InvokeSafely(this.ItemMerged, x);
|
||||
InvokeSafely(this.ItemMergedExplicit, x);
|
||||
}
|
||||
|
||||
// We're done using the lists. Clean them up.
|
||||
this.addedEvents.Clear();
|
||||
|
|
@ -381,6 +430,24 @@ internal class GameInventoryPluginScoped : IDisposable, IServiceType, IGameInven
|
|||
/// <inheritdoc/>
|
||||
public event IGameInventory.InventoryChangedDelegate? ItemMerged;
|
||||
|
||||
/// <inheritdoc/>
|
||||
public event IGameInventory.InventoryChangedDelegate<InventoryItemAddedArgs>? ItemAddedExplicit;
|
||||
|
||||
/// <inheritdoc/>
|
||||
public event IGameInventory.InventoryChangedDelegate<InventoryItemRemovedArgs>? ItemRemovedExplicit;
|
||||
|
||||
/// <inheritdoc/>
|
||||
public event IGameInventory.InventoryChangedDelegate<InventoryItemChangedArgs>? ItemChangedExplicit;
|
||||
|
||||
/// <inheritdoc/>
|
||||
public event IGameInventory.InventoryChangedDelegate<InventoryItemMovedArgs>? ItemMovedExplicit;
|
||||
|
||||
/// <inheritdoc/>
|
||||
public event IGameInventory.InventoryChangedDelegate<InventoryItemSplitArgs>? ItemSplitExplicit;
|
||||
|
||||
/// <inheritdoc/>
|
||||
public event IGameInventory.InventoryChangedDelegate<InventoryItemMergedArgs>? ItemMergedExplicit;
|
||||
|
||||
/// <inheritdoc/>
|
||||
public void Dispose()
|
||||
{
|
||||
|
|
@ -392,6 +459,12 @@ internal class GameInventoryPluginScoped : IDisposable, IServiceType, IGameInven
|
|||
this.gameInventoryService.ItemMoved -= this.OnInventoryItemMovedForward;
|
||||
this.gameInventoryService.ItemSplit -= this.OnInventoryItemSplitForward;
|
||||
this.gameInventoryService.ItemMerged -= this.OnInventoryItemMergedForward;
|
||||
this.gameInventoryService.ItemAddedExplicit -= this.OnInventoryItemAddedExplicitForward;
|
||||
this.gameInventoryService.ItemRemovedExplicit -= this.OnInventoryItemRemovedExplicitForward;
|
||||
this.gameInventoryService.ItemChangedExplicit -= this.OnInventoryItemChangedExplicitForward;
|
||||
this.gameInventoryService.ItemMovedExplicit -= this.OnInventoryItemMovedExplicitForward;
|
||||
this.gameInventoryService.ItemSplitExplicit -= this.OnInventoryItemSplitExplicitForward;
|
||||
this.gameInventoryService.ItemMergedExplicit -= this.OnInventoryItemMergedExplicitForward;
|
||||
|
||||
this.InventoryChanged = null;
|
||||
this.InventoryChangedRaw = null;
|
||||
|
|
@ -401,6 +474,12 @@ internal class GameInventoryPluginScoped : IDisposable, IServiceType, IGameInven
|
|||
this.ItemMoved = null;
|
||||
this.ItemSplit = null;
|
||||
this.ItemMerged = null;
|
||||
this.ItemAddedExplicit = null;
|
||||
this.ItemRemovedExplicit = null;
|
||||
this.ItemChangedExplicit = null;
|
||||
this.ItemMovedExplicit = null;
|
||||
this.ItemSplitExplicit = null;
|
||||
this.ItemMergedExplicit = null;
|
||||
}
|
||||
|
||||
private void OnInventoryChangedForward(IReadOnlyCollection<InventoryEventArgs> events)
|
||||
|
|
@ -426,4 +505,22 @@ internal class GameInventoryPluginScoped : IDisposable, IServiceType, IGameInven
|
|||
|
||||
private void OnInventoryItemMergedForward(GameInventoryEvent type, InventoryEventArgs data)
|
||||
=> this.ItemMerged?.Invoke(type, data);
|
||||
|
||||
private void OnInventoryItemAddedExplicitForward(InventoryItemAddedArgs data)
|
||||
=> this.ItemAddedExplicit?.Invoke(data);
|
||||
|
||||
private void OnInventoryItemRemovedExplicitForward(InventoryItemRemovedArgs data)
|
||||
=> this.ItemRemovedExplicit?.Invoke(data);
|
||||
|
||||
private void OnInventoryItemChangedExplicitForward(InventoryItemChangedArgs data)
|
||||
=> this.ItemChangedExplicit?.Invoke(data);
|
||||
|
||||
private void OnInventoryItemMovedExplicitForward(InventoryItemMovedArgs data)
|
||||
=> this.ItemMovedExplicit?.Invoke(data);
|
||||
|
||||
private void OnInventoryItemSplitExplicitForward(InventoryItemSplitArgs data)
|
||||
=> this.ItemSplitExplicit?.Invoke(data);
|
||||
|
||||
private void OnInventoryItemMergedExplicitForward(InventoryItemMergedArgs data)
|
||||
=> this.ItemMergedExplicit?.Invoke(data);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,6 +25,14 @@ public interface IGameInventory
|
|||
/// <param name="data">Data for the triggered event.</param>
|
||||
public delegate void InventoryChangedDelegate(GameInventoryEvent type, InventoryEventArgs data);
|
||||
|
||||
/// <summary>
|
||||
/// Delegate function to be called for each change to inventories.
|
||||
/// This delegate sends individual events for changes.
|
||||
/// </summary>
|
||||
/// <typeparam name="T">The event arg type.</typeparam>
|
||||
/// <param name="data">Data for the triggered event.</param>
|
||||
public delegate void InventoryChangedDelegate<in T>(T data) where T : InventoryEventArgs;
|
||||
|
||||
/// <summary>
|
||||
/// Event that is fired when the inventory has been changed.<br />
|
||||
/// Note that some events, such as <see cref="ItemAdded"/>, <see cref="ItemRemoved"/>, and <see cref="ItemChanged"/>
|
||||
|
|
@ -77,4 +85,22 @@ public interface IGameInventory
|
|||
/// Event that is fired when an item is merged from two stacks into one.
|
||||
/// </summary>
|
||||
public event InventoryChangedDelegate ItemMerged;
|
||||
|
||||
/// <inheritdoc cref="ItemAdded"/>
|
||||
public event InventoryChangedDelegate<InventoryItemAddedArgs> ItemAddedExplicit;
|
||||
|
||||
/// <inheritdoc cref="ItemRemoved"/>
|
||||
public event InventoryChangedDelegate<InventoryItemRemovedArgs> ItemRemovedExplicit;
|
||||
|
||||
/// <inheritdoc cref="ItemChanged"/>
|
||||
public event InventoryChangedDelegate<InventoryItemChangedArgs> ItemChangedExplicit;
|
||||
|
||||
/// <inheritdoc cref="ItemMoved"/>
|
||||
public event InventoryChangedDelegate<InventoryItemMovedArgs> ItemMovedExplicit;
|
||||
|
||||
/// <inheritdoc cref="ItemSplit"/>
|
||||
public event InventoryChangedDelegate<InventoryItemSplitArgs> ItemSplitExplicit;
|
||||
|
||||
/// <inheritdoc cref="ItemMerged"/>
|
||||
public event InventoryChangedDelegate<InventoryItemMergedArgs> ItemMergedExplicit;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue