using UnityEngine;
using UnityEngine.Events;
///
/// События инвентаря - используй UnityEvent для подписки из любого скрипта
///
public class InventoryEvents : MonoBehaviour
{
public static InventoryEvents Instance { get; private set; }
[Header("Item Events")]
/// ID предмета
/// Количество
public UnityEvent OnItemAdded;
/// ID предмета
/// Количество
public UnityEvent OnItemRemoved;
/// ID предмета
/// Новое количество
public UnityEvent OnItemCountChanged;
[Header("Slot Events")]
/// Индекс слота
/// ID предмета (null если пусто)
public UnityEvent OnSlotChanged;
[Header("Inventory State")]
public UnityEvent OnInventoryOpened;
public UnityEvent OnInventoryClosed;
void Awake()
{
if (Instance == null)
{
Instance = this;
DontDestroyOnLoad(gameObject);
}
else
{
Destroy(gameObject);
}
}
// Удобные методы для вызова событий
public void InvokeItemAdded(string itemId, int amount)
{
OnItemAdded?.Invoke(itemId, amount);
}
public void InvokeItemRemoved(string itemId, int amount)
{
OnItemRemoved?.Invoke(itemId, amount);
}
public void InvokeItemCountChanged(string itemId, int newAmount)
{
OnItemCountChanged?.Invoke(itemId, newAmount);
}
public void InvokeSlotChanged(int slotIndex, string itemId)
{
OnSlotChanged?.Invoke(slotIndex, itemId);
}
}