public static void InvalidateAndReimportDeep(NPipeIImportable output) { output.Invalidate(true); EditorUtility.SetDirty(output as UnityEngine.Object); AssetDatabase.SaveAssets(); }
public static NPipeIImportable CreateSeparatedPipe(string path, System.Type type, NPipeIImportable previous = null) { NPipeIImportable instance = CreateSeparatedPipe(path, UnityEngine.ScriptableObject.CreateInstance(type) as NPipeIImportable); if (previous != null && (instance is NPipeIComposite)) { ((NPipeIComposite)instance).Input = previous; EditorUtility.SetDirty(instance as UnityEngine.Object); } return(instance); }
public static T DrawSourcePropertySelector <T>(GUIContent label, Rect position, T oldValue, NPipeIImportable exclude = null) where T : class { UnityEngine.Object obj = oldValue as UnityEngine.Object; string path = AssetDatabase.GetAssetPath(obj); NPipeContainer container = AssetDatabase.LoadAssetAtPath(path, typeof(NPipeContainer)) as NPipeContainer; // EditorGUILayout.BeginHorizontal(); Rect containerPosition = new Rect(position.x, position.y, position.width / 4 * 3, position.height); Rect pipePosition = new Rect(position.x + position.width / 4 * 3, position.y, position.width / 4, position.height); container = (NPipeContainer)EditorGUI.ObjectField(containerPosition, label, container, typeof(NPipeContainer), false); path = AssetDatabase.GetAssetPath(container); T[] factories = GetTypedFactories <T>(container ? container.GetAllSelectableFactories() : new UnityEngine.Object[0] { }); if (factories.Length != 1) { string[] options = new string[factories.Length]; int i = 0; int selected = -1; for (int j = 0; j < factories.Length; j++) { NPipeIImportable fact = factories[j] as NPipeIImportable; if (fact == oldValue) { selected = i; } if (fact != exclude && !IsPrevious(fact, exclude, true)) { options[i] = i + " " + container.GetDisplayName(fact); factories[i] = factories[j]; i++; } } Array.Resize(ref options, i); Array.Resize(ref factories, i); if (selected == -1 && options.Length > 0) { selected = 0; } int newSelected = EditorGUI.Popup(pipePosition, selected, options); if (newSelected == -1) { return(null); } //return oldValue; return(factories[newSelected]); } else { if (factories[0] != exclude && !IsPrevious(factories[0] as NPipeIImportable, exclude, true)) { EditorGUI.LabelField(pipePosition, container.GetDisplayName(factories[0] as NPipeIImportable)); return(factories[0]); } return(null); } }
/// <summary> /// Gets the matching pipes in all input containers that follow the same path (used for multiinstance editing) /// </summary> /// <returns>The matching pipes.</returns> /// <param name="InputContainers">Input containers.</param> /// <param name="lookup">Lookup.</param> public static NPipeIImportable[] GetSimiliarPipes(UnityEngine.Object[] inputContainers, NPipeContainer referenceContainer, NPipeIImportable lookup, out string warningMessage) { // TODO: check for exact matchin structure, there may be cases where we have multiple pipes in a container warningMessage = ""; List <NPipeIImportable> result = new List <NPipeIImportable>(); bool bFoundMultiple = false; bool bNotFound = false; foreach (UnityEngine.Object container in inputContainers) { NPipeIImportable[] instances2 = GetByType <NPipeIImportable>(container); bool bFound = false; foreach (NPipeIImportable item in instances2) { if (item.GetType() == lookup.GetType()) { result.Add(item); if (bFound) { bFoundMultiple = true; } bFound = true; } } if (!bFound) { bNotFound = true; } } if (bFoundMultiple) { warningMessage += "Found Multiple Occurences in some containers. "; } if (bNotFound) { warningMessage += "Not foundt in some containers. "; } return(result.ToArray()); }