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

            job.driven  = ReadWriteTransformHandle.Bind(animator, data.constrainedObject);
            job.sourceA = ReadOnlyTransformHandle.Bind(animator, data.sourceObjectA);
            job.sourceB = ReadOnlyTransformHandle.Bind(animator, data.sourceObjectB);

            job.sourceAOffset = job.sourceBOffset = AffineTransform.identity;
            if (data.maintainPositionOffsets)
            {
                var drivenPos = data.constrainedObject.position;
                job.sourceAOffset.translation = drivenPos - data.sourceObjectA.position;
                job.sourceBOffset.translation = drivenPos - data.sourceObjectB.position;
            }

            if (data.maintainRotationOffsets)
            {
                var drivenRot = data.constrainedObject.rotation;
                job.sourceAOffset.rotation = Quaternion.Inverse(data.sourceObjectA.rotation) * drivenRot;
                job.sourceBOffset.rotation = Quaternion.Inverse(data.sourceObjectB.rotation) * drivenRot;
            }

            job.blendPosition  = BoolProperty.Bind(animator, component, data.blendPositionBoolProperty);
            job.blendRotation  = BoolProperty.Bind(animator, component, data.blendRotationBoolProperty);
            job.positionWeight = FloatProperty.Bind(animator, component, data.positionWeightFloatProperty);
            job.rotationWeight = FloatProperty.Bind(animator, component, data.rotationWeightFloatProperty);

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

            job.driven     = TransformHandle.Bind(animator, data.constrainedObject);
            job.sourceA    = TransformHandle.Bind(animator, data.sourceA);
            job.sourceB    = TransformHandle.Bind(animator, data.sourceB);
            job.optionsIdx = cacheBuilder.Add(BlendConstraintJob.PackFlags(data.blendPosition, data.blendRotation));

            job.sourceAOffset = job.sourceBOffset = AffineTransform.identity;
            if (data.maintainPositionOffsets)
            {
                var drivenPos = data.constrainedObject.position;
                job.sourceAOffset.translation = drivenPos - data.sourceA.position;
                job.sourceBOffset.translation = drivenPos - data.sourceB.position;
            }

            if (data.maintainRotationOffsets)
            {
                var drivenRot = data.constrainedObject.rotation;
                job.sourceAOffset.rotation = Quaternion.Inverse(data.sourceA.rotation) * drivenRot;
                job.sourceBOffset.rotation = Quaternion.Inverse(data.sourceB.rotation) * drivenRot;
            }

            job.positionWeightIdx = cacheBuilder.Add(data.positionWeight);
            job.rotationWeightIdx = cacheBuilder.Add(data.rotationWeight);
            job.cache             = cacheBuilder.Build();

            return(job);
        }
 public override void Destroy(BlendConstraintJob job)
 {
 }
Exemplo n.º 4
0
 public override void Update(BlendConstraintJob job, ref T data)
 {
     job.cache.SetRaw(data.positionWeight, job.positionWeightIdx);
     job.cache.SetRaw(data.rotationWeight, job.rotationWeightIdx);
     job.cache.SetRaw(BlendConstraintJob.PackFlags(data.blendPosition, data.blendRotation), job.optionsIdx);
 }
Exemplo n.º 5
0
 public override void Destroy(BlendConstraintJob job)
 {
     job.cache.Dispose();
 }