示例#1
0
 public static void InvalidateAndReimportDeep(NPipeIImportable output)
 {
     output.Invalidate(true);
     EditorUtility.SetDirty(output as UnityEngine.Object);
     AssetDatabase.SaveAssets();
 }
示例#2
0
    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);
    }
示例#3
0
    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);
        }
    }
示例#4
0
    /// <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());
    }