public void ProcessAnimation(AnimationStream stream) { AnimationStream inputStream = stream.GetInputStream(0); if (BlendActive) { for (int i = 0; i < TargetAnimationTransforms.Length; ++i) { TransformStreamHandle TargetTransform = TargetAnimationTransforms[i]; TransformSceneHandle CurrentTransform = CurrentAnimationTransforms[i]; TransformData PreviousTransform = PreviousAnimationTransforms[i]; float3 currentPos = float3.zero; if (i == 0) { float3 targetPos = TargetTransform.GetLocalPosition(inputStream); currentPos = CurrentTransform.GetLocalPosition(stream); float3 pos = Inertialize(PreviousTransform.Position, currentPos, targetPos, DeltaTime, RemainingTime, DeltaTime); TargetTransform.SetLocalPosition(stream, pos); } quaternion targetRot = TargetTransform.GetLocalRotation(inputStream); quaternion currentRot = CurrentTransform.GetLocalRotation(stream); quaternion rot = Inertialize(PreviousTransform.Rotation, currentRot, targetRot, DeltaTime, RemainingTime, DeltaTime); TargetTransform.SetLocalRotation(stream, rot); PreviousAnimationTransforms[i] = new TransformData(currentPos, currentRot); } } else { for (int i = 0; i < TargetAnimationTransforms.Length; ++i) { TransformStreamHandle TargetTransform = TargetAnimationTransforms[i]; TransformSceneHandle CurrentTransform = CurrentAnimationTransforms[i]; if (i == 0) { TargetTransform.SetLocalPosition(stream, TargetTransform.GetLocalPosition(inputStream)); } TargetTransform.SetLocalRotation(stream, TargetTransform.GetLocalRotation(inputStream)); PreviousAnimationTransforms[i] = new TransformData(CurrentTransform.GetLocalPosition(stream), CurrentTransform.GetLocalRotation(stream)); } } }
/// <summary> /// Gets the position of the transform relative to the parent. /// </summary> /// <param name="stream">The AnimationStream that holds the animated values.</param> /// <returns>The position of the transform relative to the parent.</returns> public Vector3 GetLocalPosition(AnimationStream stream) => m_InStream == 1 ? m_StreamHandle.GetLocalPosition(stream) : m_SceneHandle.GetLocalPosition(stream);