GrassPainter.Instance.cs 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. using System.Collections.Generic;
  2. using UnityEditor;
  3. using UnityEngine;
  4. namespace MTE
  5. {
  6. internal partial class GrassPainter
  7. {
  8. /*
  9. * Grass instances management
  10. */
  11. #region grass instance list attaching
  12. private static bool CanAttachGrassLoader = false;
  13. private static string CannotAttachGrassReason = null;
  14. public static void CheckIfCanAttachGrassLoader()
  15. {
  16. CanAttachGrassLoader = false;
  17. CannotAttachGrassReason = null;
  18. var gameObject = Selection.activeGameObject;
  19. if (gameObject == null)
  20. {
  21. CannotAttachGrassReason = StringTable.Get(C.Warning_SelectAGameObject);
  22. CanAttachGrassLoader = false;
  23. return;
  24. }
  25. var possibleMeshFilter = gameObject.GetComponent<MeshFilter>();
  26. if (possibleMeshFilter != null)
  27. {
  28. CannotAttachGrassReason = StringTable.Get(C.Warning_CannotAttachGrassLoaderToAGameObjectWithMeshFilter);
  29. CanAttachGrassLoader = false;
  30. return;
  31. }
  32. var grassLoader = gameObject.GetComponent<GrassLoader>();
  33. if (grassLoader == null)
  34. {
  35. CanAttachGrassLoader = true;
  36. return;
  37. }
  38. if (grassLoader.grassInstanceList == null)
  39. {
  40. CanAttachGrassLoader = true;
  41. return;
  42. }
  43. CannotAttachGrassReason = StringTable.Get(C.Warning_AlreadyAttached);
  44. CanAttachGrassLoader = false;
  45. }
  46. public static void AttachGrassLoader()
  47. {
  48. bool confirmed = EditorUtility.DisplayDialog(
  49. StringTable.Get(C.Warning),
  50. StringTable.Get(C.Warning_Confirm),
  51. StringTable.Get(C.Yes), StringTable.Get(C.No));
  52. if (!confirmed)
  53. {
  54. return;
  55. }
  56. AttachGrassLoaderToGameObject(Selection.activeGameObject);
  57. }
  58. private static void AttachGrassLoaderToGameObject(GameObject obj)
  59. {
  60. var gameObject = obj;
  61. if (gameObject == null)
  62. {
  63. return;
  64. }
  65. var relativePath = EditorUtility.SaveFilePanelInProject(
  66. StringTable.Get(C.ChooseGrassPointCloudDataFilePath),
  67. "Grasses", "asset", "");
  68. if (string.IsNullOrEmpty(relativePath))
  69. {
  70. return;
  71. }
  72. var grassLoader = gameObject.GetComponent<GrassLoader>();
  73. if (grassLoader == null)
  74. {
  75. grassLoader = gameObject.AddComponent<GrassLoader>();
  76. }
  77. if (grassLoader.grassInstanceList == null)
  78. {
  79. grassLoader.grassInstanceList = ScriptableObject.CreateInstance<GrassList>();
  80. grassLoader.grassInstanceList.grasses = new List<GrassStar>();
  81. grassLoader.grassInstanceList.quads = new List<GrassQuad>();
  82. }
  83. AssetDatabase.CreateAsset(grassLoader.grassInstanceList, relativePath);
  84. }
  85. public static void CreateGrassContainer()
  86. {
  87. bool confirmed = EditorUtility.DisplayDialog(
  88. StringTable.Get(C.Warning),
  89. StringTable.Get(C.Warning_Confirm),
  90. StringTable.Get(C.Yes), StringTable.Get(C.No));
  91. if (!confirmed)
  92. {
  93. return;
  94. }
  95. if (MTEContext.TheGrassLoader)
  96. {
  97. string loaderObjName = MTEContext.TheGrassLoader.gameObject.name;
  98. EditorUtility.DisplayDialog(
  99. StringTable.Get(C.Warning),
  100. string.Format(StringTable.Get(C.Warning_GrassLoaderExists), loaderObjName),
  101. StringTable.Get(C.Yes), StringTable.Get(C.No));
  102. return;
  103. }
  104. var gameObject = new GameObject("GrassContainer");
  105. AttachGrassLoaderToGameObject(gameObject);
  106. gameObject.transform.position = Vector3.zero;
  107. gameObject.transform.rotation = Quaternion.identity;
  108. gameObject.transform.localScale = Vector3.one;
  109. }
  110. #endregion
  111. List<Vector2> grassPositions = new List<Vector2>();
  112. readonly List<GrassItem> removeList = new List<GrassItem>(256);
  113. private DetailListBox<GrassDetail> detailListBox;
  114. }
  115. }