Example #1
0
        void DrawButtons()
        {
            EditorGUILayout.Separator();

            // Add keyword
            if (GUILayout.Button(string.Empty, UIUtils.PlusStyle, GUILayout.Width(Constants.PlusMinusButtonLayoutWidth)))
            {
                AdditionalDirectiveContainer newItem = ScriptableObject.CreateInstance <AdditionalDirectiveContainer>();
                newItem.hideFlags = HideFlags.HideAndDontSave;
                m_additionalDirectives.Add(newItem);
                UpdateNativeIndex();
                EditorGUI.FocusTextInControl(null);
                m_isDirty = true;
            }

            //Remove keyword
            if (GUILayout.Button(string.Empty, UIUtils.MinusStyle, GUILayout.Width(Constants.PlusMinusButtonLayoutWidth)))
            {
                if (m_additionalDirectives.Count > 0)
                {
                    AdditionalDirectiveContainer itemToDelete = m_additionalDirectives[m_additionalDirectives.Count - 1];
                    m_additionalDirectives.RemoveAt(m_additionalDirectives.Count - 1);
                    ScriptableObject.DestroyImmediate(itemToDelete);
                    EditorGUI.FocusTextInControl(null);
                }
                m_isDirty = true;
            }
        }
Example #2
0
        // read comment on m_directivesSaveItems declaration
        public void UpdateDirectivesFromSaveItems()
        {
            if (m_directivesSaveItems.Count > 0)
            {
                for (int i = 0; i < m_additionalDirectives.Count; i++)
                {
                    if (m_additionalDirectives[i] != null)
                    {
                        ScriptableObject.DestroyImmediate(m_additionalDirectives[i]);
                    }
                }

                m_additionalDirectives.Clear();

                for (int i = 0; i < m_directivesSaveItems.Count; i++)
                {
                    AdditionalDirectiveContainer newItem = ScriptableObject.CreateInstance <AdditionalDirectiveContainer>();
                    newItem.hideFlags = HideFlags.HideAndDontSave;
                    newItem.Init(m_directivesSaveItems[i]);
                    m_additionalDirectives.Add(newItem);
                }
                UpdateNativeIndex();
                //m_directivesSaveItems.Clear();
            }
        }
Example #3
0
 public override void ReadFromString(ref uint index, ref string[] nodeParams)
 {
     try
     {
         int count = Convert.ToInt32(nodeParams[index++]);
         for (int i = 0; i < count; i++)
         {
             AdditionalLineType           lineType  = (AdditionalLineType)Enum.Parse(typeof(AdditionalLineType), nodeParams[index++]);
             string                       lineValue = nodeParams[index++];
             AdditionalDirectiveContainer newItem   = ScriptableObject.CreateInstance <AdditionalDirectiveContainer>();
             newItem.hideFlags = HideFlags.HideAndDontSave;
             newItem.LineType  = lineType;
             newItem.LineValue = lineValue.Replace(Constants.SemiColonSeparator, ';');
             if (UIUtils.CurrentShaderVersion() > 15607)
             {
                 newItem.GUIDToggle = Convert.ToBoolean(nodeParams[index++]);
                 newItem.GUIDValue  = nodeParams[index++];
                 if (newItem.GUIDToggle)
                 {
                     newItem.LibObject = AssetDatabase.LoadAssetAtPath <TextAsset>(AssetDatabase.GUIDToAssetPath(newItem.GUIDValue));
                     if (newItem.LibObject == null)
                     {
                         Debug.LogWarning("Include file not found with GUID " + newItem.GUIDValue);
                     }
                 }
             }
             m_additionalDirectives.Add(newItem);
         }
     }
     catch (Exception e)
     {
         Debug.LogException(e);
     }
 }
Example #4
0
 public AdditionalDirectiveContainerSaveItem(AdditionalDirectiveContainer container)
 {
     LineType   = container.LineType;
     LineValue  = container.LineValue;
     GUIDToggle = container.GUIDToggle;
     GUIDValue  = container.GUIDValue;
 }
Example #5
0
 public void Init(string ownerId, AdditionalDirectiveContainer item)
 {
     LineType   = item.LineType;
     LineValue  = item.LineValue;
     GUIDToggle = item.GUIDToggle;
     GUIDValue  = item.GUIDValue;
     Origin     = item.Origin;
     LibObject  = item.LibObject;
     OwnerId    = ownerId;
 }
Example #6
0
        //public void RemoveShaderFunctionItem( AdditionalLineType type, string item )
        //{
        //	m_shaderFunctionDirectives.RemoveAll( x => x.LineType == type && x.LineValue.Equals( item ) );
        //}

        public void AddItems(AdditionalLineType type, List <string> items)
        {
            int count = items.Count;

            for (int i = 0; i < count; i++)
            {
                AdditionalDirectiveContainer newItem = ScriptableObject.CreateInstance <AdditionalDirectiveContainer>();
                newItem.LineType  = type;
                newItem.LineValue = items[i];
                newItem.hideFlags = HideFlags.HideAndDontSave;
                m_additionalDirectives.Add(newItem);
            }
        }
Example #7
0
 public void AddNativeContainer()
 {
     if (m_nativeDirectives.Count > 0)
     {
         if (m_additionalDirectives.FindIndex(x => x.Origin.Equals(AdditionalContainerOrigin.Native)) == -1)
         {
             AdditionalDirectiveContainer newItem = ScriptableObject.CreateInstance <AdditionalDirectiveContainer>();
             newItem.Origin    = AdditionalContainerOrigin.Native;
             newItem.hideFlags = HideFlags.HideAndDontSave;
             m_additionalDirectives.Add(newItem);
         }
     }
 }
Example #8
0
        //public void AddShaderFunctionItem( AdditionalLineType type, string item )
        //{
        //	UpdateShaderFunctionDictionary();
        //	string id = type + item;
        //	if( !m_shaderFunctionDictionary.ContainsKey( id ) )
        //	{
        //		AdditionalDirectiveContainer newItem = ScriptableObject.CreateInstance<AdditionalDirectiveContainer>();
        //		newItem.LineType = type;
        //		newItem.LineValue = item;
        //		newItem.hideFlags = HideFlags.HideAndDontSave;
        //		m_shaderFunctionDirectives.Add( newItem );
        //		m_shaderFunctionDictionary.Add( id, newItem );
        //	}
        //}

        public void AddShaderFunctionItems(string ownerOutputId, List <AdditionalDirectiveContainer> functionList)
        {
            RemoveShaderFunctionItems(ownerOutputId);
            if (functionList.Count > 0)
            {
                for (int i = 0; i < functionList.Count; i++)
                {
                    AdditionalDirectiveContainer item = ScriptableObject.CreateInstance <AdditionalDirectiveContainer>();
                    item.Init(ownerOutputId, functionList[i]);
                    m_shaderFunctionDirectives.Add(item);
                }
            }
            //if( functionList.Count > 0 )
            //{

            //	m_shaderFunctionDirectives.AddRange( functionList );
            //}
        }
 public override void ReadFromString(ref uint index, ref string[] nodeParams)
 {
     try
     {
         int count = Convert.ToInt32(nodeParams[index++]);
         for (int i = 0; i < count; i++)
         {
             AdditionalLineType           lineType  = (AdditionalLineType)Enum.Parse(typeof(AdditionalLineType), nodeParams[index++]);
             string                       lineValue = nodeParams[index++];
             AdditionalDirectiveContainer newItem   = ScriptableObject.CreateInstance <AdditionalDirectiveContainer>();
             newItem.hideFlags = HideFlags.HideAndDontSave;
             newItem.LineType  = lineType;
             newItem.LineValue = lineValue;
             m_additionalDirectives.Add(newItem);
         }
     }
     catch (Exception e)
     {
         Debug.LogException(e);
     }
 }
Example #10
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,
                    elementHeightCallback = (index) =>
                    {
                        if (m_additionalDirectives[index].Origin == AdditionalContainerOrigin.Native && m_nativeDirectivesFoldout)
                        {
                            return((m_nativeDirectives.Count + 1) * (EditorGUIUtility.singleLineHeight) + 5);
                        }

                        return(EditorGUIUtility.singleLineHeight + 5);
                    },
                    drawElementCallback = (Rect rect, int index, bool isActive, bool isFocused) =>
                    {
                        if (m_additionalDirectives[index].Origin == AdditionalContainerOrigin.Native && m_nativeDirectivesFoldout)
                        {
                            rect.height = (m_nativeDirectives.Count + 1) * (EditorGUIUtility.singleLineHeight) + 5;
                        }

                        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);

                            if (m_additionalDirectives[index].Origin == AdditionalContainerOrigin.Native)
                            {
                                m_nativeRect       = rect;
                                m_nativeRect.xMin += 2;
                                m_nativeRect.xMax -= 2;
                                m_nativeRect.yMax -= 2;
#if UNITY_2019_3_OR_NEWER
                                EditorGUI.LabelField(m_nativeRect, NativeFoldoutStr);
#else
                                NodeUtils.DrawNestedPropertyGroup(ref m_nativeDirectivesFoldout, rect, NativeFoldoutStr, DrawNativeItemsRect, 4);
#endif
                                return;
                            }

                            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;
                            }
                        }
                    },
                    onReorderCallback = ( ReorderableList list ) =>
                    {
                        UpdateNativeIndex();
                    }
                };
            }

            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;
        }
        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.xMin -= 10;
                            }
                            else
                            {
                                rect.xMin -= 1;
                            }

                            float popUpWidth = style?75:65f;

                            Rect popupPos       = new Rect(rect.x, rect.y, popUpWidth, EditorGUIUtility.singleLineHeight);
                            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);
                            Rect labelPos       = new Rect(rect.x + popupPos.width, rect.y, rect.width - popupPos.width - buttonPlusPos.width - buttonMinusPos.width, rect.height);
                            labelPos.height = EditorGUIUtility.singleLineHeight;
                            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 + 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 = 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;
        }