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.

68 lines
1.6 KiB

5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
  1. using System.Linq;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using UnityEngine;
  5. [CreateAssetMenu(menuName = "Major Project/Inventory", order = 150)]
  6. public class Inventory : ScriptableObject
  7. {
  8. public List<Data> BagItems { get { if (_bagItems == null) _bagItems = new List<Data>(); return _bagItems; } }
  9. [SerializeField]
  10. protected List<Data> _bagItems = new List<Data>();
  11. public void Add(LogicBlock element,int count = 1, bool isInfinit = false)
  12. {
  13. Data data = new Data {
  14. element = element,
  15. Count = count,
  16. isInfinit = isInfinit };
  17. Add(data);
  18. }
  19. public void Add(Data data)
  20. {
  21. if (_bagItems.Contains(data))
  22. {
  23. Data bagData = BagItems.Find(p => p.Equals(data));
  24. bagData.Count += data.Count;
  25. bagData.isInfinit = (data.isInfinit || bagData.isInfinit);
  26. }
  27. else
  28. _bagItems.Add(data);
  29. }
  30. public void Remove(LogicBlock element) {
  31. if (!_bagItems.Exists(p => p.element == element))
  32. return;
  33. Data data = _bagItems.First(p => p.element == element);
  34. if (!data.isInfinit)
  35. data.Count--;
  36. }
  37. public static Inventory Clone(Inventory copy)
  38. {
  39. Inventory retVal = ScriptableObject.CreateInstance<Inventory>();
  40. retVal._bagItems = new List<Data>(copy._bagItems);
  41. return retVal;
  42. }
  43. [System.Serializable]
  44. public class Data
  45. {
  46. public LogicBlock element;
  47. public int Count;
  48. public bool isInfinit = false;
  49. }
  50. }