示例#1
0
        void DrawMainBody()
        {
            EditorGUI.BeginChangeCheck();
            {
                EditorGUILayout.Separator();
                int itemCount = m_availableTags.Count;

                if (itemCount == 0)
                {
                    EditorGUILayout.HelpBox("Your list is Empty!\nUse the plus button to add one.", MessageType.Info);
                }

                int   markedToDelete     = -1;
                float originalLabelWidth = EditorGUIUtility.labelWidth;
                for (int i = 0; i < itemCount; i++)
                {
                    m_availableTags[i].TagFoldout = m_currentOwner.EditorGUILayoutFoldout(m_availableTags[i].TagFoldout, string.Format("[{0}] - {1}", i, m_availableTags[i].TagName));
                    if (m_availableTags[i].TagFoldout)
                    {
                        EditorGUI.indentLevel      += 1;
                        EditorGUIUtility.labelWidth = 70;
                        //Tag Name
                        EditorGUI.BeginChangeCheck();
                        m_availableTags[i].TagName = m_currentOwner.EditorGUILayoutTextField(TagNameStr, m_availableTags[i].TagName);
                        if (EditorGUI.EndChangeCheck())
                        {
                            m_availableTags[i].TagName = UIUtils.RemoveShaderInvalidCharacters(m_availableTags[i].TagName);
                            m_tagNameCheckFlag         = true;
                            m_tagNameCheckItemId       = i;
                            m_tagNameCheckTimestamp    = EditorApplication.timeSinceStartup;
                        }

                        //Tag Value
                        switch (m_availableTags[i].SpecialTag)
                        {
                        case TemplateSpecialTags.DisableBatching:
                        {
                            m_availableTags[i].Batching = (DisableBatching)m_currentOwner.EditorGUILayoutEnumPopup(RenderTypeLabelStr, m_availableTags[i].Batching);
                            m_availableTags[i].TagValue = m_availableTags[i].Batching.ToString();
                        }
                        break;

                        case TemplateSpecialTags.RenderType:
                        {
                            m_availableTags[i].RenderType = (RenderType)m_currentOwner.EditorGUILayoutEnumPopup(RenderTypeLabelStr, m_availableTags[i].RenderType);
                            if (m_availableTags[i].RenderType == RenderType.Custom)
                            {
                                m_availableTags[i].TagValue = m_currentOwner.EditorGUILayoutTextField(CustomRenderTypeLabelStr, m_availableTags[i].TagValue);
                            }
                        }
                        break;

                        case TemplateSpecialTags.Queue:
                        {
                            EditorGUI.BeginChangeCheck();
                            m_availableTags[i].RenderQueue       = (RenderQueue)m_currentOwner.EditorGUILayoutEnumPopup(QueueLabelStr, m_availableTags[i].RenderQueue, GUILayout.MinWidth(150));
                            m_availableTags[i].RenderQueueOffset = m_currentOwner.EditorGUILayoutIntField(QueueIndexStr, m_availableTags[i].RenderQueueOffset);
                            if (EditorGUI.EndChangeCheck())
                            {
                                m_availableTags[i].BuildQueueTagValue();
                            }
                        }
                        break;

                        case TemplateSpecialTags.None:
                        {
                            EditorGUI.BeginChangeCheck();
                            m_availableTags[i].TagValue = m_currentOwner.EditorGUILayoutTextField(TagValueStr, m_availableTags[i].TagValue);
                            if (EditorGUI.EndChangeCheck())
                            {
                                m_availableTags[i].TagValue = UIUtils.RemoveShaderInvalidCharacters(m_availableTags[i].TagValue);
                            }
                        }
                        break;
                        }

                        EditorGUIUtility.labelWidth = originalLabelWidth;

                        EditorGUILayout.BeginHorizontal();
                        {
                            GUILayout.Label(" ");
                            // Add new port
                            if (m_currentOwner.GUILayoutButton(string.Empty, UIUtils.PlusStyle, GUILayout.Width(ShaderKeywordButtonLayoutWidth)))
                            {
                                m_availableTags.Insert(i + 1, new CustomTagData());
                                EditorGUI.FocusTextInControl(null);
                            }

                            //Remove port
                            if (m_currentOwner.GUILayoutButton(string.Empty, UIUtils.MinusStyle, GUILayout.Width(ShaderKeywordButtonLayoutWidth)))
                            {
                                markedToDelete = i;
                            }
                        }
                        EditorGUILayout.EndHorizontal();

                        EditorGUI.indentLevel -= 1;
                    }
                }
                if (markedToDelete > -1)
                {
                    if (m_availableTags.Count > markedToDelete)
                    {
                        m_availableTags.RemoveAt(markedToDelete);
                        EditorGUI.FocusTextInControl(null);
                    }
                }
                EditorGUILayout.Separator();
            }
            if (EditorGUI.EndChangeCheck())
            {
                m_isDirty = true;
            }
        }