Example #1
0
        public static void ConvertParticleToBender(MenuCommand cmd)
        {
            ParticleSystem ps = (ParticleSystem)cmd.context;

            if (!ps.gameObject.GetComponent <GrassBender>())
            {
                GrassBender bender = ps.gameObject.AddComponent <GrassBender>();

                bender.benderType     = GrassBenderBase.BenderType.ParticleSystem;
                bender.particleSystem = ps.GetComponent <ParticleSystem>();

                GrassBenderBase.ValidateParticleSystem(bender);
            }
        }
        public override void OnInspectorGUI()
        {
            if (StylizedGrassRenderer.Instance == null)
            {
                EditorGUILayout.HelpBox("No Stylized Grass Renderer is active in the scene", MessageType.Warning);
            }

            serializedObject.Update();

            EditorGUI.BeginChangeCheck();

            EditorGUILayout.PropertyField(benderType);

            if (benderType.intValue == (int)GrassBenderBase.BenderType.Mesh)
            {
                using (new EditorGUILayout.HorizontalScope())
                {
                    EditorGUILayout.PropertyField(meshRenderer);

                    using (new EditorGUI.DisabledGroupScope(bender.meshRenderer ? bender.meshRenderer.gameObject == bender.gameObject : false))
                    {
                        if (GUILayout.Button("This", EditorStyles.miniButton, GUILayout.MaxWidth(75f)))
                        {
                            MeshRenderer meshRend = bender.GetComponent <MeshRenderer>();
                            if (meshRend)
                            {
                                meshRenderer.objectReferenceValue = meshRend;
                            }
                            MeshFilter mf = bender.GetComponent <MeshFilter>();
                            if (mf)
                            {
                                bender.meshFilter = mf;
                            }
                        }
                    }
                }

                EditorGUILayout.Space();

                StylizedGrassGUI.ParameterGroup.DrawHeader(new GUIContent("Mesh"));
                using (new EditorGUILayout.VerticalScope(StylizedGrassGUI.ParameterGroup.Section))
                {
                    EditorGUILayout.PropertyField(alphaBlending);
                    EditorGUILayout.PropertyField(scaleMultiplier);
                }
            }

            if (benderType.intValue == (int)GrassBenderBase.BenderType.Trail)
            {
                using (new EditorGUILayout.HorizontalScope())
                {
                    EditorGUILayout.PropertyField(trailRenderer);

                    using (new EditorGUI.DisabledGroupScope(bender.trailRenderer ? bender.trailRenderer.gameObject == bender.gameObject : false))
                    {
                        if (GUILayout.Button("This", EditorStyles.miniButton, GUILayout.MaxWidth(75f)))
                        {
                            TrailRenderer trailRend = bender.GetComponent <TrailRenderer>();
                            if (trailRend)
                            {
                                trailRenderer.objectReferenceValue = trailRend;
                            }
                        }
                    }
                }

                EditorGUILayout.Space();

                StylizedGrassGUI.ParameterGroup.DrawHeader(new GUIContent("Trail"));
                using (new EditorGUILayout.VerticalScope(StylizedGrassGUI.ParameterGroup.Section))
                {
                    EditorGUILayout.PropertyField(trailLifetime);
                    EditorGUILayout.PropertyField(trailRadius);

                    EditorGUI.BeginChangeCheck();
                    EditorGUILayout.PropertyField(strengthOverLifetime);
                    if (EditorGUI.EndChangeCheck())
                    {
                        bender.strengthGradient = GrassBenderBase.GetGradient(bender.strengthOverLifetime);
                    }
                    EditorGUILayout.PropertyField(widthOverLifetime);
                }
            }

            if (benderType.intValue == (int)GrassBenderBase.BenderType.ParticleSystem)
            {
                GrassBenderBase.ValidateParticleSystem(bender);

                using (new EditorGUILayout.HorizontalScope())
                {
                    EditorGUILayout.PropertyField(particleSystem);

                    using (new EditorGUI.DisabledGroupScope(bender.particleSystem ? bender.particleSystem.gameObject == bender.gameObject : false))
                    {
                        if (GUILayout.Button("This", EditorStyles.miniButton, GUILayout.MaxWidth(75f)))
                        {
                            ParticleSystem ps = bender.GetComponent <ParticleSystem>();
                            if (ps)
                            {
                                particleSystem.objectReferenceValue = ps;
                            }
                        }
                    }
                }

                EditorGUILayout.Space();

                StylizedGrassGUI.ParameterGroup.DrawHeader(new GUIContent("Particle System"));
                using (new EditorGUILayout.VerticalScope(StylizedGrassGUI.ParameterGroup.Section))
                {
                    EditorGUILayout.PropertyField(alphaBlending);
                    EditorGUI.BeginChangeCheck();
                    EditorGUILayout.PropertyField(strengthOverLifetime);
                    if (EditorGUI.EndChangeCheck())
                    {
                        bender.strengthGradient = GrassBenderBase.GetGradient(bender.strengthOverLifetime);
                    }
                }
            }

            EditorGUILayout.Space();

            StylizedGrassGUI.ParameterGroup.DrawHeader(new GUIContent("Settings"));
            using (new EditorGUILayout.VerticalScope(StylizedGrassGUI.ParameterGroup.Section))
            {
                using (new EditorGUILayout.HorizontalScope())
                {
                    EditorGUILayout.PrefixLabel(new GUIContent("Sorting layer", "Higher sorting layers are drawn on top of lower layers. Use this to control which benders draw over others"));
                    EditorGUI.BeginChangeCheck();
                    m_layer = GUILayout.Toolbar(m_layer, new string[] { "0", "1", "2", "3" }, GUILayout.Height(20f));
                    if (EditorGUI.EndChangeCheck())
                    {
                        bender.SwitchLayer(m_layer);
                    }
                    m_layer = bender.sortingLayer;
                }
                EditorGUILayout.PropertyField(heightOffset);
                EditorGUILayout.PropertyField(strength);
                EditorGUILayout.PropertyField(pushStrength);
            }

            if (EditorGUI.EndChangeCheck())
            {
                if (benderType.intValue != m_benderType)
                {
                    bender.SwitchBenderType((GrassBenderBase.BenderType)benderType.intValue);
                }
                m_benderType = benderType.intValue;

                //bender.UpdateTrail();
                //bender.UpdateMesh();

                serializedObject.ApplyModifiedProperties();
            }

            //base.OnInspectorGUI();
        }