Пример #1
0
    protected override void OnAlloyShaderGUI()
    {
        var args = new AlloyFieldDrawerArgs()
        {
            Editor         = this,
            Materials      = Targets.Cast <Material>().ToArray(),
            PropertiesSkip = new List <string>(),
            MatInst        = MatInst,
            TabGroup       = TabGroup,
            AllTabNames    = m_allTabs,
            OpenCloseAnim  = m_openCloseAnim
        };

        foreach (var animBool in m_openCloseAnim)
        {
            if (animBool.Value.isAnimating)
            {
                MatEditor.Repaint();
            }
        }

        foreach (var kv in m_propInfo)
        {
            var drawer = kv.Value;

            if (drawer != null && drawer.ShouldDraw(args))
            {
                drawer.Draw(args);
            }
        }

        if (!string.IsNullOrEmpty(args.CurrentTab))
        {
            EditorGUILayout.EndFadeGroup();
        }

        GUILayout.Space(10.0f);
        AlloyEditor.DrawAddTabGUI(args.TabsToAdd);
    }
    public override void OnInspectorGUI()
    {
        serializedObject.Update();
        m_tabAdd.Clear();

        var skinEnabled = serializedObject.FindProperty("SkinSettings.Enabled");

        if (skinEnabled.boolValue && !skinEnabled.hasMultipleDifferentValues)
        {
            bool removed;
            m_skinGroup.target = m_tabGroup.TabArea("Skin Scattering", s_scatterColor, true, out removed,
                                                    c_skinTabName);

            if (EditorGUILayout.BeginFadeGroup(m_skinGroup.faded))
            {
                var prop = serializedObject.FindProperty("SkinSettings");
                prop.Next(true); //skip flag
                prop.Next(true); //skip enabled

                DrawRemainingProp(prop);
            }

            EditorGUILayout.EndFadeGroup();

            if (removed)
            {
                skinEnabled.boolValue = false;
            }
        }
        else
        {
            m_tabAdd.Add(new AlloyTabAdd {
                Color  = s_scatterColor,
                Name   = "Skin Scattering",
                Enable = EnableSkin
            });
        }

        var transEnabled = serializedObject.FindProperty("TransmissionSettings.Enabled");

        if (transEnabled.boolValue && !transEnabled.hasMultipleDifferentValues)
        {
            bool removed;
            m_transmissionGroup.target = m_tabGroup.TabArea("Transmission", s_transmissionColor, true, out removed,
                                                            c_transmissionTabName);

            if (EditorGUILayout.BeginFadeGroup(m_transmissionGroup.faded))
            {
                var prop = serializedObject.FindProperty("TransmissionSettings");
                prop.Next(true); //skip flag
                prop.Next(true); //skip enabled
                DrawRemainingProp(prop);
            }

            EditorGUILayout.EndFadeGroup();

            if (removed)
            {
                transEnabled.boolValue = false;
            }
        }
        else
        {
            m_tabAdd.Add(new AlloyTabAdd {
                Color  = s_transmissionColor,
                Name   = "Transmission",
                Enable = EnableTransmission
            });
        }

        if (m_skinGroup.isAnimating || m_transmissionGroup.isAnimating)
        {
            Repaint();
        }

        AlloyEditor.DrawAddTabGUI(m_tabAdd);
        serializedObject.ApplyModifiedProperties();

        if (GUI.changed)
        {
            var deferredRendererPlus = serializedObject.targetObject as AlloyDeferredRendererPlus;

            if (deferredRendererPlus != null)
            {
                deferredRendererPlus.Refresh();
            }
        }
    }
Пример #3
0
    protected override void OnAlloyShaderGUI(MaterialProperty[] properties)
    {
        //Refresh drawer structure if needed
        bool structuralChange = false;

        if (m_fieldDrawers == null || m_fieldDrawers.Length != properties.Length)
        {
            m_fieldDrawers   = new AlloyFieldDrawer[properties.Length];
            structuralChange = true;
        }

        //Rebuild name -> prop cache
        m_stringToProperty.Clear();
        for (int i = 0; i < properties.Length; ++i)
        {
            string propName = properties[i].name;
            m_stringToProperty.Add(propName, properties[i]);
        }

        for (int i = 0; i < properties.Length; ++i)
        {
            string propName = properties[i].name;

            if (m_fieldDrawers[i] == null && !s_knownNulls.Contains(propName) || m_fieldDrawers[i] != null && m_fieldDrawers[i].Property.name != propName)
            {
                m_fieldDrawers[i] = AlloyFieldDrawerFactory.GetFieldDrawer(this, properties[i]);

                if (m_fieldDrawers[i] == null)
                {
                    s_knownNulls.Add(propName);
                }
                else
                {
                    structuralChange = true;
                }
            }
        }

        //If changed, update the animation stuff
        if (structuralChange)
        {
            m_openCloseAnim.Clear();
            var allTabs = new List <string>();

            for (var i = 0; i < m_fieldDrawers.Length; i++)
            {
                var drawer = m_fieldDrawers[i];

                if (!(drawer is AlloyTabDrawer))
                {
                    continue;
                }

                bool isOpenCur = TabGroup.IsOpen(drawer.DisplayName + MatInst);

                var anim = new AnimBool(isOpenCur)
                {
                    speed = 6.0f, value = isOpenCur
                };
                m_openCloseAnim.Add(properties[i].name, anim);
                allTabs.Add(drawer.DisplayName);
            }

            m_allTabs = allTabs.ToArray();
        }


        //Formulate arguments to pass to drawing
        var args = new AlloyFieldDrawerArgs {
            Editor         = this,
            Materials      = Targets.Cast <Material>().ToArray(),
            PropertiesSkip = new List <string>(),
            MatInst        = MatInst,
            TabGroup       = TabGroup,
            AllTabNames    = m_allTabs,
            OpenCloseAnim  = m_openCloseAnim
        };

        for (var i = 0; i < m_fieldDrawers.Length; i++)
        {
            var drawer = m_fieldDrawers[i];

            if (drawer == null)
            {
                continue;
            }

            drawer.Index    = i;
            drawer.Property = properties[i];

            if (drawer.ShouldDraw(args))
            {
                drawer.Draw(args);
            }
        }

        if (!string.IsNullOrEmpty(args.CurrentTab))
        {
            EditorGUILayout.EndFadeGroup();
        }

        GUILayout.Space(10.0f);

        AlloyEditor.DrawAddTabGUI(args.TabsToAdd);

        //If animating -> Repaint
        foreach (var animBool in m_openCloseAnim)
        {
            if (animBool.Value.isAnimating)
            {
                MatEditor.Repaint();
                break;
            }
        }
    }