1
This commit is contained in:
73
Assets/Artists/Scripts/Item/WorldItemContainer.cs
Normal file
73
Assets/Artists/Scripts/Item/WorldItemContainer.cs
Normal file
@@ -0,0 +1,73 @@
|
||||
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;
|
||||
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user