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.

67 lines
1.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
  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 void Clone(Inventory inventory)
  38. {
  39. _bagItems = new List<Data>(inventory._bagItems);
  40. }
  41. [System.Serializable]
  42. public class Data
  43. {
  44. public LogicBlock element;
  45. public int Count;
  46. public bool isInfinit = false;
  47. }
  48. }