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)); }
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)); }
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)); }
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)); }
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)); }
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)); }
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)); }
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)); }
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)); }
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)); }
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)); }
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)); }
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)); }
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)); }
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)); }
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)); }