diff options
Diffstat (limited to 'Thronefall_1_57/Decompile/NGS.MeshFusionPro/CombinedMesh.cs')
| -rw-r--r-- | Thronefall_1_57/Decompile/NGS.MeshFusionPro/CombinedMesh.cs | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/Thronefall_1_57/Decompile/NGS.MeshFusionPro/CombinedMesh.cs b/Thronefall_1_57/Decompile/NGS.MeshFusionPro/CombinedMesh.cs new file mode 100644 index 0000000..fd9933b --- /dev/null +++ b/Thronefall_1_57/Decompile/NGS.MeshFusionPro/CombinedMesh.cs @@ -0,0 +1,86 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace NGS.MeshFusionPro; + +public class CombinedMesh : IDisposable +{ + private Mesh _mesh; + + private CombinedMeshDataInternal _meshData; + + private IMeshCombiner _combiner; + + private IMeshCutter _cutter; + + public Mesh Mesh => _mesh; + + public CombinedMeshData MeshData => _meshData; + + public CombinedMesh(IMeshCombiner combiner, IMeshCutter cutter) + { + if (combiner == null) + { + throw new ArgumentNullException("MeshCombiner not assigned"); + } + if (cutter == null) + { + throw new ArgumentNullException("MeshCutter not assigned"); + } + _mesh = new Mesh(); + _mesh.MarkDynamic(); + _combiner = combiner; + _cutter = cutter; + _meshData = CreateMeshData(); + _meshData.Initialize(this); + } + + public CombinedMeshPart[] Combine(IList<MeshCombineInfo> infos) + { + _combiner.Combine(_mesh, infos); + return _meshData.CreateParts(infos); + } + + public void Cut(IList<CombinedMeshPart> parts) + { + MeshCuttingInfo[] array = new MeshCuttingInfo[parts.Count]; + for (int i = 0; i < parts.Count; i++) + { + CombinedMeshPart combinedMeshPart = parts[i]; + array[i] = new MeshCuttingInfo + { + vertexStart = combinedMeshPart.VertexStart, + vertexCount = combinedMeshPart.VertexCount, + triangleStart = combinedMeshPart.TrianglesStart, + triangleCount = combinedMeshPart.TrianglesCount + }; + } + _cutter.Cut(_mesh, array); + _meshData.RemoveParts(parts); + } + + public void Dispose() + { + _meshData.Dispose(); + } + + protected virtual CombinedMeshDataInternal CreateMeshData() + { + return new CombinedMeshDataInternal(); + } +} +public class CombinedMesh<TCombinedMeshData> : CombinedMesh where TCombinedMeshData : CombinedMeshDataInternal, new() +{ + public TCombinedMeshData MeshDataInternal => (TCombinedMeshData)base.MeshData; + + public CombinedMesh(IMeshCombiner combiner, IMeshCutter cutter) + : base(combiner, cutter) + { + } + + protected override CombinedMeshDataInternal CreateMeshData() + { + return new TCombinedMeshData(); + } +} |
