- using System.Linq;
- using System.Collections;
- 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;
- }
- }
- }
|