using System; using System.Collections.Generic; using RPGCore.BackpackEquipment.Data; using RPGCore.BackpackEquipment.ObjectModules.Content.Events; using RPGCore.BackpackEquipment.Objects; using RPGCore.Core; using RPGCore.Core.Objects; using RPGCore.ObjectModules.EventObjectModule.Events; using UnityEngine; namespace RPGCore.BackpackEquipment.ObjectModules.Content { [Serializable] [RequireComponent(typeof(BaseObject))] public sealed class ContentModule : ObjectModule { // TODO: tutaj jakiś domyślny owner? private Dictionary _items = new(); public bool Add(ItemObject item) { if (item.data.Get().carriedBy) return false; if (_items.ContainsKey(item)) return false; _items.TryAdd(item, null); item.data.Get().carriedBy = parent; parent.events.Invoke(new ContentAddEvent{obj = parent, item = item}); item.events.Register(OnItemRemove); return true; } public bool Remove(ItemObject item) { if (!_items.ContainsKey(item)) return false; _items[item]?.Remove_Internal(item); _items.Remove(item); item.data.Get().carriedBy = null; parent.events.Invoke(new ContentAddEvent{obj = parent, item = item}); item.events.Unregister(OnItemRemove); return true; } public bool TransferTo(IContentOwner newOwner, ItemObject item, int index = -1) { if (parent.data.Get().carriedBy != parent) return false; if (!newOwner.CanAdd(item, index)) return false; _items.TryAdd(item, null); _items[item]?.Remove_Internal(item); _items[item] = newOwner; newOwner.Add_Internal(item, index); return true; } private void OnItemRemove(RemoveEvent removeEvent) { Remove(removeEvent.obj as ItemObject); } } }