public override DampedTransformJob Create(Animator animator, ref T data, Component component)
        {
            var job = new DampedTransformJob();

            job.driven = ReadWriteTransformHandle.Bind(animator, data.constrainedObject);
            job.source = ReadOnlyTransformHandle.Bind(animator, data.sourceObject);

            var drivenTx = new AffineTransform(data.constrainedObject.position, data.constrainedObject.rotation);
            var sourceTx = new AffineTransform(data.sourceObject.position, data.sourceObject.rotation);

            job.localBindTx  = sourceTx.InverseMul(drivenTx);
            job.prevDrivenTx = drivenTx;

            job.dampPosition = FloatProperty.Bind(animator, component, data.dampPositionFloatProperty);
            job.dampRotation = FloatProperty.Bind(animator, component, data.dampRotationFloatProperty);

            if (data.maintainAim && AnimationRuntimeUtils.SqrDistance(data.constrainedObject.position, data.sourceObject.position) > 0f)
            {
                job.aimBindAxis = Quaternion.Inverse(data.constrainedObject.rotation) * (sourceTx.translation - drivenTx.translation).normalized;
            }
            else
            {
                job.aimBindAxis = Vector3.zero;
            }

            return(job);
        }
Exemplo n.º 2
0
        public override DampedTransformJob Create(Animator animator, ref T data)
        {
            var job          = new DampedTransformJob();
            var cacheBuilder = new AnimationJobCacheBuilder();

            job.driven = TransformHandle.Bind(animator, data.constrainedObject);
            job.source = TransformHandle.Bind(animator, data.source);

            var drivenTx = new AffineTransform(data.constrainedObject.position, data.constrainedObject.rotation);
            var sourceTx = new AffineTransform(data.source.position, data.source.rotation);

            job.localBindTx     = sourceTx.InverseMul(drivenTx);
            job.prevDrivenTx    = drivenTx;
            job.dampPositionIdx = cacheBuilder.Add(data.dampPosition);
            job.dampRotationIdx = cacheBuilder.Add(data.dampRotation);

            if (data.maintainAim && AnimationRuntimeUtils.SqrDistance(data.constrainedObject.position, data.source.position) > 0f)
            {
                job.aimBindAxis = Quaternion.Inverse(data.constrainedObject.rotation) * (sourceTx.translation - drivenTx.translation).normalized;
            }
            else
            {
                job.aimBindAxis = Vector3.zero;
            }

            job.cache = cacheBuilder.Build();
            return(job);
        }
 public override void Destroy(DampedTransformJob job)
 {
 }
Exemplo n.º 4
0
 public override void Update(DampedTransformJob job, ref T data)
 {
     job.cache.SetRaw(data.dampPosition, job.dampPositionIdx);
     job.cache.SetRaw(data.dampRotation, job.dampRotationIdx);
 }
Exemplo n.º 5
0
 public override void Destroy(DampedTransformJob job)
 {
     job.cache.Dispose();
 }