74 lines
1.9 KiB
C#
74 lines
1.9 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using BITKit;
|
|
using UnityEngine;
|
|
|
|
namespace BITFALL.Items
|
|
{
|
|
public class WorldItemContainer : MonoBehaviour,IBasicItemContainer,IDescription
|
|
{
|
|
[SerializeField] private string containerName;
|
|
public string Name => containerName;
|
|
private readonly Dictionary<int,IBasicItem> _items = new();
|
|
public int Id => GetInstanceID();
|
|
public bool TryGetItem(Func<IBasicItem, bool> func, out IBasicItem item)
|
|
{
|
|
if (_items.Values.TryGetAny(func.Invoke,out item))
|
|
{
|
|
return true;
|
|
}
|
|
item=null;
|
|
return false;
|
|
}
|
|
|
|
public IBasicItem[] GetItems()=>_items.Values.ToArray();
|
|
|
|
public bool Add(IBasicItem item)
|
|
{
|
|
if (AddFactory.CastAsFunc().Any(x=>x.Invoke(item) is false)) return false;
|
|
if (_items.ContainsKey(item.Id)) return false;
|
|
_items.Add(item.Id,item);
|
|
OnAdd?.Invoke(item);
|
|
OnSet?.Invoke(item);
|
|
return true;
|
|
}
|
|
|
|
public bool Remove(IBasicItem item)
|
|
{
|
|
return Remove(item.Id);
|
|
}
|
|
public bool Remove(int id)
|
|
{
|
|
if (RemoveFactory.CastAsFunc().Any(x=>x.Invoke(_items[id]) is false)) return false;
|
|
if (!_items.Remove(id)) return false;
|
|
OnRemove?.Invoke(_items[id]);
|
|
return true;
|
|
}
|
|
|
|
public bool Remove(Func<IBasicItem, bool> removeFactory)
|
|
{
|
|
return _items.Values.TryGetAny(removeFactory.Invoke,out var item) && Remove(item);
|
|
}
|
|
|
|
public bool Drop(int Id)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
public bool DropOrSpawn(IBasicItem item)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
public event Func<IBasicItem, bool> AddFactory;
|
|
public event Func<IBasicItem, bool> RemoveFactory;
|
|
public event Func<IBasicItem, bool> DropFactory;
|
|
public event Action<IBasicItem> OnAdd;
|
|
public event Action<IBasicItem> OnRemove;
|
|
public event Action<IBasicItem> OnSet;
|
|
public event Action<IBasicItem> OnDrop;
|
|
public event Action<IBasicItemContainer> OnRebuild;
|
|
|
|
}
|
|
}
|