public override void Destroy(MultiReferentialConstraintJob job) { job.sources.Dispose(); job.sourceBindTx.Dispose(); job.offsetTx.Dispose(); job.cache.Dispose(); }
public override void Update(MultiReferentialConstraintJob job, ref T data) { if (data.driver != (int)job.cache.GetRaw(job.driverIdx)) { job.cache.SetRaw(data.driver, job.driverIdx); job.UpdateOffsets(); } }
public override MultiReferentialConstraintJob Create(Animator animator, ref T data, Component component) { var job = new MultiReferentialConstraintJob(); var sources = data.sourceObjects; job.driver = IntProperty.Bind(animator, component, data.driverIntProperty); job.sources = new NativeArray <ReadWriteTransformHandle>(sources.Length, Allocator.Persistent, NativeArrayOptions.UninitializedMemory); job.sourceBindTx = new NativeArray <AffineTransform>(sources.Length, Allocator.Persistent, NativeArrayOptions.UninitializedMemory); job.offsetTx = new NativeArray <AffineTransform>(sources.Length - 1, Allocator.Persistent, NativeArrayOptions.UninitializedMemory); for (int i = 0; i < sources.Length; ++i) { job.sources[i] = ReadWriteTransformHandle.Bind(animator, sources[i].transform); job.sourceBindTx[i] = new AffineTransform(sources[i].position, sources[i].rotation); } job.UpdateOffsets(data.driverValue); return(job); }
public override MultiReferentialConstraintJob Create(Animator animator, ref T data) { var job = new MultiReferentialConstraintJob(); var cacheBuilder = new AnimationJobCacheBuilder(); job.driverIdx = cacheBuilder.Add(data.driver); var sources = data.sourceObjects; job.sources = new NativeArray <TransformHandle>(sources.Length, Allocator.Persistent, NativeArrayOptions.UninitializedMemory); job.sourceBindTx = new NativeArray <AffineTransform>(sources.Length, Allocator.Persistent, NativeArrayOptions.UninitializedMemory); job.offsetTx = new NativeArray <AffineTransform>(sources.Length - 1, Allocator.Persistent, NativeArrayOptions.UninitializedMemory); for (int i = 0; i < sources.Length; ++i) { job.sources[i] = TransformHandle.Bind(animator, sources[i].transform); job.sourceBindTx[i] = new AffineTransform(sources[i].position, sources[i].rotation); } job.cache = cacheBuilder.Build(); job.UpdateOffsets(); return(job); }