using System.Collections.Generic; using AwesomeTechnologies.VegetationSystem; using Unity.Collections; using UnityEngine; namespace AwesomeTechnologies.BillboardSystem { public class BillboardInstance { public bool Loaded; public int InstanceCount; public Mesh Mesh; public Vector3 Position; public NativeList<MatrixInstance> InstanceList; public NativeList<Vector3> VerticeList; public NativeList<int> IndexList; public NativeList<Vector2> UvList; public NativeList<Vector2> Uv2List; public NativeList<Vector2> Uv3List; public NativeList<Vector3> NormalList; public BillboardInstance() { InstanceList = new NativeList<MatrixInstance>(0,Allocator.Persistent); VerticeList = new NativeList<Vector3>(0, Allocator.Persistent); IndexList = new NativeList<int>(0, Allocator.Persistent); UvList = new NativeList<Vector2>(0, Allocator.Persistent); Uv2List = new NativeList<Vector2>(0, Allocator.Persistent); Uv3List = new NativeList<Vector2>(0, Allocator.Persistent); NormalList = new NativeList<Vector3>(0, Allocator.Persistent); } public void ClearCache() { if (!Loaded) return; InstanceList.Clear(); IndexList.Clear(); VerticeList.Clear(); NormalList.Clear(); UvList.Clear(); Uv2List.Clear(); Uv3List.Clear(); Object.DestroyImmediate(Mesh); Loaded = false; } public void Dispose() { if (InstanceList.IsCreated) InstanceList.Dispose(); if (VerticeList.IsCreated) VerticeList.Dispose(); if (IndexList.IsCreated) IndexList.Dispose(); if (UvList.IsCreated) UvList.Dispose(); if (Uv2List.IsCreated) Uv2List.Dispose(); if (Uv3List.IsCreated) Uv3List.Dispose(); if (NormalList.IsCreated) NormalList.Dispose(); } } public class VegetationPackageBillboardInstances { public List<BillboardInstance> BillboardInstanceList = new List<BillboardInstance>(); public VegetationPackageBillboardInstances(int vegetationItemCount) { for (int i = 0; i <= vegetationItemCount - 1; i++) { BillboardInstance billboardInstance = new BillboardInstance(); BillboardInstanceList.Add(billboardInstance); } } public void ClearCache() { for (int i = 0; i <= BillboardInstanceList.Count - 1; i++) { BillboardInstanceList[i].ClearCache(); } } public void Dispose() { for (int i = 0; i <= BillboardInstanceList.Count - 1; i++) { BillboardInstanceList[i].Dispose(); } BillboardInstanceList.Clear(); } } }