diff options
Diffstat (limited to 'Thronefall_1_57/Decompile/NGS.MeshFusionPro/MeshDataNativeArraysLW.cs')
| -rw-r--r-- | Thronefall_1_57/Decompile/NGS.MeshFusionPro/MeshDataNativeArraysLW.cs | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/Thronefall_1_57/Decompile/NGS.MeshFusionPro/MeshDataNativeArraysLW.cs b/Thronefall_1_57/Decompile/NGS.MeshFusionPro/MeshDataNativeArraysLW.cs new file mode 100644 index 0000000..939d022 --- /dev/null +++ b/Thronefall_1_57/Decompile/NGS.MeshFusionPro/MeshDataNativeArraysLW.cs @@ -0,0 +1,131 @@ +using System.Collections.Generic; +using Unity.Collections; +using UnityEngine; + +namespace NGS.MeshFusionPro; + +public class MeshDataNativeArraysLW : CombinedMeshDataInternal +{ + private CombinedMesh _root; + + private NativeList<LightweightVertex> _vertices; + + private NativeList<Bounds> _partsBounds; + + private NativeArray<Bounds> _bounds; + + private NativeList<LightweightVertex> _verticesLocal; + + private NativeList<Bounds> _partsBoundsLocal; + + private List<Vector3> _tempVertices; + + private List<Vector3> _tempNormals; + + private List<Vector4> _tempTangents; + + private List<Vector2> _tempUV; + + private List<Vector2> _tempUV2; + + public NativeArray<LightweightVertex> Vertices => _vertices; + + public NativeArray<Bounds> PartsBounds => _partsBounds; + + public NativeArray<Bounds> Bounds => _bounds; + + public NativeArray<LightweightVertex> VerticesLocal => _verticesLocal; + + public NativeArray<Bounds> PartsBoundsLocal => _partsBoundsLocal; + + public override Bounds GetBounds() + { + return _bounds[0]; + } + + public override Bounds GetBounds(CombinedMeshPart part) + { + return _partsBounds[part.Index]; + } + + public void ApplyDataToMesh() + { + Mesh mesh = _root.Mesh; + mesh.SetVertexBufferData(Vertices, 0, 0, _vertices.Length); + mesh.bounds = _bounds[0]; + } + + protected override void OnInitialized() + { + _root = base.Root; + VertexBufferUtil.ToLightweightBuffer(_root.Mesh); + _vertices = new NativeList<LightweightVertex>(Allocator.Persistent); + _partsBounds = new NativeList<Bounds>(Allocator.Persistent); + _bounds = new NativeArray<Bounds>(1, Allocator.Persistent); + _verticesLocal = new NativeList<LightweightVertex>(Allocator.Persistent); + _partsBoundsLocal = new NativeList<Bounds>(Allocator.Persistent); + _tempVertices = new List<Vector3>(); + _tempNormals = new List<Vector3>(); + _tempTangents = new List<Vector4>(); + _tempUV = new List<Vector2>(); + _tempUV2 = new List<Vector2>(); + } + + protected override void OnAddPart(CombinedMeshPart part, Mesh mesh, Matrix4x4 transform) + { + Bounds value = mesh.bounds; + Bounds value2 = value.Transform(transform); + _partsBounds.Add(in value2); + _partsBoundsLocal.Add(in value); + mesh.GetVertices(_tempVertices); + mesh.GetNormals(_tempNormals); + mesh.GetTangents(_tempTangents); + mesh.GetUVs(0, _tempUV); + mesh.GetUVs(1, _tempUV2); + int vertexCount = mesh.vertexCount; + for (int i = 0; i < vertexCount; i++) + { + LightweightVertex value3 = default(LightweightVertex); + value3.Position = _tempVertices[i]; + value3.Normal = _tempNormals[i]; + value3.Tangent = _tempTangents[i]; + if (_tempUV.Count > 0) + { + value3.UV = _tempUV[i]; + } + if (_tempUV2.Count > 0) + { + value3.UV2 = _tempUV2[i]; + } + _verticesLocal.Add(in value3); + } + } + + protected override void OnRemovePart(CombinedMeshPart part) + { + _partsBounds.RemoveAt(part.Index); + _verticesLocal.RemoveRange(part.VertexStart, part.VertexCount); + _partsBoundsLocal.RemoveAt(part.Index); + } + + protected override void OnMeshUpdated() + { + Mesh mesh = _root.Mesh; + using (Mesh.MeshDataArray meshDataArray = Mesh.AcquireReadOnlyMeshData(mesh)) + { + Mesh.MeshData meshData = meshDataArray[0]; + _vertices.Clear(); + _vertices.AddRange(meshData.GetVertexData<LightweightVertex>()); + } + _bounds[0] = mesh.bounds; + } + + protected override void OnDispose() + { + _vertices.Dispose(); + _partsBounds.Dispose(); + _bounds.Dispose(); + _verticesLocal.Dispose(); + _partsBoundsLocal.Dispose(); + } +} |
