You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

106 lines
2.6 KiB

using System.Linq;
using System.Collections.Generic;
using UnityEngine;
[CreateAssetMenu(menuName = "Major Project/Inventory", order = 150)]
public class Inventory : ScriptableObject
{
public string test;
public List<Data> BagItems { get { if (_bagItems == null) _bagItems = new List<Data>(); return _bagItems; } }
[SerializeField]
protected List<Data> _bagItems = new List<Data>();
public System.Action OnItemsUpdated;
public void Add(LogicBlock element, int count = 1, bool isInfinit = false)
{
Data data = new Data
{
element = element,
Count = count,
isInfinit = isInfinit
};
Add(data);
}
public void Add(Data data)
{
if (_bagItems.Exists(p => p.element.isSameType(data.element)))
{
Data bagData = BagItems.Find(p => p.element.isSameType(data.element));
bagData.Count += data.Count;
bagData.isInfinit = (data.isInfinit || bagData.isInfinit);
}
else
_bagItems.Add(data);
OnItemsUpdated?.Invoke();
}
public void Remove(LogicBlock element)
{
if (!_bagItems.Exists(p => p.element.isSameType(element)))
{
return;
}
Data data = _bagItems.First(p => p.element.isSameType(element));
if (!data.isInfinit)
{
if (data.Count > data.minCount)
data.Count--;
if (data.Count <= 0)
_bagItems.Remove(data);
}
OnItemsUpdated?.Invoke();
}
public void Reset()
{
_bagItems = new List<Data>();
OnItemsUpdated = null;
}
public void SetItems(Data[] bagItems)
{
_bagItems = new List<Data>(bagItems);
OnItemsUpdated?.Invoke();
}
public static Inventory Clone(Inventory copy)
{
Inventory retVal = ScriptableObject.CreateInstance<Inventory>();
retVal._bagItems = new List<Data>();
foreach (Data data in copy.BagItems)
{
Data dataCopy = new Data(data.element, data.Count, data.isInfinit,data.minCount);
retVal._bagItems.Add(dataCopy);
}
return retVal;
}
[System.Serializable]
public class Data
{
public LogicBlock element;
public int Count;
public int minCount;
public bool isInfinit = false;
public Data() { }
public Data(LogicBlock element, int Count, bool isInfinit, int minCount = 0)
{
this.element = element;
this.Count = Count;
this.isInfinit = isInfinit;
this.minCount = minCount;
}
}
}