using System.IO; using UnityEditor; using UnityEngine; namespace SpellBoundAR.Items.Editor { public static class ItemsManipulator { public static void CreateNewItem(string directory, string filename, string[] labels) where T : ScriptedItemTypeData { T item = ScriptableObject.CreateInstance(typeof(T)) as T; string path = Path.Combine(directory, filename + ".asset"); SaveItem(item, path, labels); } private static void SaveItem(ScriptedItemTypeData ariseScriptedItem, string path, string[] labels) { AssetDatabase.CreateAsset(ariseScriptedItem, path); if (labels != null) AssetDatabase.SetLabels(ariseScriptedItem, labels); AssetDatabase.SaveAssets(); AssetDatabase.Refresh(); EditorUtility.FocusProjectWindow(); Selection.activeObject = ariseScriptedItem; } public static void AddInstanceToItemType(ScriptedItemTypeData scriptedItemTypeData) where T : ScriptedItemInstanceData { if (!scriptedItemTypeData) return; T instance = ScriptableObject.CreateInstance(typeof(T)) as T; if (!instance || string.IsNullOrEmpty(AssetDatabase.GetAssetPath(scriptedItemTypeData))) return; scriptedItemTypeData.OnValidate(); AssetDatabase.AddObjectToAsset(instance, scriptedItemTypeData); instance.ScriptedItemTypeData = scriptedItemTypeData; scriptedItemTypeData.Instances.Add(instance); instance.OnValidate(); scriptedItemTypeData.OnValidate(); AssetDatabase.SaveAssets(); } public static void RemoveInstanceFromItemType(ScriptedItemInstanceData instance) { if (!instance) return; if (!string.IsNullOrEmpty(AssetDatabase.GetAssetPath(instance))) { AssetDatabase.RemoveObjectFromAsset(instance); ScriptedItemTypeData scriptedItemTypeData = instance.ScriptedItemTypeData; if (scriptedItemTypeData) scriptedItemTypeData.ScriptedInstances.RemoveAll(test => test == instance); Object.DestroyImmediate(instance); if (scriptedItemTypeData) scriptedItemTypeData.OnValidate(); } AssetDatabase.SaveAssets(); } } }