using System.Collections.Generic; using UnityEngine; namespace MTE { internal class GrassEditorUtil { /// /// Reload grass and build the grass map. /// /// internal static void ReloadGrassesFromFile(GrassLoader grassLoader) { //clear grass GameObjects grassLoader.RemoveOldGrasses(); //clear grass items in the map GrassMap.Clear(); var grassList = grassLoader.grassInstanceList; // the star: three quads List stars = grassList.grasses; if (stars != null && stars.Count != 0) { for (int i = 0; i < stars.Count; i++) { //create grass object var star = stars[i]; GameObject grassObject; MeshRenderer grassMeshRenderer; Mesh grassMesh; GrassUtil.GenerateGrassStarObject( star.Position, Quaternion.Euler(0, star.RotationY, 0), star.Width, star.Height, star.Material, out grassObject, out grassMeshRenderer, out grassMesh); grassObject.transform.SetParent(grassLoader.transform, true); //apply existing lightmap data to generated grass object grassMeshRenderer.lightmapIndex = star.LightmapIndex; grassMeshRenderer.lightmapScaleOffset = star.LightmapScaleOffset; GrassMap.Insert(new GrassItem(star, grassObject)); } } // the quad: one quad List quads = grassList.quads; if (quads != null && quads.Count != 0) { for (int i = 0; i < quads.Count; i++) { //create grass object var quad = quads[i]; GameObject grassObject; MeshRenderer grassMeshRenderer;//not used Mesh grassMesh;//not used GrassUtil.GenerateGrassQuadObject( quad.Position, Quaternion.Euler(0, quad.RotationY, 0), quad.Width, quad.Height, quad.Material, out grassObject, out grassMeshRenderer, out grassMesh); grassObject.transform.SetParent(grassLoader.transform, true); //apply exist lightmap data to generated grass object grassMeshRenderer.lightmapIndex = quad.LightmapIndex; grassMeshRenderer.lightmapScaleOffset = quad.LightmapScaleOffset; GrassMap.Insert(new GrassItem(quad, grassObject)); } // billboards shouldn't be static-batched } Utility.ShowNotification(StringTable.Get(C.Info_ReloadedGrassesFromFile)); } } }