123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 |
- using System.Collections.Generic;
- using UnityEngine;
- namespace HQFPSWeapons
- {
- /// <summary>
- /// Represents an asset that stores all the user-defined items.
- /// </summary>
- [CreateAssetMenu(menuName = "HQ FPS Weapons Pack/Item Database")]
- public class ItemDatabase : ScriptableObject
- {
- public static ItemDatabase Default
- {
- get
- {
- if(m_Default == null)
- {
- var allDatabases = Resources.LoadAll<ItemDatabase>("");
- if(allDatabases != null && allDatabases.Length > 0)
- m_Default = allDatabases[0];
- }
- return m_Default;
- }
- }
- private static ItemDatabase m_Default;
- public ItemCategory[] Categories { get { return m_Categories; } }
- [SerializeField]
- private ItemCategory[] m_Categories = null;
- [SerializeField]
- private ItemProperty.Definition[] m_ItemProperties = null;
- private Dictionary<string, ItemData> m_Items = new Dictionary<string, ItemData>();
- public ItemData GetItemData(string name)
- {
- ItemData itemData;
- if(m_Items.TryGetValue(name, out itemData))
- return itemData;
- else
- return null;
- }
- public bool TryGetItem(string name, out ItemData itemData)
- {
- return m_Items.TryGetValue(name, out itemData);
- }
- public List<string> GetAllItemNames()
- {
- List<string> names = new List<string>();
- for(int i = 0;i < m_Categories.Length;i ++)
- {
- var category = m_Categories[i];
- for(int j = 0;j < category.Items.Length;j ++)
- names.Add(category.Items[j].Name);
- }
- return names;
- }
- public List<string> GetAllItemNamesFull()
- {
- List<string> names = new List<string>();
- for(int i = 0;i < m_Categories.Length;i ++)
- {
- var category = m_Categories[i];
- for(int j = 0;j < category.Items.Length;j ++)
- names.Add(m_Categories[i].Name + "/" + category.Items[j].Name);
- }
- return names;
- }
- public List<string> GetAllCategoryNames()
- {
- List<string> names = new List<string>();
- for(int i = 0;i < m_Categories.Length;i ++)
- names.Add(m_Categories[i].Name);
- return names;
- }
- public string[] GetAllPropertyNames()
- {
- string[] names = new string[m_ItemProperties.Length];
- for(int i = 0;i < m_ItemProperties.Length;i ++)
- names[i] = m_ItemProperties[i].Name;
- return names;
- }
- public ItemProperty.Definition GetPropertyByName(string name)
- {
- for(int i = 0;i < m_ItemProperties.Length;i ++)
- if(m_ItemProperties[i].Name == name)
- return m_ItemProperties[i];
- return default(ItemProperty.Definition);
- }
- public ItemProperty.Definition GetPropertyAtIndex(int index)
- {
- if(index >= m_ItemProperties.Length)
- return default(ItemProperty.Definition);
- else
- return m_ItemProperties[index];
- }
- public ItemCategory GetCategoryByName(string name)
- {
- for(int i = 0;i < m_Categories.Length;i ++)
- if(m_Categories[i].Name == name)
- return m_Categories[i];
- return null;
- }
- public ItemCategory GetRandomCategory()
- {
- return m_Categories[Random.Range(0, m_Categories.Length)];
- }
- public int GetItemCount()
- {
- int count = 0;
- for(int c = 0;c < m_Categories.Length;c ++)
- count += m_Categories[c].Items.Length;
- return count;
- }
- private void OnEnable()
- {
- GenerateDictionaries();
- }
- private void OnValidate()
- {
- foreach (var category in m_Categories)
- {
- for (int j = 0; j < category.Items.Length; j++)
- {
- category.Items[j].Category = category.Name;
- }
- }
- GenerateDictionaries();
- }
- private void GenerateDictionaries()
- {
- m_Items = new Dictionary<string, ItemData>();
- for(int c = 0;c < m_Categories.Length;c ++)
- {
- var category = m_Categories[c];
- for(int i = 0;i < category.Items.Length;i ++)
- {
- var item = category.Items[i];
- if(!m_Items.ContainsKey(item.Name))
- {
- m_Items.Add(item.Name, item);
- }
- }
- }
- }
- }
- }
|