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.

113 lines
2.5 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
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 string test;
  9. public List<Data> BagItems { get { if (_bagItems == null) _bagItems = new List<Data>(); return _bagItems; } }
  10. [SerializeField]
  11. protected List<Data> _bagItems = new List<Data>();
  12. public System.Action OnItemsUpdated;
  13. public void Add(LogicBlock element,int count = 1, bool isInfinit = false)
  14. {
  15. Data data = new Data {
  16. element = element,
  17. Count = count,
  18. isInfinit = isInfinit };
  19. Add(data);
  20. }
  21. public void Add(Data data)
  22. {
  23. if (_bagItems.Exists(p => p.element.isSameType(data.element)))
  24. {
  25. Data bagData = BagItems.Find(p => p.element.isSameType(data.element));
  26. bagData.Count += data.Count;
  27. bagData.isInfinit = (data.isInfinit || bagData.isInfinit);
  28. }
  29. else
  30. _bagItems.Add(data);
  31. OnItemsUpdated?.Invoke();
  32. }
  33. public void Remove(LogicBlock element) {
  34. if (!_bagItems.Exists(p => p.element.isSameType(element)))
  35. {
  36. return;
  37. }
  38. Data data = _bagItems.First(p => p.element.isSameType(element));
  39. if (!data.isInfinit)
  40. {
  41. data.Count--;
  42. if (data.Count <= 0)
  43. _bagItems.Remove(data);
  44. }
  45. OnItemsUpdated?.Invoke();
  46. }
  47. public void Reset()
  48. {
  49. _bagItems = new List<Data>();
  50. OnItemsUpdated = null;
  51. }
  52. public void SetItems(Data[] bagItems)
  53. {
  54. _bagItems = new List<Data>(bagItems);
  55. OnItemsUpdated?.Invoke();
  56. }
  57. public static Inventory Clone(Inventory copy)
  58. {
  59. Inventory retVal = ScriptableObject.CreateInstance<Inventory>();
  60. retVal._bagItems = new List<Data>();
  61. foreach (Data data in copy.BagItems)
  62. {
  63. Data dataCopy = new Data(data.element,data.Count,data.isInfinit);
  64. retVal._bagItems.Add(dataCopy);
  65. }
  66. return retVal;
  67. }
  68. [System.Serializable]
  69. public class Data
  70. {
  71. public LogicBlock element;
  72. public int Count;
  73. public bool isInfinit = false;
  74. public Data() { }
  75. public Data(LogicBlock element, int Count, bool isInfinit)
  76. {
  77. this.element = element;
  78. this.Count = Count;
  79. this.isInfinit = isInfinit;
  80. }
  81. }
  82. }