Ejemplo n.º 1
0
    public virtual void SetContext(NPVoxNormalProcessorPreviewContext _context)
    {
        if (m_context != null)
        {
            m_context.Invalidate();
        }

        m_context = _context;
        NPVoxNormalProcessor processor = m_context.ViewedProcessor;
        NPVoxAttributeNormalProcessorListItem listItemAttribute = NPipeReflectionUtil.GetAttribute <NPVoxAttributeNormalProcessorListItem>(processor);

        m_title = listItemAttribute.EditorName;

        InitScene();
    }
Ejemplo n.º 2
0
    public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
    {
        NPVoxMeshOutput          target        = property.serializedObject.targetObject as NPVoxMeshOutput;
        NPVoxNormalProcessorList processorList = target.NormalProcessors;

        EditorGUI.BeginProperty(position, label, property);
        // Customize gui style
        Color previousBGColor = GUI.backgroundColor;
        Color previousFGColor = GUI.contentColor;

        GUI.backgroundColor = s_colorBackgroundGUIPrimary;
        GUI.backgroundColor = s_colorBackgroundGUIPrimary;
        // GUI.contentColor = s_colorForegroundGUI; // Doesn't seem to work

        // Header + Expand / Collapse Button
        GUILayout.BeginHorizontal();
        GUILayout.Label("Normal Processors (" + processorList.GetProcessors().Count + ")", GUILayout.Width(s_widthHeaderLabel));

        if (!m_expanded)
        {
            if (GUILayout.Button("Expand", GUILayout.Width(s_widthExpandButton)))
            {
                m_expanded = true;
            }
        }
        else
        {
            if (GUILayout.Button("Collapse", GUILayout.Width(s_widthExpandButton)))
            {
                m_expanded = false;
            }
        }

        GUILayout.EndHorizontal();

        if (!m_expanded)
        {
            GUILayout.Space(12.0f);
        }

        // List management
        if (m_expanded)
        {
            Dictionary <string, System.Type> processorClasses = new Dictionary <string, System.Type>();
            processorClasses.Add("<None>", null);
            List <System.Type> allTypes = new List <System.Type>(NPipeReflectionUtil.GetAllTypesWithAttribute(typeof(NPVoxAttributeNormalProcessorListItem)));
            allTypes = allTypes.OrderBy(x => (( NPVoxAttributeNormalProcessorListItem )x.GetCustomAttributes(typeof(NPVoxAttributeNormalProcessorListItem), true)[0]).ListPriority).ToList();
            foreach (System.Type factoryType in allTypes)
            {
                NPVoxAttributeNormalProcessorListItem attr = ( NPVoxAttributeNormalProcessorListItem )factoryType.GetCustomAttributes(typeof(NPVoxAttributeNormalProcessorListItem), true)[0];

                if (attr.ClassType.BaseType != typeof(NPVoxNormalProcessor))
                {
                    continue;
                }

                processorClasses.Add(attr.EditorName, factoryType);
            }

            string[] processorKeys = processorClasses.Keys.ToArray();

            GUILayout.BeginHorizontal();
            GUILayout.Space(s_widthTab);
            m_indexPopupAddProcessor = EditorGUILayout.Popup(m_indexPopupAddProcessor, processorKeys);
            bool optionAdded = GUILayout.Button("Add");
            GUILayout.EndHorizontal();

            if (optionAdded)
            {
                System.Type processorClass = processorClasses[processorKeys[m_indexPopupAddProcessor]];
                if (processorClass != null)
                {
                    if (UnityEditor.AssetDatabase.GetAssetPath(processorList).Length == 0)
                    {
                        target.IncludeSubAssets(UnityEditor.AssetDatabase.GetAssetPath(target));
                    }
                    processorList.AddProcessor(processorClass)
                    .AddToAsset(UnityEditor.AssetDatabase.GetAssetPath(target));
                }
            }

            NPVoxNormalProcessor itemToMoveBack    = null;
            NPVoxNormalProcessor itemToMoveForward = null;

            foreach (NPVoxNormalProcessor processor in processorList.GetProcessors())
            {
                NPVoxAttributeNormalProcessorListItem attr = ( NPVoxAttributeNormalProcessorListItem )processor.GetType().GetCustomAttributes(typeof(NPVoxAttributeNormalProcessorListItem), true)[0];

                GUILayout.Space(s_verticalSpacePerItem);

                GUILayout.BeginHorizontal();
                GUILayout.Space(s_widthTab);
                GUILayout.Label(attr.EditorName, GUILayout.MinWidth(s_widthMinItemName));

                GUILayout.Space(20.0f);

                GUI.backgroundColor = s_colorBackgroundGUISecondary;

                if (GUILayout.Button("View / Edit"))
                {
                    NPVoxNormalProcessorPreview preview = NPVoxNormalProcessorPreview.ShowWindow(processor.GetType());
                    preview.SetContext(processor.GeneratePreviewContext(target));
                }

                GUILayout.Space(20.0f);

                if (GUILayout.Button("^", GUILayout.Width(s_widthUpDownButton), GUILayout.ExpandWidth(true)))
                {
                    itemToMoveBack = processor;
                }

                if (GUILayout.Button("v", GUILayout.Width(s_widthUpDownButton), GUILayout.ExpandWidth(true)))
                {
                    itemToMoveForward = processor;
                }

                if (GUILayout.Button("X", GUILayout.Width(s_widthUpDownButton), GUILayout.ExpandWidth(true)))
                {
                    processorList.DestroyProcessor(processor);
                    break;
                }

                GUI.backgroundColor = s_colorBackgroundGUIPrimary;

                GUILayout.EndHorizontal();

                processor.OnGUI();
                GUILayout.Space(10.0f);
            }

            if (itemToMoveBack)
            {
                processorList.MoveProcessorBack(itemToMoveBack);
                itemToMoveBack = null;
            }

            if (itemToMoveForward)
            {
                processorList.MoveProcessorForward(itemToMoveForward);
                itemToMoveForward = null;
            }

            GUILayout.Space(s_verticalSpaceEnd);
        }

        // Restore previous gui style
        GUI.backgroundColor = previousBGColor;
        GUI.contentColor    = previousFGColor;

        EditorGUI.EndProperty();
    }