using UnityEditor; using UnityEngine; using System.Collections; using System; using System.IO; using System.Collections.Generic; using Invector.vItemManager; using Invector; namespace Beyond { public static class Helper { public static bool NameEquals(this bItemEnumsBuilder.ItemEnumObject a, bItemEnumsBuilder.ItemEnumObject b) { return a.name.Equals(b.name); } public static bool FormatEquals(this bItemEnumsBuilder.ItemEnumObject a, bItemEnumsBuilder.ItemEnumObject b) { return a.format.Equals(b.format); } } public class bItemEnumsBuilder { public class ItemEnumObject { public string name; public string format; public ItemEnumObject(string name, string format) { this.name = name; this.format = format; } } public static void RefreshItemEnums() { string name = "vItemEnums"; string copyPath = "Assets/Invector-3rdPersonController/ItemManager/Scripts/vItemEnumsBuilder/" + name + ".cs"; vItemEnumsList[] datas = Resources.LoadAll(""); List defaultItemTypeNames = new List(); List defaultItemAttributesNames = new List(); List _itemTypeNames = new List(); List _itemAttributeNames = new List(); List _itemTypeFormats = new List(); List _itemAttributeFormats = new List(); #region Get all vItemType values of current Enum try { _itemTypeNames = Enum.GetNames(typeof(bItemType)).vToList(); } catch { } #endregion #region Get all vItemAttributes values of current Enum try { _itemAttributeNames = Enum.GetNames(typeof(Invector.vItemAttributes)).vToList(); } catch { } #endregion if (datas != null) { #region Get all enum of ItemEnumList for (int i = 0; i < datas.Length; i++) { if (datas[i].itemTypeEnumValues != null) { for (int a = 0; a < datas[i].itemTypeEnumValues.Count; a++) { if (!string.IsNullOrEmpty(datas[i].itemTypeEnumValues[a]) && !defaultItemTypeNames.Contains(datas[i].itemTypeEnumValues[a])) { defaultItemTypeNames.Add(datas[i].itemTypeEnumValues[a]); } } } if (datas[i].itemAttributesEnumValues != null) { for (int a = 0; a < datas[i].itemAttributesEnumValues.Count; a++) { if (!string.IsNullOrEmpty(datas[i].itemAttributesEnumValues[a]) && !defaultItemAttributesNames.Contains(datas[i].itemAttributesEnumValues[a])) { defaultItemAttributesNames.Add(datas[i].itemAttributesEnumValues[a]); } } } } foreach (string value in defaultItemTypeNames) { if (!_itemTypeNames.Contains(value)) { bool replace = false; for (int i = 0; i < _itemTypeNames.Count; i++) { if (!defaultItemTypeNames.Contains(_itemTypeNames[i])) { replace = true; _itemTypeNames[i] = value; break; } } if (!replace) _itemTypeNames.Add(value); } } #endregion #region Remove enum that not exist var typesToRemove = _itemTypeNames.FindAll(x => !defaultItemTypeNames.Contains(x)); foreach (string value in typesToRemove) _itemTypeNames.Remove(value); foreach (string value in defaultItemAttributesNames) { if (!_itemAttributeNames.Contains(value)) { bool replace = false; for (int i = 0; i < _itemAttributeNames.Count; i++) { if (!defaultItemAttributesNames.Contains(_itemAttributeNames[i])) { replace = true; _itemAttributeNames[i] = value; break; } } if (!replace) _itemAttributeNames.Add(value); } } var attributesToRemove = _itemAttributeNames.FindAll(x => !defaultItemAttributesNames.Contains(x)); foreach (string value in attributesToRemove) _itemAttributeNames.Remove(value); #endregion #region Get Enum Text Formats for (int i = 0; i < _itemTypeNames.Count; i++) { vItemEnumsList data = datas.vToList().Find(d => d.itemTypeEnumValues.Contains(_itemTypeNames[i])); if (data != null) { var index = data.itemTypeEnumValues.IndexOf(_itemTypeNames[i]); if (index < data.itemTypeEnumFormats.Count) { _itemTypeFormats.Add(data.itemTypeEnumFormats[index]); } else _itemTypeFormats.Add(""); } else _itemTypeFormats.Add(""); } for (int i = 0; i < _itemAttributeNames.Count; i++) { vItemEnumsList data = datas.vToList().Find(d => d.itemAttributesEnumValues.Contains(_itemAttributeNames[i])); if (data != null) { var index = data.itemAttributesEnumValues.IndexOf(_itemAttributeNames[i]); if (index < data.itemAttributesEnumFormats.Count) { _itemAttributeFormats.Add(data.itemAttributesEnumFormats[index]); } else _itemAttributeFormats.Add(""); } else _itemAttributeFormats.Add(""); } #endregion } CreateEnumClass(copyPath, _itemTypeNames, _itemAttributeNames, _itemTypeFormats, _itemAttributeFormats); } static void CreateEnumClass(string copyPath, List itemTypes = null, List itemAttributes = null, List itemTypesFormat = null, List itemAttributesFormat = null) { if (File.Exists(copyPath)) File.Delete(copyPath); using (StreamWriter outfile = new StreamWriter(copyPath)) { outfile.WriteLine("using System.ComponentModel;"); outfile.WriteLine("namespace Invector.vItemManager {"); outfile.WriteLine(" public enum vItemType {"); if (itemTypes != null) { for (int i = 0; i < itemTypes.Count; i++) { outfile.WriteLine(" " + string.Format("[Description(\"{0}\")] ", itemTypesFormat[i]) + itemTypes[i] + "=" + i + (i == itemTypes.Count - 1 ? "" : ",")); } } outfile.WriteLine(" }"); outfile.WriteLine(" public enum vItemAttributes {"); if (itemAttributes != null) { for (int i = 0; i < itemAttributes.Count; i++) { outfile.WriteLine(" " + string.Format("[Description(\"{0}\")] ", itemAttributesFormat[i]) + itemAttributes[i] + "=" + i + (i == itemAttributes.Count - 1 ? "" : ",")); } } outfile.WriteLine(" }"); outfile.WriteLine("}"); } AssetDatabase.Refresh(); } } }