コード例 #1
0
        private static void DrawGeneralGroup(TerrainGenerator instance, ref bool isChanged)
        {
            instance.inspector.isGeneralGroupExpanded = EditorCommon.GroupFoldout(instance.inspector.isGeneralGroupExpanded, "General");
            if (instance.inspector.isGeneralGroupExpanded)
            {
                EditorGUI.indentLevel += 1;

                EditorGUI.BeginChangeCheck();
                GUI.enabled = false;
                EditorGUILayout.ObjectField("Script", MonoScript.FromMonoBehaviour(instance), typeof(MonoScript), false);
                GUI.enabled = true;
                instance.MeshFilterComponent = EditorGUILayout.ObjectField(
                    "Mesh Filter",
                    instance.MeshFilterComponent,
                    typeof(MeshFilter), true) as MeshFilter;
                instance.MeshRendererComponent = EditorGUILayout.ObjectField(
                    "Mesh Renderer",
                    instance.MeshRendererComponent,
                    typeof(MeshRenderer), true) as MeshRenderer;
                instance.MeshColliderComponent = EditorGUILayout.ObjectField(
                    "Collider",
                    instance.MeshColliderComponent,
                    typeof(MeshCollider), true) as MeshCollider;
                instance.UpdateImmediately = EditorGUILayout.Toggle("Update Immediately", instance.UpdateImmediately);
                instance.ShowFullHierarchy = EditorGUILayout.Toggle("Show Full Hierarchy", instance.ShowFullHierarchy);
                isChanged = isChanged || EditorGUI.EndChangeCheck();

                EditorGUI.indentLevel -= 1;
            }
            EditorGUILayout.GetControlRect(GUILayout.Height(1));
        }
コード例 #2
0
        private static void DrawGeometryBrushSettingsGroup(TerrainGenerator instance)
        {
            instance.inspector.isGeometryBrushSettingsGroupExpanded = EditorCommon.GroupFoldout(instance.inspector.isGeometryBrushSettingsGroupExpanded, "Brush");

            if (instance.inspector.isGeometryBrushSettingsGroupExpanded)
            {
                EditorGUI.indentLevel += 1;

                GeometryPainter.ToolsSettings settings = instance.GeometryPainter.Settings;
                EditorGUI.BeginChangeCheck();
                settings.brushMode = (GeometryPainter.BrushMode)EditorGUILayout.EnumPopup("Mode", settings.brushMode);
                if (EditorGUI.EndChangeCheck())
                {
                    instance.GeometryPainter.UpdateHandle();
                }
                settings.brushRadius = EditorGUILayout.FloatField("Radius", settings.brushRadius);
                settings.strength    = EditorGUILayout.FloatField("Strength", settings.strength);
                settings.Validate();

                if (EditorCommon.RightAnchoredButton("Erase All"))
                {
                    ConfirmAndResetElevations(instance);
                }

                EditorGUI.indentLevel -= 1;
            }

            EditorGUILayout.GetControlRect(GUILayout.Height(1));
        }
コード例 #3
0
        private static void DrawBrushSettingsGroup(TerrainGenerator instance)
        {
            instance.inspector.isColorBrushSettingsGroupExpanded = EditorCommon.GroupFoldout(instance.inspector.isColorBrushSettingsGroupExpanded, "Brush");
            if (instance.inspector.isColorBrushSettingsGroupExpanded)
            {
                EditorGUI.indentLevel += 1;

                ColorPainter.ToolsSettings settings = instance.ColorPainterSettings;
                settings.brushSettings.brushRadius = EditorGUILayout.FloatField("Radius", settings.brushSettings.brushRadius);
                settings.brushSettings.strength    = EditorGUILayout.Slider("Strength", settings.brushSettings.strength, 0f, 1f);
                settings.brushSettings.color       = EditorGUILayout.ColorField("Color", settings.brushSettings.color);

                EditorGUILayout.BeginHorizontal();
                GUILayout.FlexibleSpace();
                if (EditorCommon.Button("Add to Palette"))
                {
                    AddBrushToColorPaletteWindow.Show(instance.ColorPainter);
                }
                if (EditorCommon.Button("Erase All"))
                {
                    ConfirmAndEraseAll(instance);
                }
                EditorGUILayout.EndHorizontal();

                EditorGUI.indentLevel -= 1;
            }
            EditorGUILayout.GetControlRect(GUILayout.Height(1));
        }
コード例 #4
0
        private static void DrawCombinationsGroup(TerrainGenerator instance)
        {
            instance.inspector.isCombinationsGroupExpanded = EditorCommon.GroupFoldout(instance.inspector.isCombinationsGroupExpanded, "Combinations");
            instance.EnvironmentalPainterSettings.drawCombinationsBounds = instance.inspector.isCombinationsGroupExpanded;
            if (instance.inspector.isCombinationsGroupExpanded)
            {
                EditorGUI.indentLevel += 1;

                List <GameObject> prefabs           = instance.EnvironmentalPainterSettings.GetPrefabs();
                List <Transform>  combinationGroups = GetAllCombinationGroups(instance);
                bool hasNonEmptyGroup = combinationGroups.Find(t => t.childCount != 0) != null;
                if (!hasNonEmptyGroup)
                {
                    EditorGUILayout.HelpBox("No combination created yet!", MessageType.None);
                }
                else
                {
                    Vector2 tileSize = new Vector2(50, 50);
                    for (int i = 0; i < combinationGroups.Count; ++i)
                    {
                        if (combinationGroups[i].childCount == 0)
                        {
                            continue;
                        }
                        EditorGUILayout.BeginHorizontal();
                        Rect    tileRect = EditorGUILayout.GetControlRect(GUILayout.Width(tileSize.x), GUILayout.Height(tileSize.y));
                        Texture t        = AssetPreview.GetAssetPreview(prefabs[i]);
                        if (AssetPreview.IsLoadingAssetPreview(prefabs[i].GetInstanceID()))
                        {
                            int dotCount = System.DateTime.Now.Millisecond / 300;
                            GUI.Label(tileRect, EditorCommon.DOT_ANIM[dotCount], EditorCommon.CenteredLabel);
                        }
                        else if (t == null)
                        {
                            string assetPath = AssetDatabase.GetAssetPath(prefabs[i]);
                            if (!string.IsNullOrEmpty(assetPath))
                            {
                                AssetDatabase.ImportAsset(assetPath, ImportAssetOptions.ForceSynchronousImport);
                            }
                        }
                        else
                        {
                            EditorGUI.DrawPreviewTexture(tileRect, t);
                        }

                        EditorGUILayout.BeginVertical();
                        EditorGUILayout.LabelField(prefabs[i].name);
                        EditorGUILayout.LabelField("Count: " + combinationGroups[i].childCount, EditorCommon.ItalicLabel);
                        EditorGUILayout.EndVertical();
                        EditorGUILayout.EndHorizontal();
                    }
                }

                EditorGUI.indentLevel -= 1;
            }

            EditorGUILayout.GetControlRect(GUILayout.Height(1));
        }
コード例 #5
0
        private static void DrawLibraryGroup(TerrainGenerator instance, ref int libraryObjectPickerControlId)
        {
            instance.inspector.isLibraryGroupExpanded = EditorCommon.GroupFoldout(instance.inspector.isLibraryGroupExpanded, "Library");
            List <GameObject> prefabs = instance.EnvironmentalPainterSettings.GetPrefabs();

            if (instance.inspector.isLibraryGroupExpanded)
            {
                EditorGUILayout.Space();
                if (prefabs != null && prefabs.Count > 0)
                {
                    float   width      = EditorGUIUtility.currentViewWidth - EditorGUI.indentLevel * EditorGUIUtility.singleLineHeight;
                    Vector2 tileSize   = new Vector2(75, 75);
                    int     itemPerRow = (int)(width / tileSize.x);
                    itemPerRow = Mathf.Clamp(itemPerRow, 1, prefabs.Count);
                    int numberOfRow = Mathf.CeilToInt(prefabs.Count * 1.0f / itemPerRow);
                    for (int i = 0; i < itemPerRow * numberOfRow; ++i)
                    {
                        if (i % itemPerRow == 0)
                        {
                            EditorGUILayout.BeginHorizontal(GUILayout.ExpandWidth(false));
                        }

                        DrawPrefabTile(instance, tileSize, i);

                        if ((i + 1) % itemPerRow == 0)
                        {
                            EditorGUILayout.EndHorizontal();
                            EditorGUILayout.Space();
                        }
                    }
                }
                else
                {
                    EditorGUILayout.HelpBox("Try adding a prefab!", MessageType.None);
                }

                EditorGUILayout.BeginHorizontal();
                GUILayout.FlexibleSpace();
                if (GUILayout.Button("Add", GUILayout.Width(EditorCommon.standardWidth), GUILayout.Height(EditorCommon.standardHeight)))
                {
                    HandleAddPrefabButtonClicked(ref libraryObjectPickerControlId);
                }
                GUI.enabled = prefabs != null && prefabs.Count > 0;
                if (GUILayout.Button("Remove", GUILayout.Width(EditorCommon.standardWidth), GUILayout.Height(EditorCommon.standardHeight)))
                {
                    HandleRemovePrefabButtonClicked(instance);
                }
                GUI.enabled = true;
                if (GUILayout.Button("Reset", GUILayout.Width(EditorCommon.standardWidth), GUILayout.Height(EditorCommon.standardHeight)))
                {
                    HandleResetButtonClicked(instance);
                }
                EditorGUILayout.EndHorizontal();
            }

            EditorGUILayout.GetControlRect(GUILayout.Height(1));
        }
コード例 #6
0
        private void DrawHandlesColorGroup()
        {
            instance.inspector.isHandlesColorGroupExpanded = EditorCommon.GroupFoldout(instance.inspector.isHandlesColorGroupExpanded, "Colors");

            if (instance.inspector.isHandlesColorGroupExpanded)
            {
                EditorGUI.indentLevel += 1;



                EditorGUI.indentLevel -= 1;
            }

            EditorGUILayout.GetControlRect(GUILayout.Height(1));
        }
コード例 #7
0
        private void DrawDebuggingGroup()
        {
            instance.inspector.isDebuggingGroupExpanded = EditorCommon.GroupFoldout(instance.inspector.isDebuggingGroupExpanded, "Debugging");

            if (instance.inspector.isDebuggingGroupExpanded)
            {
                EditorGUI.indentLevel += 1;

                instance.EnvironmentalPainterSettings.drawCombinationsBounds = EditorGUILayout.Toggle("Draw Combinations Bounds", instance.EnvironmentalPainterSettings.drawCombinationsBounds);

                EditorGUI.indentLevel -= 1;
            }

            EditorGUILayout.GetControlRect(GUILayout.Height(1));
        }
コード例 #8
0
        private static void DrawDeformationGroup(TerrainGenerator instance, ref bool isChanged)
        {
            instance.inspector.isDeformationGroupExpanded = EditorCommon.GroupFoldout(instance.inspector.isDeformationGroupExpanded, "Deformation");

            if (instance.inspector.isDeformationGroupExpanded)
            {
                EditorGUI.indentLevel += 1;

                EditorGUI.BeginChangeCheck();
                instance.UseVertexWarping = EditorGUILayout.Toggle("Enable", instance.UseVertexWarping);
                instance.WarpingTemplate  = (VertexWarper.Template)EditorGUILayout.EnumPopup("Template", instance.WarpingTemplate);
                isChanged = isChanged || EditorGUI.EndChangeCheck();

                EditorGUI.indentLevel -= 1;
            }

            EditorGUILayout.GetControlRect(GUILayout.Height(1));
        }
コード例 #9
0
        private static void DrawGroundThicknessGroup(TerrainGenerator instance, ref bool isChanged)
        {
            instance.inspector.isGroundThicknessGroupExpanded = EditorCommon.GroupFoldout(instance.inspector.isGroundThicknessGroupExpanded, "Ground Thickness");
            if (instance.inspector.isGroundThicknessGroupExpanded)
            {
                EditorGUI.indentLevel += 1;

                EditorGUI.BeginChangeCheck();
                instance.GroundThickness              = EditorGUILayout.Slider("Thickness", instance.GroundThickness, 0f, instance.BaseHeight);
                instance.GroundThicnknessVariation    = EditorGUILayout.Slider("Variation", instance.GroundThicnknessVariation, 0f, 1f);
                instance.GroundThicknessVariationSeed = EditorGUILayout.FloatField("Seed", instance.GroundThicknessVariationSeed);
                instance.GroundThicknessNoiseStep     = EditorGUILayout.FloatField("Noise Step", instance.GroundThicknessNoiseStep);
                isChanged = isChanged || EditorGUI.EndChangeCheck();

                EditorGUI.indentLevel -= 1;
            }
            EditorGUILayout.GetControlRect(GUILayout.Height(1));
        }
コード例 #10
0
        private static void DrawSurfaceGroup(TerrainGenerator instance, ref bool isChanged)
        {
            instance.inspector.isSurfaceGroupExpanded = EditorCommon.GroupFoldout(instance.inspector.isSurfaceGroupExpanded, "Surface");
            if (instance.inspector.isSurfaceGroupExpanded)
            {
                EditorGUI.indentLevel += 1;

                EditorGUI.BeginChangeCheck();
                instance.TilingMode       = (TerrainGenerator.SurfaceTilingMode)EditorGUILayout.EnumPopup("Tiling", instance.TilingMode);
                instance.SurfaceMaxHeight = EditorGUILayout.FloatField("Max Height", instance.SurfaceMaxHeight);
                instance.Roughness        = EditorGUILayout.FloatField("Roughness", instance.Roughness);
                instance.RoughnessSeed    = EditorGUILayout.FloatField("Seed", instance.RoughnessSeed);
                isChanged = isChanged || EditorGUI.EndChangeCheck();

                EditorGUI.indentLevel -= 1;
            }
            EditorGUILayout.GetControlRect(GUILayout.Height(1));
        }
コード例 #11
0
        private static void DrawRenderingGroup(TerrainGenerator instance, ref bool isChanged)
        {
            instance.inspector.isRenderingGroupExpanded = EditorCommon.GroupFoldout(instance.inspector.isRenderingGroupExpanded, "Rendering");
            if (instance.inspector.isRenderingGroupExpanded)
            {
                EditorGUI.indentLevel += 1;

                EditorGUI.BeginChangeCheck();

                instance.MaterialType = (TerrainGenerator.MaterialTypes)EditorGUILayout.EnumPopup("Material Type", instance.MaterialType);
                if (instance.MaterialType == TerrainGenerator.MaterialTypes.Custom)
                {
                    instance.CustomMaterial = EditorGUILayout.ObjectField("Material", instance.CustomMaterial, typeof(Material), false) as Material;
                }

                SerializedObject serializedObject = new SerializedObject(instance);

                SerializedProperty colorByHeightProps = serializedObject.FindProperty("colorByHeight");
                EditorGUILayout.PropertyField(colorByHeightProps, new GUIContent("Color By Height"), false);

                SerializedProperty colorByNormalProps = serializedObject.FindProperty("colorByNormal");
                EditorGUILayout.PropertyField(colorByNormalProps, new GUIContent("Color By Normal"), false);

                SerializedProperty colorBlendProps = serializedObject.FindProperty("colorBlendFraction");
                EditorGUILayout.PropertyField(colorBlendProps, new GUIContent("Color Blend Fraction (A)"), false);

                SerializedProperty undergoundColorProps = serializedObject.FindProperty("undergroundColor");
                EditorGUILayout.PropertyField(undergoundColorProps, new GUIContent("Underground Color"), false);

                serializedObject.ApplyModifiedProperties();

                instance.UseFlatShading                = EditorGUILayout.Toggle("Flat Shading", instance.UseFlatShading);
                instance.UseVertexColor                = EditorGUILayout.Toggle("Vertex Color", instance.UseVertexColor);
                GUI.enabled                            = instance.UseFlatShading && instance.UseVertexColor;
                instance.UseSolidFaceColor             = EditorGUILayout.Toggle("Solid Face Color", instance.UseSolidFaceColor);
                GUI.enabled                            = instance.HeightMap != null;
                instance.ShouldReduceSurfaceColorNoise = EditorGUILayout.Toggle("Reduce Surface Noise", instance.ShouldReduceSurfaceColorNoise);
                GUI.enabled                            = true;
                isChanged = isChanged || EditorGUI.EndChangeCheck();

                EditorGUI.indentLevel -= 1;
            }
            EditorGUILayout.GetControlRect(GUILayout.Height(1));
        }
コード例 #12
0
        private static void DrawUtilitiesGroup(TerrainGenerator instance, ref bool isChanged)
        {
            instance.inspector.isUtilitiesGroupExpanded = EditorCommon.GroupFoldout(instance.inspector.isUtilitiesGroupExpanded, "Utilities");

            if (instance.inspector.isUtilitiesGroupExpanded)
            {
                EditorGUI.indentLevel += 1;

                EditorGUI.BeginChangeCheck();
                instance.ShouldRecalculateBounds   = EditorGUILayout.Toggle("Recalculate Bounds", instance.ShouldRecalculateBounds);
                instance.ShouldRecalculateNormals  = EditorGUILayout.Toggle("Recalculate Normals", instance.ShouldRecalculateNormals);
                instance.ShouldRecalculateTangents = EditorGUILayout.Toggle("Recalculate Tangents", instance.ShouldRecalculateTangents);
                instance.ShouldUnwrapUv            = EditorGUILayout.Toggle("Unwrap UV", instance.ShouldUnwrapUv);
                isChanged = isChanged || EditorGUI.EndChangeCheck();

                EditorGUI.indentLevel -= 1;
            }
            instance.ShowVertexWarperSceneGUI = instance.inspector.isDeformationGroupExpanded;

            EditorGUILayout.GetControlRect(GUILayout.Height(1));
        }
コード例 #13
0
        private static void DrawDataGroup(TerrainGenerator instance)
        {
            instance.inspector.isDataGroupExpanded = EditorCommon.GroupFoldout(instance.inspector.isDataGroupExpanded, "Data");

            if (instance.inspector.isDataGroupExpanded)
            {
                EditorGUI.indentLevel += 1;
                EditorGUILayout.GetControlRect(GUILayout.Height(2));
                EditorGUILayout.BeginHorizontal();
                EditorGUILayout.GetControlRect(GUILayout.Width(EditorGUIUtility.singleLineHeight));
                Rect buttonGroupRect  = EditorGUILayout.GetControlRect(GUILayout.Height(EditorCommon.standardHeight));
                Rect exportButtonRect = new Rect(
                    buttonGroupRect.min.x,
                    buttonGroupRect.min.y,
                    buttonGroupRect.width * 0.5f,
                    buttonGroupRect.height);
                if (GUI.Button(exportButtonRect, "Export...", EditorStyles.miniButtonLeft))
                {
                    ShowExportDataContextMenu(exportButtonRect, instance);
                }
                Rect importButtonRect = new Rect(
                    buttonGroupRect.center.x,
                    buttonGroupRect.min.y,
                    buttonGroupRect.width * 0.5f,
                    buttonGroupRect.height);
                if (GUI.Button(importButtonRect, "Import...", EditorStyles.miniButtonRight))
                {
                    ShowImportDataContextMenu(importButtonRect, instance);
                }

                EditorGUILayout.EndHorizontal();

                EditorGUI.indentLevel -= 1;
            }
            instance.ShowVertexWarperSceneGUI = instance.inspector.isDeformationGroupExpanded;

            EditorGUILayout.GetControlRect(GUILayout.Height(1));
        }
コード例 #14
0
        private static void DrawPalleteGroup(TerrainGenerator instance)
        {
            List <ColorPainter.BrushSettings> brushes = instance.ColorPainter.Settings.Palette;

            instance.inspector.isPalleteGroupExpanded = EditorCommon.GroupFoldout(instance.inspector.isPalleteGroupExpanded, "Pallete");
            if (instance.inspector.isColorBrushSettingsGroupExpanded)
            {
                EditorGUILayout.Space();
                if (brushes != null && brushes.Count > 0)
                {
                    float   width      = EditorGUIUtility.currentViewWidth - EditorGUI.indentLevel * EditorGUIUtility.singleLineHeight;
                    Vector2 tileSize   = new Vector2(75, 75);
                    int     itemPerRow = (int)(width / tileSize.x);
                    itemPerRow = Mathf.Clamp(itemPerRow, 1, brushes.Count);
                    int numberOfRow = Mathf.CeilToInt(brushes.Count * 1.0f / itemPerRow);
                    for (int i = 0; i < itemPerRow * numberOfRow; ++i)
                    {
                        if (i % itemPerRow == 0)
                        {
                            EditorGUILayout.BeginHorizontal(GUILayout.ExpandWidth(false));
                        }

                        DrawBrushTile(instance, tileSize, i);

                        if ((i + 1) % itemPerRow == 0)
                        {
                            EditorGUILayout.EndHorizontal();
                            EditorGUILayout.Space();
                        }
                    }
                }
                else
                {
                    EditorGUILayout.HelpBox("Try adding a brush!", MessageType.None);
                }
            }
            EditorGUILayout.GetControlRect(GUILayout.Height(1));
        }
コード例 #15
0
        private static void DrawEnvironmentalBrushSettingsGroup(TerrainGenerator instance)
        {
            instance.inspector.isEnvironmentalBrushSettingsGroupExpanded = EditorCommon.GroupFoldout(instance.inspector.isEnvironmentalBrushSettingsGroupExpanded, "Brush");

            if (instance.inspector.isEnvironmentalBrushSettingsGroupExpanded)
            {
                EditorGUI.indentLevel += 1;

                EnvironmentalPainter.ToolsSettings settings = instance.EnvironmentalPainter.Settings;
                settings.mode                    = (EnvironmentalPainter.Mode)EditorGUILayout.EnumPopup("Mode", settings.mode);
                settings.brushRadius             = EditorGUILayout.FloatField("Radius", settings.brushRadius);
                settings.density                 = EditorGUILayout.IntField("Density", settings.density);
                settings.scaleMin                = EditorGUILayout.FloatField("Scale Min", settings.scaleMin);
                settings.scaleMax                = EditorGUILayout.FloatField("Scale Max", settings.scaleMax);
                settings.maxRotation             = EditorGUILayout.FloatField("Max Rotation", settings.maxRotation);
                settings.combinationPhysicalSize = EditorGUILayout.FloatField("Combinations Physical Size", settings.combinationPhysicalSize);
                settings.keepColliders           = EditorGUILayout.Toggle("Keep Colliders For Groups", settings.keepColliders);
                settings.Validate();

                EditorGUI.indentLevel -= 1;
            }

            EditorGUILayout.GetControlRect(GUILayout.Height(1));
        }
コード例 #16
0
        private static void DrawOverallShapeGroup(TerrainGenerator instance, ref bool isChanged)
        {
            instance.inspector.isOverallShapeGroupExpanded = EditorCommon.GroupFoldout(instance.inspector.isOverallShapeGroupExpanded, "Overall Shape");
            if (instance.inspector.isOverallShapeGroupExpanded)
            {
                EditorGUI.indentLevel += 1;

                EditorGUI.BeginChangeCheck();
                DrawHeightMapField(instance);
                DrawDimensionErrorMessage(instance);
                instance.SurfaceTileCountX         = EditorGUILayout.DelayedIntField("Tile X", instance.SurfaceTileCountX);
                instance.SurfaceTileCountZ         = EditorGUILayout.DelayedIntField("Tile Z", instance.SurfaceTileCountZ);
                instance.VertexSpacing             = EditorGUILayout.FloatField("Vertex Spacing", instance.VertexSpacing);
                instance.BaseHeight                = EditorGUILayout.FloatField("Base Height", instance.BaseHeight);
                instance.ShouldGenerateUnderground = EditorGUILayout.Toggle("Underground", instance.ShouldGenerateUnderground);
                GUI.enabled = instance.ShouldGenerateUnderground;
                instance.ShouldEncloseBottomPart = EditorGUILayout.Toggle("Enclose Volume", instance.ShouldEncloseBottomPart);
                GUI.enabled = true;
                isChanged   = isChanged || EditorGUI.EndChangeCheck();

                EditorGUI.indentLevel -= 1;
            }
            EditorGUILayout.GetControlRect(GUILayout.Height(1));
        }