using System; using System.Collections.Generic; using UnityEditor; using UnityEngine; namespace MTE { internal class GrassEditorUtilityWindow : MTEWindow { /// /// Editing grass detail list /// public IList detailList; public int editingIndex; public bool IsAdding = false; public Action OnSave { private get; set; } #region Parameters Material material; float minWidth = GrassDetail.DefaultMinWidth; float maxWidth = GrassDetail.DefaultMaxWidth; float minHeight = GrassDetail.DefaultMinHeight; float maxHeight = GrassDetail.DefaultMaxHeight; GrassType grassType = GrassDetail.DefaultGrassType; #endregion GrassDetail grassDetail; public override void OnGUI() { base.OnGUI(); if(IsAdding) { material = (Material)EditorGUILayout.ObjectField(StringTable.Get(C.Material), material, typeof(Material), false); minWidth = EditorGUILayout.Slider(StringTable.Get(C.MinWidth), minWidth, 0f, 9999f); maxWidth = EditorGUILayout.Slider(StringTable.Get(C.MaxWidth), maxWidth, 0f, 9999f); minHeight = EditorGUILayout.Slider(StringTable.Get(C.MinHeight), minHeight, 0f, 9999f); maxHeight = EditorGUILayout.Slider(StringTable.Get(C.MaxHeight), maxHeight, 0f, 9999f); grassType = (GrassType)EditorGUILayout.EnumPopup(StringTable.Get(C.Type), grassType); GUILayout.FlexibleSpace(); EditorGUILayout.BeginHorizontal(); if (GUILayout.Button(StringTable.Get(C.Add))) { if (material != null) { GrassDetail grassDetail = new GrassDetail { Material = material, MinWidth = minWidth, MaxWidth = maxWidth, MinHeight = minHeight, MaxHeight = maxHeight, GrassType = grassType, }; this.detailList.Add(grassDetail); OnSave(); MTEEditorWindow.Instance.Repaint(); this.Close(); } } if (GUILayout.Button(StringTable.Get(C.Cancel))) { this.Close(); } EditorGUILayout.EndHorizontal(); } else//editing { if (grassDetail == null) { grassDetail = detailList[editingIndex]; if (grassDetail != null) { grassDetail = grassDetail.ShallowCopy(); } } if (grassDetail == null) { EditorGUILayout.HelpBox( $"Ignored invalid grass detail detected at index {editingIndex}", MessageType.Warning); } else { grassDetail.Material = (Material)EditorGUILayout.ObjectField(StringTable.Get(C.Material), grassDetail.Material, typeof(Material), false); grassDetail.MinWidth = EditorGUILayout.Slider(StringTable.Get(C.MinWidth), grassDetail.MinWidth, 0f, 9999f); grassDetail.MaxWidth = EditorGUILayout.Slider(StringTable.Get(C.MaxWidth), grassDetail.MaxWidth, 0f, 9999f); grassDetail.MinHeight = EditorGUILayout.Slider(StringTable.Get(C.MinHeight), grassDetail.MinHeight, 0f, 9999f); grassDetail.MaxHeight = EditorGUILayout.Slider(StringTable.Get(C.MaxHeight), grassDetail.MaxHeight, 0f, 9999f); grassDetail.GrassType = (GrassType)EditorGUILayout.EnumPopup(StringTable.Get(C.Type), grassDetail.GrassType); GUILayout.FlexibleSpace(); EditorGUILayout.BeginHorizontal(); if (GUILayout.Button(StringTable.Get(C.Apply))) { detailList[editingIndex] = grassDetail; OnSave(); MTEEditorWindow.Instance.Repaint(); this.Close(); } } if (GUILayout.Button(StringTable.Get(C.Cancel))) { this.Close(); } EditorGUILayout.EndHorizontal(); } } } }