GrassEditorUtil.cs 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. using System.Collections.Generic;
  2. using UnityEngine;
  3. namespace MTE
  4. {
  5. internal class GrassEditorUtil
  6. {
  7. /// <summary>
  8. /// Reload grass and build the grass map.
  9. /// </summary>
  10. /// <param name="grassLoader"></param>
  11. internal static void ReloadGrassesFromFile(GrassLoader grassLoader)
  12. {
  13. //clear grass GameObjects
  14. grassLoader.RemoveOldGrasses();
  15. //clear grass items in the map
  16. GrassMap.Clear();
  17. var grassList = grassLoader.grassInstanceList;
  18. // the star: three quads
  19. List<GrassStar> stars = grassList.grasses;
  20. if (stars != null && stars.Count != 0)
  21. {
  22. for (int i = 0; i < stars.Count; i++)
  23. {
  24. //create grass object
  25. var star = stars[i];
  26. GameObject grassObject;
  27. MeshRenderer grassMeshRenderer;
  28. Mesh grassMesh;
  29. GrassUtil.GenerateGrassStarObject(
  30. star.Position,
  31. Quaternion.Euler(0, star.RotationY, 0),
  32. star.Width, star.Height,
  33. star.Material,
  34. out grassObject, out grassMeshRenderer, out grassMesh);
  35. grassObject.transform.SetParent(grassLoader.transform, true);
  36. //apply existing lightmap data to generated grass object
  37. grassMeshRenderer.lightmapIndex = star.LightmapIndex;
  38. grassMeshRenderer.lightmapScaleOffset = star.LightmapScaleOffset;
  39. GrassMap.Insert(new GrassItem(star, grassObject));
  40. }
  41. }
  42. // the quad: one quad
  43. List<GrassQuad> quads = grassList.quads;
  44. if (quads != null && quads.Count != 0)
  45. {
  46. for (int i = 0; i < quads.Count; i++)
  47. {
  48. //create grass object
  49. var quad = quads[i];
  50. GameObject grassObject;
  51. MeshRenderer grassMeshRenderer;//not used
  52. Mesh grassMesh;//not used
  53. GrassUtil.GenerateGrassQuadObject(
  54. quad.Position,
  55. Quaternion.Euler(0, quad.RotationY, 0),
  56. quad.Width, quad.Height,
  57. quad.Material,
  58. out grassObject, out grassMeshRenderer, out grassMesh);
  59. grassObject.transform.SetParent(grassLoader.transform, true);
  60. //apply exist lightmap data to generated grass object
  61. grassMeshRenderer.lightmapIndex = quad.LightmapIndex;
  62. grassMeshRenderer.lightmapScaleOffset = quad.LightmapScaleOffset;
  63. GrassMap.Insert(new GrassItem(quad, grassObject));
  64. }
  65. // billboards shouldn't be static-batched
  66. }
  67. Utility.ShowNotification(StringTable.Get(C.Info_ReloadedGrassesFromFile));
  68. }
  69. }
  70. }