GrassEditorUtilityWindow.cs 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. using System;
  2. using System.Collections.Generic;
  3. using UnityEditor;
  4. using UnityEngine;
  5. namespace MTE
  6. {
  7. internal class GrassEditorUtilityWindow : MTEWindow
  8. {
  9. /// <summary>
  10. /// Editing grass detail list
  11. /// </summary>
  12. public IList<GrassDetail> detailList;
  13. public int editingIndex;
  14. public bool IsAdding = false;
  15. public Action OnSave { private get; set; }
  16. #region Parameters
  17. Material material;
  18. float minWidth = GrassDetail.DefaultMinWidth;
  19. float maxWidth = GrassDetail.DefaultMaxWidth;
  20. float minHeight = GrassDetail.DefaultMinHeight;
  21. float maxHeight = GrassDetail.DefaultMaxHeight;
  22. GrassType grassType = GrassDetail.DefaultGrassType;
  23. #endregion
  24. GrassDetail grassDetail;
  25. public override void OnGUI()
  26. {
  27. base.OnGUI();
  28. if(IsAdding)
  29. {
  30. material = (Material)EditorGUILayout.ObjectField(StringTable.Get(C.Material),
  31. material, typeof(Material), false);
  32. minWidth = EditorGUILayout.Slider(StringTable.Get(C.MinWidth), minWidth, 0f, 9999f);
  33. maxWidth = EditorGUILayout.Slider(StringTable.Get(C.MaxWidth), maxWidth, 0f, 9999f);
  34. minHeight = EditorGUILayout.Slider(StringTable.Get(C.MinHeight), minHeight, 0f, 9999f);
  35. maxHeight = EditorGUILayout.Slider(StringTable.Get(C.MaxHeight), maxHeight, 0f, 9999f);
  36. grassType = (GrassType)EditorGUILayout.EnumPopup(StringTable.Get(C.Type), grassType);
  37. GUILayout.FlexibleSpace();
  38. EditorGUILayout.BeginHorizontal();
  39. if (GUILayout.Button(StringTable.Get(C.Add)))
  40. {
  41. if (material != null)
  42. {
  43. GrassDetail grassDetail = new GrassDetail
  44. {
  45. Material = material,
  46. MinWidth = minWidth,
  47. MaxWidth = maxWidth,
  48. MinHeight = minHeight,
  49. MaxHeight = maxHeight,
  50. GrassType = grassType,
  51. };
  52. this.detailList.Add(grassDetail);
  53. OnSave();
  54. MTEEditorWindow.Instance.Repaint();
  55. this.Close();
  56. }
  57. }
  58. if (GUILayout.Button(StringTable.Get(C.Cancel)))
  59. {
  60. this.Close();
  61. }
  62. EditorGUILayout.EndHorizontal();
  63. }
  64. else//editing
  65. {
  66. if (grassDetail == null)
  67. {
  68. grassDetail = detailList[editingIndex];
  69. if (grassDetail != null)
  70. {
  71. grassDetail = grassDetail.ShallowCopy();
  72. }
  73. }
  74. if (grassDetail == null)
  75. {
  76. EditorGUILayout.HelpBox(
  77. $"Ignored invalid grass detail detected at index {editingIndex}",
  78. MessageType.Warning);
  79. }
  80. else
  81. {
  82. grassDetail.Material = (Material)EditorGUILayout.ObjectField(StringTable.Get(C.Material),
  83. grassDetail.Material, typeof(Material), false);
  84. grassDetail.MinWidth = EditorGUILayout.Slider(StringTable.Get(C.MinWidth), grassDetail.MinWidth, 0f, 9999f);
  85. grassDetail.MaxWidth = EditorGUILayout.Slider(StringTable.Get(C.MaxWidth), grassDetail.MaxWidth, 0f, 9999f);
  86. grassDetail.MinHeight = EditorGUILayout.Slider(StringTable.Get(C.MinHeight), grassDetail.MinHeight, 0f, 9999f);
  87. grassDetail.MaxHeight = EditorGUILayout.Slider(StringTable.Get(C.MaxHeight), grassDetail.MaxHeight, 0f, 9999f);
  88. grassDetail.GrassType = (GrassType)EditorGUILayout.EnumPopup(StringTable.Get(C.Type), grassDetail.GrassType);
  89. GUILayout.FlexibleSpace();
  90. EditorGUILayout.BeginHorizontal();
  91. if (GUILayout.Button(StringTable.Get(C.Apply)))
  92. {
  93. detailList[editingIndex] = grassDetail;
  94. OnSave();
  95. MTEEditorWindow.Instance.Repaint();
  96. this.Close();
  97. }
  98. }
  99. if (GUILayout.Button(StringTable.Get(C.Cancel)))
  100. {
  101. this.Close();
  102. }
  103. EditorGUILayout.EndHorizontal();
  104. }
  105. }
  106. }
  107. }