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); } }