bool CreateNewPalette() { string filePath = EditorUtility.SaveFilePanelInProject("Create New Palette", "New Layer Palette.asset", "asset", ""); if (string.IsNullOrEmpty(filePath)) { return(false); } m_SelectedLayerPalette = CreateInstance <TerrainPalette>(); foreach (var layer in m_PaletteLayers) { m_SelectedLayerPalette.PaletteLayers.Add(layer.AssignedLayer); } AssetDatabase.CreateAsset(m_SelectedLayerPalette, filePath); AssetDatabase.SaveAssets(); AssetDatabase.Refresh(); return(true); }
void LayersGUI() { if (m_SelectedTerrain != null && m_SelectedTerrain.terrainData.terrainLayers.Length == 0) { EditorGUILayout.HelpBox(Styles.LayersWarning, MessageType.Warning); } // Layer Palette preset EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField(Styles.PalettePreset, GUILayout.Width(EditorGUIUtility.labelWidth - 4.5f)); EditorGUI.BeginChangeCheck(); m_SelectedLayerPalette = (TerrainPalette)EditorGUILayout.ObjectField(m_SelectedLayerPalette, typeof(TerrainPalette), false, GUILayout.MinWidth(130)); if (EditorGUI.EndChangeCheck() && m_SelectedLayerPalette != null) { if (EditorUtility.DisplayDialog("Confirm", "Load palette from selected?", "OK", "Cancel")) { LoadPalette(); } } if (GUILayout.Button(Styles.SavePaletteBtn)) { if (GetPalette()) { m_SelectedLayerPalette.PaletteLayers.Clear(); foreach (var layer in m_PaletteLayers) { m_SelectedLayerPalette.PaletteLayers.Add(layer.AssignedLayer); } AssetDatabase.SaveAssets(); } } if (GUILayout.Button(Styles.SaveAsPaletteBtn)) { CreateNewPalette(); } if (GUILayout.Button(Styles.RefreshPaletteBtn)) { if (GetPalette()) { LoadPalette(); } } EditorGUILayout.EndHorizontal(); // Reorderable list view EditorGUILayout.BeginVertical("Box"); if (m_LayerList == null) { m_LayerList = new ReorderableList(m_PaletteLayers, typeof(Layer), true, true, false, false); m_LayerList.elementHeight = kElementHeight; m_LayerList.drawHeaderCallback = DrawHeader; m_LayerList.drawElementCallback = DrawLayerElement; m_LayerList.onSelectCallback = OnSelectLayerElement; m_LayerList.onReorderCallbackWithDetails = OnReorderLayerElement; } CreateLayersIfNeeded(); m_LayerList.DoLayoutList(); // Layer creation if (Event.current.commandName == "ObjectSelectorClosed" && EditorGUIUtility.GetObjectPickerControlID() == m_layerPickerWindowID) { m_PickedLayer = (TerrainLayer)EditorGUIUtility.GetObjectPickerObject(); } if (m_PickedLayer != null && Event.current.type == EventType.Repaint) { TerrainLayer tempLayer = m_PickedLayer; m_PickedLayer = null; if (!LayerExists(tempLayer)) { AddLayerElement(tempLayer); } } if (Event.current.commandName == "ObjectSelectorClosed" && EditorGUIUtility.GetObjectPickerControlID() == m_objPickerWindowID) { m_layerTexture = (Texture2D)EditorGUIUtility.GetObjectPickerObject(); } if (m_layerTexture != null && Event.current.type == EventType.Repaint) { Texture2D tempTexture = m_layerTexture; m_layerTexture = null; CreateNewLayerWithTexture(tempTexture); } // Control buttons EditorGUILayout.BeginHorizontal(); EditorGUI.BeginDisabledGroup(!CanAddLayerElement()); if (GUILayout.Button("Add Layer", GUILayout.Height(20))) { m_layerPickerWindowID = EditorGUIUtility.GetControlID(FocusType.Passive) + 200; // had to bump this to make it unique EditorGUIUtility.ShowObjectPicker <TerrainLayer>(null, false, "", m_layerPickerWindowID); } EditorGUI.EndDisabledGroup(); if (GUILayout.Button("Remove Layer", GUILayout.Height(20)) && EditorUtility.DisplayDialog("Warning", "Splatmap data changed by this layer will be lost.", "OK", "Cancel")) { RemoveLayerElement(); } if (GUILayout.Button(Styles.RemoveLayersBtn, GUILayout.Height(20)) && EditorUtility.DisplayDialog("Error", "Splatmap data changed by these layers will be lost.", "OK", "Cancel")) { RemoveSelectedLayerElements(); } EditorGUILayout.EndHorizontal(); // Create new layer EditorGUILayout.Space(); EditorGUILayout.BeginHorizontal(); m_LayerName = EditorGUILayout.TextField(Styles.NewLayer, m_LayerName); if (GUILayout.Button(Styles.CreateLayersBtn, GUILayout.Width(85), GUILayout.Height(20))) { m_objPickerWindowID = EditorGUIUtility.GetControlID(FocusType.Passive) + 100; // had to bump this to make it unique EditorGUIUtility.ShowObjectPicker <Texture2D>(null, false, "", m_objPickerWindowID); } EditorGUILayout.EndHorizontal(); EditorGUILayout.Space(); EditorGUILayout.EndVertical(); }