Protfolio-Emanuel-Polsky / Assets / _Project / Code / VerletIntegration / Tear / System / SetChangeToMeshSystem.cs
SetChangeToMeshSystem.cs
Raw
using Unity.Entities;
using Unity.Rendering;


namespace GarmentButton.VerletIntegration.Tear
{
    [UpdateInGroup(typeof(VerletIntegrationPhysicsGroupSystems))]
    [UpdateAfter(typeof(CheckStretchesSystem))]
    public partial class SetChangeToMeshSystem : SystemBase
    {

        protected override void OnCreate()
        {
            RequireForUpdate<UpdatedTringlesTag>();
            RequireForUpdate<MaterialMeshInfo>();
            RequireForUpdate<Tringle>();
        }


        protected override void OnUpdate()
        {
            var ecbSingleton = SystemAPI.GetSingleton<EndSimulationEntityCommandBufferSystem.Singleton>().CreateCommandBuffer(World.Unmanaged);

            foreach (var (meshInfo,tringles,meshArray,entity) in SystemAPI.Query<RefRO<MaterialMeshInfo>, DynamicBuffer<Tringle>,RenderMeshArray>().WithEntityAccess().WithAll<UpdatedTringlesTag>())
            {
                var mesh = meshArray.GetMesh(meshInfo.ValueRO);
                int[] tringlesForMesh = new int[tringles.Length];
                for (int i = 0; i < tringlesForMesh.Length; i++)
                    tringlesForMesh[i] = tringles[i].Index;
                
                mesh.SetTriangles(tringlesForMesh,0);
                mesh.RecalculateNormals();
                ecbSingleton.RemoveComponent<UpdatedTringlesTag>(entity);
            }

        }
    }
}