ItemDatabase.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. using System.Collections.Generic;
  2. using UnityEngine;
  3. namespace HQFPSWeapons
  4. {
  5. /// <summary>
  6. /// Represents an asset that stores all the user-defined items.
  7. /// </summary>
  8. [CreateAssetMenu(menuName = "HQ FPS Weapons Pack/Item Database")]
  9. public class ItemDatabase : ScriptableObject
  10. {
  11. public static ItemDatabase Default
  12. {
  13. get
  14. {
  15. if(m_Default == null)
  16. {
  17. var allDatabases = Resources.LoadAll<ItemDatabase>("");
  18. if(allDatabases != null && allDatabases.Length > 0)
  19. m_Default = allDatabases[0];
  20. }
  21. return m_Default;
  22. }
  23. }
  24. private static ItemDatabase m_Default;
  25. public ItemCategory[] Categories { get { return m_Categories; } }
  26. [SerializeField]
  27. private ItemCategory[] m_Categories = null;
  28. [SerializeField]
  29. private ItemProperty.Definition[] m_ItemProperties = null;
  30. private Dictionary<string, ItemData> m_Items = new Dictionary<string, ItemData>();
  31. public ItemData GetItemData(string name)
  32. {
  33. ItemData itemData;
  34. if(m_Items.TryGetValue(name, out itemData))
  35. return itemData;
  36. else
  37. return null;
  38. }
  39. public bool TryGetItem(string name, out ItemData itemData)
  40. {
  41. return m_Items.TryGetValue(name, out itemData);
  42. }
  43. public List<string> GetAllItemNames()
  44. {
  45. List<string> names = new List<string>();
  46. for(int i = 0;i < m_Categories.Length;i ++)
  47. {
  48. var category = m_Categories[i];
  49. for(int j = 0;j < category.Items.Length;j ++)
  50. names.Add(category.Items[j].Name);
  51. }
  52. return names;
  53. }
  54. public List<string> GetAllItemNamesFull()
  55. {
  56. List<string> names = new List<string>();
  57. for(int i = 0;i < m_Categories.Length;i ++)
  58. {
  59. var category = m_Categories[i];
  60. for(int j = 0;j < category.Items.Length;j ++)
  61. names.Add(m_Categories[i].Name + "/" + category.Items[j].Name);
  62. }
  63. return names;
  64. }
  65. public List<string> GetAllCategoryNames()
  66. {
  67. List<string> names = new List<string>();
  68. for(int i = 0;i < m_Categories.Length;i ++)
  69. names.Add(m_Categories[i].Name);
  70. return names;
  71. }
  72. public string[] GetAllPropertyNames()
  73. {
  74. string[] names = new string[m_ItemProperties.Length];
  75. for(int i = 0;i < m_ItemProperties.Length;i ++)
  76. names[i] = m_ItemProperties[i].Name;
  77. return names;
  78. }
  79. public ItemProperty.Definition GetPropertyByName(string name)
  80. {
  81. for(int i = 0;i < m_ItemProperties.Length;i ++)
  82. if(m_ItemProperties[i].Name == name)
  83. return m_ItemProperties[i];
  84. return default(ItemProperty.Definition);
  85. }
  86. public ItemProperty.Definition GetPropertyAtIndex(int index)
  87. {
  88. if(index >= m_ItemProperties.Length)
  89. return default(ItemProperty.Definition);
  90. else
  91. return m_ItemProperties[index];
  92. }
  93. public ItemCategory GetCategoryByName(string name)
  94. {
  95. for(int i = 0;i < m_Categories.Length;i ++)
  96. if(m_Categories[i].Name == name)
  97. return m_Categories[i];
  98. return null;
  99. }
  100. public ItemCategory GetRandomCategory()
  101. {
  102. return m_Categories[Random.Range(0, m_Categories.Length)];
  103. }
  104. public int GetItemCount()
  105. {
  106. int count = 0;
  107. for(int c = 0;c < m_Categories.Length;c ++)
  108. count += m_Categories[c].Items.Length;
  109. return count;
  110. }
  111. private void OnEnable()
  112. {
  113. GenerateDictionaries();
  114. }
  115. private void OnValidate()
  116. {
  117. foreach (var category in m_Categories)
  118. {
  119. for (int j = 0; j < category.Items.Length; j++)
  120. {
  121. category.Items[j].Category = category.Name;
  122. }
  123. }
  124. GenerateDictionaries();
  125. }
  126. private void GenerateDictionaries()
  127. {
  128. m_Items = new Dictionary<string, ItemData>();
  129. for(int c = 0;c < m_Categories.Length;c ++)
  130. {
  131. var category = m_Categories[c];
  132. for(int i = 0;i < category.Items.Length;i ++)
  133. {
  134. var item = category.Items[i];
  135. if(!m_Items.ContainsKey(item.Name))
  136. {
  137. m_Items.Add(item.Name, item);
  138. }
  139. }
  140. }
  141. }
  142. }
  143. }