UniVRM/Assets/UniGLTF/Runtime/SpringBoneJobs/FastSpringBoneScheduler.cs
ousttrue 6917f195f1 FastSpringBoneBufferCombiner の責務を分割。
- FastSpringBoneCombinedBuffer 統合バッファ
- FastSpringBoneBufferCombiner 統合前バッファの登録管理
2024-10-01 19:10:35 +09:00

60 lines
1.8 KiB
C#

using System;
using Unity.Jobs;
using UnityEngine.Jobs;
namespace UniGLTF.SpringBoneJobs
{
public sealed class FastSpringBoneScheduler : IDisposable
{
private readonly FastSpringBoneBufferCombiner _bufferCombiner;
public FastSpringBoneScheduler(FastSpringBoneBufferCombiner bufferCombiner)
{
_bufferCombiner = bufferCombiner;
}
public void Dispose()
{
_bufferCombiner.Dispose();
}
public JobHandle Schedule(float deltaTime)
{
var handle = _bufferCombiner.ReconstructIfDirty(default);
if (!_bufferCombiner.HasBuffer)
{
return handle;
}
if (_bufferCombiner.Combined is FastSpringBoneCombinedBuffer combined)
{
handle = new PullTransformJob
{
Transforms = combined.Transforms
}.Schedule(combined.TransformAccessArray, handle);
combined.FlipBuffer();
handle = new UpdateFastSpringBoneJob
{
Joints = combined.Joints,
Logics = combined.Logics,
CurrentTail = combined.CurrentTails,
PrevTail = combined.PrevTails,
NextTail = combined.NextTails,
Springs = combined.Springs,
Colliders = combined.Colliders,
Transforms = combined.Transforms,
DeltaTime = deltaTime,
}.Schedule(combined.Springs.Length, 1, handle);
handle = new PushTransformJob
{
Transforms = combined.Transforms
}.Schedule(combined.TransformAccessArray, handle);
}
return handle;
}
}
}