A game about forced loneliness, made by TACStudios
at master 89 lines 4.2 kB view raw
1using System; 2using System.IO; 3using UnityEngine; 4 5namespace UnityEditor.U2D 6{ 7 static internal class ItemCreationUtility 8 { 9 static internal Action<int, ProjectWindowCallback.EndNameEditAction, string, Texture2D, string> StartNewAssetNameEditingDelegate = ProjectWindowUtil.StartNameEditingIfProjectWindowExists; 10 11 static public GameObject CreateGameObject(string name, MenuCommand menuCommand, params Type[] components) 12 { 13 var parent = menuCommand.context as GameObject; 14 var newGO = ObjectFactory.CreateGameObject(name, components); 15 newGO.name = name; 16 Selection.activeObject = newGO; 17 GOCreationCommands.Place(newGO, parent); 18 if (EditorSettings.defaultBehaviorMode == EditorBehaviorMode.Mode2D) 19 { 20 var position = newGO.transform.position; 21 position.z = 0; 22 newGO.transform.position = position; 23 } 24 Undo.RegisterCreatedObjectUndo(newGO, string.Format("Create {0}", name)); 25 return newGO; 26 } 27 28 static public T CreateAssetObjectFromTemplate<T>(string sourcePath) where T : UnityEngine.Object 29 { 30 var assetSelectionPath = AssetDatabase.GetAssetPath(Selection.activeObject); 31 var isFolder = false; 32 if (!string.IsNullOrEmpty(assetSelectionPath)) 33 isFolder = File.GetAttributes(assetSelectionPath).HasFlag(FileAttributes.Directory); 34 var path = ProjectWindowUtil.GetActiveFolderPath(); 35 if (isFolder) 36 { 37 path = assetSelectionPath; 38 } 39 var fileName = Path.GetFileName(sourcePath); 40 var destName = AssetDatabase.GenerateUniqueAssetPath(Path.Combine(path, fileName)); 41 var icon = EditorGUIUtility.IconContent<T>().image as Texture2D; 42 StartNewAssetNameEditing(sourcePath, destName, icon, ProjectBrowser.kAssetCreationInstanceID_ForNonExistingAssets); 43 return Selection.activeObject as T; 44 } 45 46 static public T CreateAssetObject<T>(string name) where T : UnityEngine.Object 47 { 48 var assetSelectionPath = AssetDatabase.GetAssetPath(Selection.activeObject); 49 var isFolder = false; 50 if (!string.IsNullOrEmpty(assetSelectionPath)) 51 isFolder = File.GetAttributes(assetSelectionPath).HasFlag(FileAttributes.Directory); 52 var path = ProjectWindowUtil.GetActiveFolderPath(); 53 if (isFolder) 54 { 55 path = assetSelectionPath; 56 } 57 var destName = AssetDatabase.GenerateUniqueAssetPath(Path.Combine(path, name)); 58 var newObject = Activator.CreateInstance<T>(); 59 var icon = EditorGUIUtility.IconContent<T>().image as Texture2D; 60 StartNewAssetNameEditing(null, destName, icon, newObject.GetInstanceID()); 61 return Selection.activeObject as T; 62 } 63 64 static private void StartNewAssetNameEditing(string source, string dest, Texture2D icon, int instanceId) 65 { 66 var action = ScriptableObject.CreateInstance<CreateAssetEndNameEditAction>(); 67 StartNewAssetNameEditingDelegate(instanceId, action, dest, icon, source); 68 } 69 70 internal class CreateAssetEndNameEditAction : ProjectWindowCallback.EndNameEditAction 71 { 72 public override void Action(int instanceId, string pathName, string resourceFile) 73 { 74 var uniqueName = AssetDatabase.GenerateUniqueAssetPath(pathName); 75 if (instanceId == ProjectBrowser.kAssetCreationInstanceID_ForNonExistingAssets && !string.IsNullOrEmpty(resourceFile)) 76 { 77 AssetDatabase.CopyAsset(resourceFile, uniqueName); 78 instanceId = AssetDatabase.LoadMainAssetAtPath(uniqueName).GetInstanceID(); 79 } 80 else 81 { 82 var obj = EditorUtility.InstanceIDToObject(instanceId); 83 AssetDatabase.CreateAsset(obj, uniqueName); 84 } 85 ProjectWindowUtil.FrameObjectInProjectWindow(instanceId); 86 } 87 } 88 } 89}