init
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
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<BaseObject>
|
||||
{
|
||||
// TODO: tutaj jakiś domyślny owner?
|
||||
|
||||
private Dictionary<ItemObject, IContentOwner> _items = new();
|
||||
|
||||
public bool Add(ItemObject item)
|
||||
{
|
||||
if (item.data.Get<ItemObjectData>().carriedBy) return false;
|
||||
if (_items.ContainsKey(item)) return false;
|
||||
|
||||
_items.TryAdd(item, null);
|
||||
item.data.Get<ItemObjectData>().carriedBy = parent;
|
||||
parent.events.Invoke(new ContentAddEvent{obj = parent, item = item});
|
||||
item.events.Register<RemoveEvent>(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<ItemObjectData>().carriedBy = null;
|
||||
parent.events.Invoke(new ContentAddEvent{obj = parent, item = item});
|
||||
item.events.Unregister<RemoveEvent>(OnItemRemove);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool TransferTo(IContentOwner newOwner, ItemObject item, int index = -1)
|
||||
{
|
||||
if (parent.data.Get<ItemObjectData>().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);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user