Beispiel #1
0
        public override void Enable(bool fromInspector)
        {
            base.Enable(fromInspector);

            if (shaderNode.material != null && !owner.graph.IsObjectInGraph(shaderNode.material))
            {
                // Check if the material we have is ours
                if (owner.graph.IsExternalSubAsset(shaderNode.material))
                {
                    shaderNode.material           = new Material(shaderNode.material);
                    shaderNode.material.hideFlags = HideFlags.HideInHierarchy | HideFlags.HideInInspector;
                }
                owner.graph.AddObjectToGraph(shaderNode.material);
            }

            shaderSettings = new VisualElement();
            var shaderField = AddControlField(nameof(ShaderNode.shader)) as ObjectField;

            shaderSettings.Add(shaderField);

            var shaderCreationUI = new VisualElement();

            shaderSettings.Add(shaderCreationUI);
            UpdateShaderCreationUI(shaderCreationUI, shaderField);

            shaderField.RegisterValueChangedCallback((v) => {
                SetShader((Shader)v.newValue, shaderCreationUI, shaderField);
            });

            if (!fromInspector)
            {
                if (shaderNode.shader != null)
                {
                    shaderPath = AssetDatabase.GetAssetPath(shaderNode.shader);
                }
                if (!String.IsNullOrEmpty(shaderPath))
                {
                    lastModified = File.GetLastWriteTime(shaderPath);
                }

                var lastWriteDetector = schedule.Execute(DetectShaderChanges);
                lastWriteDetector.Every(200);
                InitializeDebug();

                onPortDisconnected += ResetMaterialPropertyToDefault;
            }

            var materialIMGUI = new IMGUIContainer(() => MaterialGUI(fromInspector, shaderCreationUI, shaderField));

            shaderSettings.Add(materialIMGUI);
            materialIMGUI.AddToClassList("MaterialInspector");

            controlsContainer.Add(shaderSettings);
            MixtureEditorUtils.ScheduleAutoHide(materialIMGUI, owner);
        }
Beispiel #2
0
        public override void Enable(bool fromInspector)
        {
            base.Enable(fromInspector);

            if (!fromInspector)
            {
                if (fixedShaderNode.material != null && !owner.graph.IsObjectInGraph(fixedShaderNode.material))
                {
                    if (owner.graph.IsExternalSubAsset(fixedShaderNode.material))
                    {
                        fixedShaderNode.material           = new Material(fixedShaderNode.material);
                        fixedShaderNode.material.hideFlags = HideFlags.HideInHierarchy | HideFlags.HideInInspector;
                    }
                    if (fixedShaderNode.material.shader.name != ShaderNode.DefaultShaderName)
                    {
                        owner.graph.AddObjectToGraph(fixedShaderNode.material);
                    }
                }

                if (fixedShaderNode.shader != null)
                {
                    lastModified = File.GetLastWriteTime(AssetDatabase.GetAssetPath(fixedShaderNode.shader));
                }
                var lastWriteDetector = schedule.Execute(DetectShaderChanges);
                lastWriteDetector.Every(200);

                InitializeDebug();

                onPortDisconnected += ResetMaterialPropertyToDefault;
            }

            if (fixedShaderNode.displayMaterialInspector)
            {
                Action <bool> safeMaterialGUI = (bool init) => {
                    // Copy fromInspector to avoid having the same value (lambda capture fromInspector pointer)
                    bool f = fromInspector;
                    if (!init)
                    {
                        MaterialGUI(f);
                    }
                };
                safeMaterialGUI(true);
                var materialIMGUI = new IMGUIContainer(() => safeMaterialGUI(false));

                materialIMGUI.AddToClassList("MaterialInspector");

                MixtureEditorUtils.ScheduleAutoHide(materialIMGUI, owner);

                controlsContainer.Add(materialIMGUI);
            }
        }