public static Mesh Combine(ProceduralFlower flower, PFPartType type = PFPartType.None) { var root = flower.Build(); var filters = new List <MeshFilter>(); Traverse(root.GetComponent <PFPart>(), filters); if (type != PFPartType.None) { filters = filters.FindAll(filter => filter.GetComponent <PFPart>().Type == type).ToList(); } var combine = new CombineInstance[filters.Count]; for (int i = 0, n = filters.Count; i < n; i++) { combine[i].mesh = filters[i].sharedMesh; combine[i].transform = filters[i].transform.localToWorldMatrix; } GameObject.Destroy(root); var mesh = new Mesh(); mesh.CombineMeshes(combine); return(mesh); }
GameObject CreateBase(string name, PFPartType type, Mesh mesh, Material material, ShadowCastingMode shadowCastingMode, bool receiveShadows, bool visible) { var go = new GameObject(name); go.AddComponent <MeshFilter>().mesh = mesh; var rnd = go.AddComponent <MeshRenderer>(); rnd.sharedMaterial = material; rnd.shadowCastingMode = shadowCastingMode; rnd.receiveShadows = receiveShadows; var part = go.AddComponent <PFPart>(); part.SetType(type); part.Fade(visible ? 1f + part.EPSILON : 0f); return(go); }
public void SetType(PFPartType tp) { type = tp; }
GameObject CreateShape(string name, PFPartType type, ShapeData data, bool visible) { return(CreateBase(name, type, data.mesh, data.material, data.shadowCastingMode, data.receiveShadows, visible)); }