Example #1
0
        // ReSharper disable once UnusedMember.Local

        public void RefreshPostProcessVolume()
        {
#if UNITY_POST_PROCESSING_STACK_V2
            PostProcessProfileInfo postProcessProfileInfo =
                VegetationStudioManager.GetPostProcessProfileInfo(BiomeType);
            RefreshPostProcessVolume(postProcessProfileInfo, VegetationStudioManager.GetPostProcessingLayer());
#endif
        }
Example #2
0
        public void RefreshPostProcessVolume(PostProcessProfileInfo postProcessProfileInfo, LayerMask postProcessLayer)
        {
            gameObject.layer = postProcessLayer;

            if (postProcessProfileInfo == null)
            {
                PostProcessVolume postProcessVolume = gameObject.GetComponent <PostProcessVolume>();
                if (postProcessVolume)
                {
                    DestroyImmediate(postProcessVolume);
                }

                MeshCollider meshCollider = gameObject.GetComponent <MeshCollider>();
                if (meshCollider)
                {
                    DestroyImmediate(meshCollider);
                }
            }
            else
            {
                PostProcessVolume postProcessVolume = gameObject.GetComponent <PostProcessVolume>();
                if (!postProcessVolume)
                {
                    postProcessVolume = gameObject.AddComponent <PostProcessVolume>();
                }

                postProcessVolume.blendDistance = postProcessProfileInfo.BlendDistance;
                postProcessVolume.priority      = postProcessProfileInfo.Priority;
                postProcessVolume.weight        = postProcessProfileInfo.Weight;
                postProcessVolume.profile       = postProcessProfileInfo.PostProcessProfile;
                postProcessVolume.enabled       = postProcessProfileInfo.Enabled;

                MeshCollider meshCollider = gameObject.GetComponent <MeshCollider>();
                if (!meshCollider)
                {
                    meshCollider = gameObject.AddComponent <MeshCollider>();
                }

                meshCollider.convex    = true;
                meshCollider.enabled   = postProcessProfileInfo.Enabled;
                meshCollider.isTrigger = true;

                Vector3[] polygonPoints = new Vector3[Nodes.Count];
                for (int i = 0; i <= Nodes.Count - 1; i++)
                {
                    polygonPoints[i] = Nodes[i].Position;
                }
                meshCollider.sharedMesh = MeshUtils.ExtrudeMeshFromPolygon(polygonPoints, postProcessProfileInfo.VolumeHeight);
            }
        }
        private void DrawPostProcessInspector()
        {
#if UNITY_POST_PROCESSING_STACK_V2
            GUILayout.BeginVertical("box");
            EditorGUILayout.LabelField("Add profiles", LabelStyle);

            EditorGUI.BeginChangeCheck();
            PostProcessProfile newPostProcessProfile = (PostProcessProfile)EditorGUILayout.ObjectField("", null, typeof(PostProcessProfile), false);

            if (EditorGUI.EndChangeCheck())
            {
                _vegetationStudioManager.AddPostProcessProfile(newPostProcessProfile);
                SetSceneDirty();
            }
            EditorGUILayout.HelpBox("Add post processing profiles here to set up PostProcessVolumes for the biomes", MessageType.Info);
            GUILayout.EndVertical();

            GUILayout.BeginVertical("box");

            EditorGUI.BeginChangeCheck();
            _vegetationStudioManager.PostProcessingLayer = EditorGUILayout.LayerField("Post process layer", _vegetationStudioManager.PostProcessingLayer);
            if (EditorGUI.EndChangeCheck())
            {
                _vegetationStudioManager.RefreshPostProcessVolumes();
                SetSceneDirty();
                GUILayout.EndVertical();
                return;
            }

            GUILayout.EndVertical();

            for (int i = 0; i <= _vegetationStudioManager.PostProcessProfileInfoList.Count - 1; i++)
            {
                GUILayout.BeginVertical("box");

                if (GUILayout.Button("Remove profile", GUILayout.Width(120)))
                {
                    _vegetationStudioManager.RemovePostProcessProfile(i);
                    SetSceneDirty();
                    GUILayout.EndVertical();
                    return;
                }

                EditorGUI.BeginChangeCheck();

                PostProcessProfileInfo postProcessProfileInfo = _vegetationStudioManager.PostProcessProfileInfoList[i];
                postProcessProfileInfo.Enabled   = EditorGUILayout.Toggle("Enabled", postProcessProfileInfo.Enabled);
                postProcessProfileInfo.BiomeType =
                    (BiomeType)EditorGUILayout.EnumPopup("Biome Type", postProcessProfileInfo.BiomeType);
                postProcessProfileInfo.VolumeHeight =
                    EditorGUILayout.FloatField("Volume height", postProcessProfileInfo.VolumeHeight);
                postProcessProfileInfo.Priority =
                    EditorGUILayout.FloatField("Priority", postProcessProfileInfo.Priority);
                postProcessProfileInfo.BlendDistance =
                    EditorGUILayout.Slider("Blend distance", postProcessProfileInfo.BlendDistance, -0.1f, 4f);
                postProcessProfileInfo.Weight =
                    EditorGUILayout.Slider("Weight", postProcessProfileInfo.Weight, 0f, 1f);
                postProcessProfileInfo.PostProcessProfile = (PostProcessProfile)EditorGUILayout.ObjectField("Profile", postProcessProfileInfo.PostProcessProfile, typeof(PostProcessProfile), false);

                if (EditorGUI.EndChangeCheck())
                {
                    _vegetationStudioManager.RefreshPostProcessVolumes();
                    SetSceneDirty();
                    GUILayout.EndVertical();
                    return;
                }
                GUILayout.EndVertical();
            }
#else
            EditorGUILayout.HelpBox("Install the Unity Post processing stack to enable.", MessageType.Info);
#endif
        }