private SgtAuroraModel GetOrAddModel(int index) { var model = default(SgtAuroraModel); if (Models == null) { Models = new List <SgtAuroraModel>(); } if (index < Models.Count) { model = Models[index]; } else { Models.Add(model); } if (model == null) { model = Models[index] = SgtAuroraModel.Create(this); model.SetMaterial(Material); } return(model); }
protected virtual void OnDestroy() { if (Meshes != null) { for (var i = Meshes.Count - 1; i >= 0; i--) { var mesh = Meshes[i]; if (mesh != null) { mesh.Clear(false); SgtObjectPool <Mesh> .Add(Meshes[i]); } } } if (Models != null) { for (var i = Models.Count - 1; i >= 0; i--) { SgtAuroraModel.MarkForDestruction(Models[i]); } } SgtHelper.Destroy(Material); }
public static void MarkForDestruction(SgtAuroraModel model) { if (model != null) { model.Aurora = null; model.gameObject.SetActive(true); } }
public static void Pool(SgtAuroraModel model) { if (model != null) { model.Aurora = null; SgtComponentPool <SgtAuroraModel> .Add(model); } }
public void UpdateMeshesAndModels() { updateMeshesAndModelsCalled = true; if (Meshes == null) { Meshes = new List <Mesh>(); } if (Models == null) { Models = new List <SgtAuroraModel>(); } if (PathDetail > 0 && PathLengthMin > 0.0f && PathLengthMax > 0.0f) { var meshCount = 1; var mesh = GetMesh(0); var vertexCount = 0; SgtHelper.BeginRandomSeed(Seed); { for (var i = 0; i < PathCount; i++) { AddPath(ref mesh, ref meshCount, ref vertexCount); } } SgtHelper.EndRandomSeed(); BakeMesh(mesh); for (var i = Meshes.Count - 1; i >= meshCount; i--) { var extraMesh = Meshes[i]; if (extraMesh != null) { extraMesh.Clear(false); SgtObjectPool <Mesh> .Add(extraMesh); } Meshes.RemoveAt(i); } } for (var i = 0; i < Meshes.Count; i++) { var model = GetOrAddModel(i); model.SetMesh(Meshes[i]); } // Remove any excess if (Models != null) { var min = Mathf.Max(0, Meshes.Count); for (var i = Models.Count - 1; i >= min; i--) { SgtAuroraModel.Pool(Models[i]); Models.RemoveAt(i); } } }