Beispiel #1
0
        public static void DrawSaveFolderPicker()
        {
            if (InventoryScriptableObjectUtility.isPrefabsSaveFolderSet == false || InventoryScriptableObjectUtility.isPrefabsSaveFolderValid == false)
            {
                GUI.color = Color.red;
            }

            EditorGUILayout.BeginHorizontal(Devdog.General2.Editors.EditorStyles.boxStyle);
            EditorGUILayout.LabelField(RucksackConstants.ProductName + " save folder: " + InventoryScriptableObjectUtility.prefabsSaveFolder);
            if (GUILayout.Button("Set path", GUILayout.Width(100)))
            {
                InventoryScriptableObjectUtility.SetPrefabSaveFolder();
            }
            EditorGUILayout.EndHorizontal();
            GUI.color = Color.white;
        }
//        public virtual string GetFileName(T item, string suffix = "")
//        {
//            var name = item?.name?.Replace(' ', '_').ToLower() + suffix ?? "";
//            if (name.EndsWith(".asset"))
//            {
//                name += ".asset";
//            }
//
//            return name;
//        }

//        protected virtual void UpdateAssetName(T item)
//        {
//            var newName = GetFileName(item);
//            if (AssetDatabase.GetAssetPath(item).EndsWith(newName) == false)
//            {
//                AssetDatabase.RenameAsset(AssetDatabase.GetAssetPath(item), newName);
//            }
//        }

        protected override void CreateNewItem()
        {
            var picker = ScriptPickerEditor.Get(typeof(T));

            picker.OnPickObject += type =>
            {
                InventoryScriptableObjectUtility.SetPrefabSaveFolderIfNotSet();
                string assetPath = InventoryScriptableObjectUtility.GetSaveFolderForFolderName(SaveFolderName);

                var asset = CreateNewInstanceFromType(type);

                AssetDatabase.CreateAsset(asset, assetPath + "/" + GetNewFileName(type));
                AssetDatabase.SetLabels(asset, new string[] { RucksackConstants.ProductName });

                AddItem(asset, true);
            };

            picker.Show();
        }
        public override T DuplicateItem(T item)
        {
            InventoryScriptableObjectUtility.SetPrefabSaveFolderIfNotSet();

            var    newItem   = CreateNewInstanceFromType(item.GetType());
            string assetPath = InventoryScriptableObjectUtility.GetSaveFolderForFolderName(SaveFolderName);
            var    fileName  = GetNewFileName(newItem.GetType());

            UnityEditor.EditorUtility.CopySerialized(item, newItem);

            AssetDatabase.CreateAsset(newItem, assetPath + "/" + fileName);
            AssetDatabase.SetLabels(newItem, new string[] { RucksackConstants.ProductName });

            DeferAction(() =>
            {
                AddItem(newItem);
                SetDatabaseDirty();
            });

            return(newItem);
        }
        protected sealed override void DrawDetail(T item)
        {
            if (InventoryScriptableObjectUtility.isPrefabsSaveFolderSet == false)
            {
                EditorGUILayout.HelpBox("Prefab save folder is not set.", MessageType.Error);
                if (GUILayout.Button("Set prefab save folder"))
                {
                    InventoryScriptableObjectUtility.SetPrefabSaveFolder();
                }

                EditorGUIUtility.labelWidth = 0;
                return;
            }

            EditorGUI.BeginChangeCheck();
            DrawDetailInternal(item);
            if (EditorGUI.EndChangeCheck() && selectedItem != null)
            {
                UnityEditor.EditorUtility.SetDirty(selectedItem);
            }

            previouslySelectedGUIItemName = GUI.GetNameOfFocusedControl();
            EditorGUIUtility.labelWidth   = 0;
        }