示例#1
0
        static string DumpCheckDeterministicBehaviorFromLazyGetExpression(bool linkOnlySubSlot, bool linkToDirection, int[] invalidation)
        {
            var vec3      = ScriptableObject.CreateInstance <VFXInlineOperator>();
            var direction = ScriptableObject.CreateInstance <VFXInlineOperator>();

            vec3.SetSettingValue("m_Type", (SerializableType)typeof(Vector3));
            direction.SetSettingValue("m_Type", (SerializableType)typeof(DirectionType));

            if (linkToDirection)
            {
                if (linkOnlySubSlot)
                {
                    vec3.outputSlots[0][1].Link(direction.inputSlots[0][0][1]);
                }
                else
                {
                    vec3.outputSlots[0].Link(direction.inputSlots[0]);
                }
            }
            else
            {
                if (linkOnlySubSlot)
                {
                    direction.outputSlots[0][0][1].Link(vec3.inputSlots[0][1]);
                }

                direction.outputSlots[0].Link(vec3.inputSlots[0]);
            }

            Action <int> Invalidate = delegate(int i)
            {
                switch (i)
                {
                case 0: direction.outputSlots[0].GetExpression(); break;

                case 1: direction.inputSlots[0].GetExpression(); break;

                case 2: vec3.inputSlots[0].GetExpression(); break;

                case 3: vec3.outputSlots[0].GetExpression(); break;

                default: break;
                }
            };

            foreach (var i in invalidation)
            {
                Invalidate(i);
            }

            var allParentExpr = new List <VFXExpression>();

            if (linkToDirection)
            {
                CollectExpression(direction.outputSlots[0].GetExpression(), allParentExpr);
            }
            else
            {
                CollectExpression(vec3.outputSlots[0].GetExpression(), allParentExpr);
            }
            string dump = allParentExpr.Select(o => o.GetType().Name).Aggregate((a, b) => a + ", " + b);

            vec3.outputSlots[0].UnlinkAll();
            ScriptableObject.DestroyImmediate(vec3);
            ScriptableObject.DestroyImmediate(direction);
            return(dump);
        }
示例#2
0
 public static void Remove <P, C>(P parent, C toRemove, List <C> children) where P : ScriptableObject where C : ScriptableObject
 {
     children.Remove(toRemove);
     ScriptableObject.DestroyImmediate(toRemove, true);
 }
示例#3
0
 public static void Remove <P, V, K>(P parent, V newObject, K key, Dictionary <K, V> children) where P : ScriptableObject where V : ScriptableObject
 {
     children.Remove(key);
     ScriptableObject.DestroyImmediate(newObject, true);
 }
示例#4
0
 public static void CloseWindow()
 {
     windowInstance.Close();
     ScriptableObject.DestroyImmediate(windowInstance);
 }
示例#5
0
        public override void Draw(UndoParentNode currOwner, bool style = true)
        {
            m_currOwner = currOwner;
            if (m_reordableList == null)
            {
                m_reordableList = new ReorderableList(m_additionalDirectives, typeof(AdditionalDirectiveContainer), true, false, false, false)
                {
                    headerHeight          = 0,
                    footerHeight          = 0,
                    showDefaultBackground = false,
                    drawElementCallback   = (Rect rect, int index, bool isActive, bool isFocused) =>
                    {
                        if (m_additionalDirectives[index] != null)
                        {
                            float labelWidthStyleAdjust = 0;
                            if (style)
                            {
                                rect.xMin            -= 10;
                                labelWidthStyleAdjust = 15;
                            }
                            else
                            {
                                rect.xMin -= 1;
                            }

                            float popUpWidth       = style ? 75 : 60f;
                            float widthAdjust      = m_additionalDirectives[index].LineType == AdditionalLineType.Include ? -14 : 0;
                            Rect  popupPos         = new Rect(rect.x, rect.y, popUpWidth, EditorGUIUtility.singleLineHeight);
                            Rect  GUIDTogglePos    = m_additionalDirectives[index].LineType == AdditionalLineType.Include ? new Rect(rect.x + rect.width - 3 * Constants.PlusMinusButtonLayoutWidth, rect.y, Constants.PlusMinusButtonLayoutWidth, Constants.PlusMinusButtonLayoutWidth) : new Rect();
                            Rect  buttonPlusPos    = new Rect(rect.x + rect.width - 2 * Constants.PlusMinusButtonLayoutWidth, rect.y - 2, Constants.PlusMinusButtonLayoutWidth, Constants.PlusMinusButtonLayoutWidth);
                            Rect  buttonMinusPos   = new Rect(rect.x + rect.width - Constants.PlusMinusButtonLayoutWidth, rect.y - 2, Constants.PlusMinusButtonLayoutWidth, Constants.PlusMinusButtonLayoutWidth);
                            float labelWidthBuffer = EditorGUIUtility.labelWidth;
                            Rect  labelPos         = new Rect(rect.x + popupPos.width - labelWidthStyleAdjust, rect.y, labelWidthStyleAdjust + rect.width - popupPos.width - buttonPlusPos.width - buttonMinusPos.width + widthAdjust, EditorGUIUtility.singleLineHeight);
                            m_additionalDirectives[index].LineType = (AdditionalLineType)m_currOwner.EditorGUIEnumPopup(popupPos, m_additionalDirectives[index].LineType);

                            if (m_additionalDirectives[index].LineType == AdditionalLineType.Include)
                            {
                                if (m_additionalDirectives[index].GUIDToggle)
                                {
                                    //if( m_additionalDirectives[ index ].LibObject == null && !string.IsNullOrEmpty( m_additionalDirectives[ index ].GUIDValue ) )
                                    //{
                                    //	m_additionalDirectives[ index ].LibObject = AssetDatabase.LoadAssetAtPath<TextAsset>( AssetDatabase.GUIDToAssetPath( m_additionalDirectives[ index ].GUIDValue ) );
                                    //}

                                    EditorGUI.BeginChangeCheck();
                                    TextAsset obj = m_currOwner.EditorGUIObjectField(labelPos, m_additionalDirectives[index].LibObject, typeof(TextAsset), false) as TextAsset;
                                    if (EditorGUI.EndChangeCheck())
                                    {
                                        string pathName  = AssetDatabase.GetAssetPath(obj);
                                        string extension = Path.GetExtension(pathName);
                                        extension = extension.ToLower();
                                        if (extension.Equals(".cginc") || extension.Equals(".hlsl"))
                                        {
                                            m_additionalDirectives[index].LibObject = obj;
                                            m_additionalDirectives[index].GUIDValue = AssetDatabase.AssetPathToGUID(pathName);
                                        }
                                    }
                                }
                                else
                                {
                                    m_additionalDirectives[index].LineValue = m_currOwner.EditorGUITextField(labelPos, string.Empty, m_additionalDirectives[index].LineValue);
                                }

                                if (GUI.Button(GUIDTogglePos, m_additionalDirectives[index].GUIDToggle ? UIUtils.FloatIntIconOFF : UIUtils.FloatIntIconON, UIUtils.FloatIntPickerONOFF))
                                {
                                    m_additionalDirectives[index].GUIDToggle = !m_additionalDirectives[index].GUIDToggle;
                                }
                            }
                            else
                            {
                                m_additionalDirectives[index].LineValue = m_currOwner.EditorGUITextField(labelPos, string.Empty, m_additionalDirectives[index].LineValue);
                            }

                            if (GUI.Button(buttonPlusPos, string.Empty, UIUtils.PlusStyle))
                            {
                                m_actionType  = ReordableAction.Add;
                                m_actionIndex = index;
                            }

                            if (GUI.Button(buttonMinusPos, string.Empty, UIUtils.MinusStyle))
                            {
                                m_actionType  = ReordableAction.Remove;
                                m_actionIndex = index;
                            }
                        }
                    }
                };
            }

            if (m_actionType != ReordableAction.None)
            {
                switch (m_actionType)
                {
                case ReordableAction.Add:
                    AdditionalDirectiveContainer newItem = ScriptableObject.CreateInstance <AdditionalDirectiveContainer>();
                    newItem.hideFlags = HideFlags.HideAndDontSave;
                    m_additionalDirectives.Insert(m_actionIndex + 1, newItem);
                    break;

                case ReordableAction.Remove:
                    AdditionalDirectiveContainer itemToDelete = m_additionalDirectives[m_actionIndex];
                    m_additionalDirectives.RemoveAt(m_actionIndex);
                    ScriptableObject.DestroyImmediate(itemToDelete);
                    break;
                }
                m_isDirty    = true;
                m_actionType = ReordableAction.None;
                EditorGUI.FocusTextInControl(null);
            }
            bool foldoutValue = currOwner.ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedAdditionalDirectives;

            if (style)
            {
                NodeUtils.DrawPropertyGroup(ref foldoutValue, m_moduleName, DrawReordableList, DrawButtons);
            }
            else
            {
                NodeUtils.DrawNestedPropertyGroup(ref foldoutValue, m_moduleName, DrawReordableList, DrawButtons);
            }
            currOwner.ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedAdditionalDirectives = foldoutValue;
        }
        private void DrawActions(SerializedProperty property)
        {
            for (int i = 0; i < list.arraySize; i++)
            {
                SerializedProperty listEntry = list.GetArrayElementAtIndex(i);

                BuildAction buildAction = listEntry.objectReferenceValue as BuildAction;
                if (buildAction == null)
                {
                    list.DeleteArrayElementAtIndex(i);
                    --i;
                    continue;
                }

                SerializedObject serializedBuildAction = new SerializedObject(buildAction);

                EditorGUILayout.BeginHorizontal();
                bool show = listEntry.isExpanded;

                buildAction.actionEnabled = EditorGUILayout.Toggle(buildAction.actionEnabled, GUILayout.Width(15));
                EditorGUI.BeginDisabledGroup(!buildAction.actionEnabled);
                UnityBuildGUIUtility.DropdownHeader(buildAction.actionName, ref show, false,
                                                    GUILayout.ExpandWidth(true));
                EditorGUI.EndDisabledGroup();
                listEntry.isExpanded = show;

                EditorGUI.BeginDisabledGroup(i == 0);
                if (GUILayout.Button("↑↑", UnityBuildGUIUtility.helpButtonStyle))
                {
                    list.MoveArrayElement(i, 0);
                }

                if (GUILayout.Button("↑", UnityBuildGUIUtility.helpButtonStyle))
                {
                    list.MoveArrayElement(i, i - 1);
                }

                EditorGUI.EndDisabledGroup();

                EditorGUI.BeginDisabledGroup(i == list.arraySize - 1);
                if (GUILayout.Button("↓", UnityBuildGUIUtility.helpButtonStyle))
                {
                    list.MoveArrayElement(i, i + 1);
                }

                EditorGUI.EndDisabledGroup();

                if (GUILayout.Button("X", UnityBuildGUIUtility.helpButtonStyle))
                {
                    BuildAction[] buildActions;
                    buildActions = FindActionsByProperty(property);

                    // Destroy underlying object.
                    ScriptableObject.DestroyImmediate(buildActions[i], true);
                    AssetDatabase.ImportAsset(AssetDatabase.GetAssetPath(BuildSettings.instance));

                    // Remove object reference from list.
                    // TODO: Why do I need to call this twice? First call nulls reference, second one then deletes null entry.
                    list.DeleteArrayElementAtIndex(i);
                    list.DeleteArrayElementAtIndex(i);
                    show = false;
                }

                EditorGUILayout.EndHorizontal();

                if (show && buildAction.actionEnabled)
                {
                    EditorGUILayout.BeginVertical(UnityBuildGUIUtility.dropdownContentStyle);
                    buildAction.Draw(serializedBuildAction);
                    EditorGUILayout.EndVertical();
                }
            }
        }
示例#7
0
        public void BuildFromKeyframes(List <JSplineKeyframe> keyframes)
        {
            bool keyframeDifference = SplineSolver == null;

            if (SplineSolver != null)
            {
                keyframeDifference = keyframes.Count() != Nodes.Count();

                if (SplineType != SplineSolver.SplineType())
                {
                    keyframeDifference = true;
                }
            }

            if (keyframeDifference)
            {
                if (SplineSolver != null)
                {
                    ScriptableObject.DestroyImmediate(SplineSolver);
                }
                if (SplineType == JSplineType.Liner)
                {
                    if (keyframes.Count >= 2)
                    {
                        SplineSolver = ScriptableObject.CreateInstance <JLinearSplineSolver>();
                    }
                    else
                    {
                        throw new SystemException("Need At Least 2 Points");
                    }
                }
                else if (SplineType == JSplineType.Hermite)
                {
                    if (keyframes.Count >= 2)
                    {
                        SplineSolver = ScriptableObject.CreateInstance <JHermiteSplineSolver>();
                    }
                    else
                    {
                        throw new SystemException("Need At Least 2 Points");
                    }
                }
                else if (SplineType == JSplineType.Bezier)
                {
                    if (keyframes.Count >= 2)
                    {
                        SplineSolver = ScriptableObject.CreateInstance <JNTimesBezierSplineSolver>();
                    }
                    else
                    {
                        throw new SystemException("Need At Least 2 Points");
                    }
                }
                else if (SplineType == JSplineType.CatmullRom)
                {
                    if (keyframes.Count >= 4)
                    {
                        SplineSolver = ScriptableObject.CreateInstance <JCatmullRomSplineSolver>();
                    }
                    else
                    {
                        throw new SystemException("Need At Least 4 Points");
                    }
                }
                else if (SplineType == JSplineType.CubicSpline)
                {
                    if (keyframes.Count >= 2)
                    {
                        SplineSolver = ScriptableObject.CreateInstance <JNaturalCubicSplineSolver>();
                    }
                    else
                    {
                        throw new SystemException("Need At Least 2 Points");
                    }
                }
            }
            if (SplineSolver != null)
            {
                SplineSolver.Nodes       = keyframes;
                SplineSolver.closedCurve = IsClosed;
                SplineSolver.Build();
            }
        }
    public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
    {
        var project = ScriptableObject.CreateInstance <ProjectSO>();

        project.project = new ProjectDummy();
        if (SessionStateContext <UnityUser, LinkPermission> .current != null)
        {
            using (var sessionRoomsSelector = UISelectorFactory.createSelector <ProjectRoom[]>(SessionStateContext <UnityUser, LinkPermission> .current, nameof(ISessionStateDataProvider <UnityUser, LinkPermission> .rooms)))
            {
                var realProject = property.serializedObject.targetObject as UIStateManager;
                if (realProject && label.text.Equals("Active Project"))
                {
                    try
                    {
                        UnityProject unityProject = realProject.projectSettingStateData.activeProject;
                        project.project.Name      = unityProject.Name;
                        project.project.ProjectId = unityProject.ProjectId;
                        project.project.Host      = unityProject.Host;
                        m_valid = true;
                    }
                    catch (Exception)
                    {
                        m_valid = false;
                    }
                }
                else
                {
                    if (realProject && label.text.StartsWith("Element"))
                    {
                        try
                        {
                            var          index        = int.Parse(label.text.Split(' ')[1]);
                            var          projectRoom  = (ProjectRoom)sessionRoomsSelector.GetValue()[index];
                            UnityProject unityProject = projectRoom.project;
                            project.project.Name      = unityProject.Name;
                            project.project.ProjectId = unityProject.ProjectId;
                            project.project.Host      = unityProject.Host;
                            m_valid = true;
                        }
                        catch (Exception)
                        {
                            m_valid = false;
                        }
                    }
                }
            }
        }
        SerializedObject serializedObject = new UnityEditor.SerializedObject(project);

        SerializedProperty serializedPropertyProject = serializedObject.FindProperty("project");

        EditorGUI.BeginProperty(position, label, property);

        EditorGUI.LabelField(new Rect(position.x, position.y, position.width, 16), label);

        if (m_valid)
        {
            var nameRect     = new Rect(position.x, position.y + 18, position.width, 16);
            var projecIdRect = new Rect(position.x, position.y + 36, position.width, 16);
            var hostRect     = new Rect(position.x, position.y + 54, position.width, 16);

            EditorGUI.indentLevel++;

            EditorGUI.PropertyField(nameRect, serializedPropertyProject.FindPropertyRelative("Name"));
            EditorGUI.PropertyField(projecIdRect, serializedPropertyProject.FindPropertyRelative("ProjectId"));
            var hostProperty = serializedPropertyProject.FindPropertyRelative("Host");
            if (hostProperty != null)
            {
                EditorGUI.PropertyField(hostRect, serializedPropertyProject.FindPropertyRelative("Host"));
            }

            EditorGUI.indentLevel--;
        }
        EditorGUI.EndProperty();

        ScriptableObject.DestroyImmediate(project);
    }
        public override void Draw(UndoParentNode owner, bool style = true)
        {
            if (m_reordableList == null)
            {
                m_reordableList = new ReorderableList(m_additionalDirectives, typeof(AdditionalDirectiveContainer), true, false, false, false)
                {
                    headerHeight          = 0,
                    footerHeight          = 0,
                    showDefaultBackground = false,
                    drawElementCallback   = (Rect rect, int index, bool isActive, bool isFocused) =>
                    {
                        if (m_additionalDirectives[index] != null)
                        {
                            if (style)
                            {
                                rect.x -= 10;
                            }
                            else
                            {
                                rect.x -= 1;
                            }

                            float popUpWidth     = style ? 0.35f : 0.29f;
                            Rect  popupPos       = new Rect(rect.x, rect.y + 2, popUpWidth * rect.width, rect.height);
                            Rect  labelPos       = new Rect(rect.x + popupPos.width, rect.y, 0.59f * rect.width, rect.height);
                            Rect  buttonPlusPos  = new Rect(labelPos.x + labelPos.width, rect.y, ShaderKeywordButtonLayoutWidth, rect.height);
                            Rect  buttonMinusPos = new Rect(buttonPlusPos.x + buttonPlusPos.width, rect.y, ShaderKeywordButtonLayoutWidth, rect.height);

                            m_additionalDirectives[index].LineType  = (AdditionalLineType)owner.EditorGUIEnumPopup(popupPos, m_additionalDirectives[index].LineType);
                            m_additionalDirectives[index].LineValue = owner.EditorGUITextField(labelPos, string.Empty, m_additionalDirectives[index].LineValue);
                            if (GUI.Button(buttonPlusPos, string.Empty, UIUtils.PlusStyle))
                            {
                                m_actionType  = ReordableAction.Add;
                                m_actionIndex = index;
                            }

                            if (GUI.Button(buttonMinusPos, string.Empty, UIUtils.MinusStyle))
                            {
                                m_actionType  = ReordableAction.Remove;
                                m_actionIndex = index;
                            }
                        }
                    }
                };
            }

            if (m_actionType != ReordableAction.None)
            {
                switch (m_actionType)
                {
                case ReordableAction.Add:
                    AdditionalDirectiveContainer newItem = ScriptableObject.CreateInstance <AdditionalDirectiveContainer>();
                    newItem.hideFlags = HideFlags.HideAndDontSave;
                    m_additionalDirectives.Insert(m_actionIndex, newItem);
                    break;

                case ReordableAction.Remove:
                    AdditionalDirectiveContainer itemToDelete = m_additionalDirectives[m_actionIndex];
                    m_additionalDirectives.RemoveAt(m_actionIndex);
                    ScriptableObject.DestroyImmediate(itemToDelete);
                    break;
                }
                m_isDirty    = true;
                m_actionType = ReordableAction.None;
                EditorGUI.FocusTextInControl(null);
            }
            bool foldoutValue = owner.ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedAdditionalDirectives;

            if (style)
            {
                NodeUtils.DrawPropertyGroup(ref foldoutValue, m_moduleName, DrawReordableList, DrawButtons);
            }
            else
            {
                NodeUtils.DrawNestedPropertyGroup(ref foldoutValue, m_moduleName, DrawReordableList, DrawButtons);
            }
            owner.ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedAdditionalDirectives = foldoutValue;
        }
示例#10
0
        public void setParameter(string param, object content)
        {
            param = param.ToLower();

            if (content == null)
            {
                if (args.ContainsKey(param))
                {
                    args[param] = null;
                }
                else
                {
                    args.Add(param, null);
                }
            }
            else
            {
                bool saved = false;
                if (args.ContainsKey(param))
                {
                    var pv = args[param];

                    if (pv is IsoUnityType)
                    {
                        var i = (pv as IsoUnityType);
                        if (i.canHandle(content))
                        {
                            i.Value = content;
                            saved   = true;
                        }
                        else
                        {
                            ScriptableObject.DestroyImmediate(i, true);
                        }
                    }
                }

                if (!saved)
                {
                    object c = IsoUnityTypeFactory.Instance.getIsoUnityType(content);

                    if (c == null)
                    {
                        c = content;
                    }
#if UNITY_EDITOR
                    else if (Application.isEditor && !Application.isPlaying &&
                             (UnityEditor.AssetDatabase.IsMainAsset(this) || UnityEditor.AssetDatabase.IsSubAsset(this)))
                    {
                        (c as ScriptableObject).hideFlags = HideFlags.HideInHierarchy;
                        UnityEditor.AssetDatabase.AddObjectToAsset(c as Object, this);
                    }
#endif

                    if (args.ContainsKey(param))
                    {
                        args[param] = (Object)c;
                    }
                    else
                    {
                        args.Add(param, (Object)c);
                    }
                }
            }


            this.keys   = new List <string> (args.Keys);
            this.values = new List <Object> (args.Values);
        }
示例#11
0
        public void Draw(UndoParentNode owner, bool style = true)
        {
            if (m_owner == null)
            {
                m_owner = owner;
            }

            if (m_reordableList == null)
            {
                m_reordableList = new ReorderableList(m_items, typeof(UsePassItem), true, false, false, false)
                {
                    headerHeight          = 0,
                    footerHeight          = 0,
                    showDefaultBackground = false,
                    drawElementCallback   = (Rect rect, int index, bool isActive, bool isFocused) =>
                    {
                        if (m_items[index] != null)
                        {
                            float labelWidthMultiplier;
                            float popUpWidth;
                            float shaderSelectorMultiplier;
                            float buttonPlusPosMultiplier;
                            if (style)
                            {
                                rect.x -= 10;
                                labelWidthMultiplier     = 0.9f;
                                popUpWidth               = 0.31f;
                                shaderSelectorMultiplier = 1.01f;
                                buttonPlusPosMultiplier  = 0.78f;
                            }
                            else
                            {
                                rect.x -= 1;
                                labelWidthMultiplier     = 1.01f;
                                popUpWidth               = 0.25f;
                                shaderSelectorMultiplier = 1.0f;
                                buttonPlusPosMultiplier  = 0.55f;
                            }

                            Rect popupPos = new Rect(rect.x, rect.y + 2, popUpWidth * rect.width, rect.height);
                            Rect labelPos = new Rect(rect.x + popupPos.width * labelWidthMultiplier, rect.y, 0.59f * rect.width, rect.height);

                            Rect shaderSelectorPos = new Rect(labelPos.x + labelPos.width * shaderSelectorMultiplier, rect.y, 15, rect.height);

                            Rect buttonPlusPos  = new Rect(shaderSelectorPos.x + shaderSelectorPos.width * buttonPlusPosMultiplier, rect.y, ShaderKeywordButtonLayoutWidth, rect.height);
                            Rect buttonMinusPos = new Rect(buttonPlusPos.x + buttonPlusPos.width, rect.y, ShaderKeywordButtonLayoutWidth, rect.height);

                            EditorGUI.BeginChangeCheck();
                            m_items[index].Location = (UsePassLocation)owner.EditorGUIEnumPopup(popupPos, m_items[index].Location);

                            if (EditorGUI.EndChangeCheck() && m_items[index].Location == UsePassLocation.Below && m_owner != null && m_owner.ContainerGraph.CurrentCanvasMode == NodeAvailability.TemplateShader)
                            {
                                m_items[index].Location = UsePassLocation.Above;
                                UIUtils.ShowMessage("Below option still not available on templates");
                            }
                            m_items[index].Value = owner.EditorGUITextField(labelPos, string.Empty, m_items[index].Value);

                            if (GUI.Button(shaderSelectorPos, string.Empty, UIUtils.InspectorPopdropdownFallback))
                            {
                                EditorGUI.FocusTextInControl(null);
                                GUI.FocusControl(null);
                                m_currentUsePassIdx = index;
                                DisplayShaderContext(owner, GUILayoutUtility.GetRect(GUIContent.none, EditorStyles.popup));
                            }

                            if (GUI.Button(buttonPlusPos, string.Empty, UIUtils.PlusStyle))
                            {
                                m_actionType  = ReordableAction.Add;
                                m_actionIndex = index;
                            }

                            if (GUI.Button(buttonMinusPos, string.Empty, UIUtils.MinusStyle))
                            {
                                m_actionType  = ReordableAction.Remove;
                                m_actionIndex = index;
                            }
                        }
                    }
                };
            }

            if (m_actionType != ReordableAction.None)
            {
                switch (m_actionType)
                {
                case ReordableAction.Add:
                    UsePassItem newItem = ScriptableObject.CreateInstance <UsePassItem>();
                    newItem.hideFlags = HideFlags.HideAndDontSave;
                    m_items.Insert(m_actionIndex + 1, newItem);
                    break;

                case ReordableAction.Remove:
                    UsePassItem itemToDelete = m_items[m_actionIndex];
                    m_items.RemoveAt(m_actionIndex);
                    ScriptableObject.DestroyImmediate(itemToDelete);
                    break;
                }
                m_isDirty    = true;
                m_actionType = ReordableAction.None;
                EditorGUI.FocusTextInControl(null);
            }
            bool foldoutValue = owner.ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedUsePass;

            if (style)
            {
                NodeUtils.DrawPropertyGroup(ref foldoutValue, m_moduleName, DrawReordableList, DrawButtons);
            }
            else
            {
                NodeUtils.DrawNestedPropertyGroup(ref foldoutValue, m_moduleName, DrawReordableList, DrawButtons);
            }
            owner.ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedUsePass = foldoutValue;
        }
示例#12
0
 void OnDestroy()
 {
     ScriptableObject.DestroyImmediate(this.ForkGroup, Application.isEditor && !Application.isPlaying);
 }
示例#13
0
 /// <summary>
 /// Destroy an event object and remove it from the array of events
 /// </summary>
 /// <param name="eventToDelete"></param>
 public void DeleteEvent(AudioEvent eventToDelete)
 {
     eventToDelete.DeleteNodes();
     this.audioEvents.Remove(eventToDelete);
     ScriptableObject.DestroyImmediate(eventToDelete, true);
 }
示例#14
0
 /// <summary>
 /// Destroy an AudioParameter and remove it from the array of parameters
 /// </summary>
 /// <param name="parameterToDelete">The AudioParameter you wish to delete</param>
 public void DeleteParameter(AudioParameter parameterToDelete)
 {
     this.parameters.Remove(parameterToDelete);
     ScriptableObject.DestroyImmediate(parameterToDelete, true);
 }
示例#15
0
    public override void DrawGUI()
    {
        EventFilter returnedFilter;

        Expanded = TriggerGUILayout.DrawCustomFilterInspectorBar(Expanded, Filter, out returnedFilter);

        if (!returnedFilter)
        {
            foreach (Variable var in _outputVariables.Values)
            {
                ScriptableObject.DestroyImmediate(var);
            }
            Delete();
            return;
        }
        Filter = returnedFilter;

        if (Expanded)
        {
            EditorGUILayout.BeginHorizontal(GUILayout.ExpandWidth(true));
            GUILayout.Space(25);
            EditorGUILayout.BeginVertical();

            GUILayout.BeginVertical(GUI.skin.box);

            TriggerAttribute triggerAttribute = TriggerGUILayout.GetTriggerAttribute(Filter.GetType());
            if (triggerAttribute != null)
            {
                GUILayout.Label(triggerAttribute.Description, EditorStyles.wordWrappedLabel, GUILayout.ExpandWidth(false));
            }

            EditorGUILayoutExt.BeginLabelStyle(11, FontStyle.Bold, null, null);
            GUILayout.Label("Input Parameters");
            EditorGUILayoutExt.EndLabelStyle();

            TriggerGUILayout.DrawSerializedObject(_serializedFilter, Filter.GetType(), Parent.GetScopeVariables());

            EditorGUILayout.Separator();

            EditorGUILayoutExt.BeginLabelStyle(11, FontStyle.Bold, null, null);
            GUILayout.Label("Output Parameters");
            EditorGUILayoutExt.EndLabelStyle();

            foreach (var v in Filter.GetOutputParameterDeclarations())
            {
                GUILayout.Label(v.Name, GUILayout.ExpandWidth(false));
            }

            EditorGUILayout.BeginHorizontal();
            GUILayout.FlexibleSpace();
            GUILayout.Box("", GUILayout.Width(300), GUILayout.Height(1));
            EditorGUILayout.EndHorizontal();

            TriggerGUILayout.DrawAddFilterSelector(Filter.gameObject, Context.Refresh);
            TriggerGUILayout.DrawAddActionSelector(Filter.gameObject, Context.Refresh);

            EditorGUILayout.Separator();

            GUILayout.EndVertical();
            EditorGUILayout.EndVertical();
            EditorGUILayout.EndHorizontal();
        }
    }
示例#16
0
        public void ExportingNullMeshTest()
        {
            var validator = ScriptableObject.CreateInstance <MeshExportValidator>();
            var root      = new GameObject("root");

            try
            {
                {
                    var child = GameObject.CreatePrimitive(PrimitiveType.Cube);
                    child.transform.SetParent(root.transform);
                    // remove MeshFilter
                    Component.DestroyImmediate(child.GetComponent <MeshFilter>());
                }

                {
                    var child = GameObject.CreatePrimitive(PrimitiveType.Cube);
                    child.transform.SetParent(root.transform);
                    // set null
                    child.GetComponent <MeshFilter>().sharedMesh = null;
                }

                // validate
                validator.SetRoot(root, new GltfExportSettings(), new DefualtBlendShapeExportFilter());
                var vs = validator.Validate(root);
                Assert.True(vs.All(x => x.CanExport));

                // export
                var    gltf = new glTF();
                string json;
                using (var exporter = new gltfExporter(gltf, new GltfExportSettings()))
                {
                    exporter.Prepare(root);
                    exporter.Export(new UniGLTF.GltfExportSettings(), new EditorTextureSerializer());

                    json = gltf.ToJson();
                }

                Assert.AreEqual(0, gltf.meshes.Count);
                Assert.AreEqual(2, gltf.nodes.Count);
                Assert.AreEqual(-1, gltf.nodes[0].mesh);
                Assert.AreEqual(-1, gltf.nodes[1].mesh);

                // import
                {
                    var storage = new SimpleStorage(new ArraySegment <byte>(new byte[1024 * 1024]));
                    var data    = new JsonWithStorageParser(json, storage).Parse();

                    using (var context = new ImporterContext(data))
                        using (var loaded = context.Load())
                        {
                            Assert.AreEqual(2, loaded.transform.GetChildren().Count());

                            {
                                var child = loaded.transform.GetChild(0);
                                Assert.IsNull(child.GetSharedMesh());
                            }

                            {
                                var child = loaded.transform.GetChild(1);
                                Assert.IsNull(child.GetSharedMesh());
                            }
                        }
                }
            }
            finally
            {
                GameObject.DestroyImmediate(root);
                ScriptableObject.DestroyImmediate(validator);
            }
        }
示例#17
0
        public void RecreateCopy()
        {
            if (m_SubChildren != null)
            {
                foreach (var child in m_SubChildren)
                {
                    if (child != null)
                    {
                        child.onInvalidateDelegate -= SubChildrenOnInvalidate;
                        ScriptableObject.DestroyImmediate(child, true);
                    }
                }
            }

            if (subgraph == null)
            {
                m_SubChildren  = null;
                m_SubBlocks    = null;
                m_UsedSubgraph = null;
                return;
            }

            var graph = m_Subgraph.GetResource().GetOrCreateGraph();
            HashSet <ScriptableObject> dependencies = new HashSet <ScriptableObject>();

            var context = graph.children.OfType <VFXBlockSubgraphContext>().FirstOrDefault();

            if (context == null)
            {
                m_SubChildren  = null;
                m_SubBlocks    = null;
                m_UsedSubgraph = null;
                return;
            }

            foreach (var child in graph.children.Where(t => t is VFXOperator || t is VFXParameter))
            {
                dependencies.Add(child);
                child.CollectDependencies(dependencies);
            }

            foreach (var block in context.children)
            {
                dependencies.Add(block);
                block.CollectDependencies(dependencies);
            }

            var copy = VFXMemorySerializer.DuplicateObjects(dependencies.ToArray());

            m_UsedSubgraph = graph;
            m_SubChildren  = copy.OfType <VFXModel>().Where(t => t is VFXBlock || t is VFXOperator || t is VFXParameter).ToArray();
            m_SubBlocks    = m_SubChildren.OfType <VFXBlock>().ToArray();
            foreach (var child in m_SubChildren)
            {
                child.onInvalidateDelegate += SubChildrenOnInvalidate;
            }
            foreach (var child in copy)
            {
                child.hideFlags = HideFlags.HideAndDontSave;
            }

            foreach (var subgraphBlocks in m_SubBlocks.OfType <VFXSubgraphBlock>())
            {
                subgraphBlocks.RecreateCopy();
            }
            SyncSlots(VFXSlot.Direction.kInput, true);
        }
示例#18
0
 public void DeleteScriptableObject(ScriptableObject o)
 {
     AssetDatabase.DeleteAsset(AssetDatabase.GetAssetPath(o));
     ScriptableObject.DestroyImmediate(o);
 }
        public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
        {
            EditorGUI.BeginProperty(position, label, property);

            EditorGUILayout.BeginHorizontal();
            bool show = property.isExpanded;

            UnityBuildGUIUtility.DropdownHeader(label.text, ref show, false, GUILayout.ExpandWidth(true));
            property.isExpanded = show;

            UnityBuildGUIUtility.HelpButton("Parameter-Details#build-actions");
            EditorGUILayout.EndHorizontal();

            list = property.FindPropertyRelative("buildActions");

            List <Type> actionTypes;

            if (property.name.ToUpper().Contains("PRE"))
            {
                actionTypes = BuildActionListUtility.preBuildActions;
            }
            else
            {
                actionTypes = BuildActionListUtility.postBuildActions;
            }

            if (show)
            {
                EditorGUILayout.BeginVertical(UnityBuildGUIUtility.dropdownContentStyle);

                for (int i = 0; i < list.arraySize; i++)
                {
                    SerializedProperty listEntry = list.GetArrayElementAtIndex(i);

                    BuildAction      buildAction           = listEntry.objectReferenceValue as BuildAction;
                    SerializedObject serializedBuildAction = new SerializedObject(buildAction);

                    EditorGUILayout.BeginHorizontal();
                    show = listEntry.isExpanded;

                    buildAction.actionEnabled = EditorGUILayout.Toggle(buildAction.actionEnabled, GUILayout.Width(15));
                    EditorGUI.BeginDisabledGroup(!buildAction.actionEnabled);
                    UnityBuildGUIUtility.DropdownHeader(buildAction.actionName, ref show, false, GUILayout.ExpandWidth(true));
                    EditorGUI.EndDisabledGroup();
                    listEntry.isExpanded = show;

                    EditorGUI.BeginDisabledGroup(i == 0);
                    if (GUILayout.Button("↑↑", UnityBuildGUIUtility.helpButtonStyle))
                    {
                        list.MoveArrayElement(i, 0);
                    }
                    if (GUILayout.Button("↑", UnityBuildGUIUtility.helpButtonStyle))
                    {
                        list.MoveArrayElement(i, i - 1);
                    }
                    EditorGUI.EndDisabledGroup();

                    EditorGUI.BeginDisabledGroup(i == list.arraySize - 1);
                    if (GUILayout.Button("↓", UnityBuildGUIUtility.helpButtonStyle))
                    {
                        list.MoveArrayElement(i, i + 1);
                    }
                    EditorGUI.EndDisabledGroup();

                    if (GUILayout.Button("X", UnityBuildGUIUtility.helpButtonStyle))
                    {
                        BuildAction[] buildActions;
                        if (property.name.ToUpper().Contains("PRE"))
                        {
                            buildActions = BuildSettings.preBuildActions.buildActions;
                        }
                        else
                        {
                            buildActions = BuildSettings.postBuildActions.buildActions;
                        }

                        // Destroy underlying object.
                        ScriptableObject.DestroyImmediate(buildActions[i], true);
                        AssetDatabase.ImportAsset(AssetDatabase.GetAssetPath(BuildSettings.instance));

                        // Remove object reference from list.
                        // TODO: Why do I need to call this twice? First call nulls reference, second one then deletes null entry.
                        list.DeleteArrayElementAtIndex(i);
                        list.DeleteArrayElementAtIndex(i);
                        show = false;
                    }

                    EditorGUILayout.EndHorizontal();

                    if (show && buildAction.actionEnabled)
                    {
                        EditorGUILayout.BeginVertical(UnityBuildGUIUtility.dropdownContentStyle);
                        buildAction.Draw(serializedBuildAction);
                        EditorGUILayout.EndVertical();
                    }
                }

                if (list.arraySize > 0)
                {
                    GUILayout.Space(20);
                }

                if (actionTypes.Count > 0)
                {
                    GUILayout.BeginHorizontal();

                    string[] buildActionNameList = new string[actionTypes.Count];
                    for (int i = 0; i < buildActionNameList.Length; i++)
                    {
                        buildActionNameList[i] = actionTypes[i].Name;
                    }

                    index = EditorGUILayout.Popup(index, buildActionNameList, UnityBuildGUIUtility.popupStyle, GUILayout.ExpandWidth(true));
                    if (GUILayout.Button("Add Build Action", GUILayout.ExpandWidth(false), GUILayout.MaxWidth(150)) && index < actionTypes.Count)
                    {
                        Type addedType = actionTypes[index];

                        int addedIndex = list.arraySize;
                        list.InsertArrayElementAtIndex(addedIndex);
                        list.serializedObject.ApplyModifiedProperties();

                        BuildAction[] buildActions;
                        if (property.name.ToUpper().Contains("PRE"))
                        {
                            buildActions = BuildSettings.preBuildActions.buildActions;
                        }
                        else
                        {
                            buildActions = BuildSettings.postBuildActions.buildActions;
                        }

                        //buildActions[addedIndex] = Activator.CreateInstance(addedType) as BuildAction;
                        buildActions[addedIndex]            = ScriptableObject.CreateInstance(addedType) as BuildAction;
                        buildActions[addedIndex].name       = addedType.Name;
                        buildActions[addedIndex].actionName = addedType.Name;
                        buildActions[addedIndex].filter     = new BuildFilter();

                        AssetDatabase.AddObjectToAsset(buildActions[addedIndex], BuildSettings.instance);
                        AssetDatabase.ImportAsset(AssetDatabase.GetAssetPath(BuildSettings.instance));

                        index = 0;
                    }

                    GUILayout.EndHorizontal();
                }
                else
                {
                    EditorGUILayout.HelpBox("No Build Actions found.", MessageType.Info);
                }

                EditorGUILayout.EndVertical();
            }

            EditorGUI.EndProperty();
        }
        public override void Run()
        {
            var editorConnectionTestCollector = RemoteTestRunController.instance;

            editorConnectionTestCollector.hideFlags = HideFlags.HideAndDontSave;
            editorConnectionTestCollector.Init(m_TargetPlatform, m_HeartbeatTimeout);

            var remotePlayerLogController = RemotePlayerLogController.instance;

            remotePlayerLogController.hideFlags = HideFlags.HideAndDontSave;

            using (var settings = new PlayerLauncherContextSettings(m_OverloadTestRunSettings))
            {
                m_SceneName = CreateSceneName();
                var    scene     = PrepareScene(m_SceneName);
                string scenePath = scene.path;

                var filter          = m_Settings.BuildNUnitFilter();
                var runner          = LoadTests(filter);
                var exceptionThrown = ExecutePreBuildSetupMethods(runner.LoadedTest, filter);
                if (exceptionThrown)
                {
                    ReopenOriginalScene(m_Settings.originalScene);
                    AssetDatabase.DeleteAsset(m_SceneName);
                    CallbacksDelegator.instance.RunFailed("Run Failed: One or more errors in a prebuild setup. See the editor log for details.");
                    return;
                }

                EditorSceneManager.MarkSceneDirty(scene);
                EditorSceneManager.SaveScene(scene);

                var playerBuildOptions = GetBuildOptions(scenePath);

                var success = BuildAndRunPlayer(playerBuildOptions);

                editorConnectionTestCollector.PostBuildAction();
                ExecutePostBuildCleanupMethods(runner.LoadedTest, filter);

                ReopenOriginalScene(m_Settings.originalScene);
                AssetDatabase.DeleteAsset(m_SceneName);

                if (!success)
                {
                    editorConnectionTestCollector.CleanUp();
                    ScriptableObject.DestroyImmediate(editorConnectionTestCollector);
                    Debug.LogError("Player build failed");
                    throw new TestLaunchFailedException("Player build failed");
                }

                if ((playerBuildOptions.BuildPlayerOptions.options & BuildOptions.AutoRunPlayer) != 0)
                {
                    editorConnectionTestCollector.PostSuccessfulBuildAction();
                    editorConnectionTestCollector.PostSuccessfulLaunchAction();
                }

                var runSettings = m_OverloadTestRunSettings as PlayerLauncherTestRunSettings;
                if (success && runSettings != null && runSettings.buildOnly)
                {
                    EditorUtility.RevealInFinder(playerBuildOptions.BuildPlayerOptions.locationPathName);
                }
            }
        }