Пример #1
0
        private void RebuildTransition(AtomAnimationClip clip)
        {
            bool realign  = false;
            var  previous = clips.FirstOrDefault(c => c.nextAnimationName == clip.animationName);

            if (previous != null && (previous.IsDirty() || clip.IsDirty()))
            {
                clip.Paste(0f, previous.Copy(previous.animationLength, previous.GetAllCurveTargets().Cast <IAtomAnimationTarget>()), false);
                realign = true;
            }
            var next = GetClip(clip.nextAnimationName);

            if (next != null && (next.IsDirty() || clip.IsDirty()))
            {
                clip.Paste(clip.animationLength, next.Copy(0f, next.GetAllCurveTargets().Cast <IAtomAnimationTarget>()), false);
                realign = true;
            }
            if (realign)
            {
                foreach (var target in clip.targetControllers)
                {
                    if (clip.ensureQuaternionContinuity)
                    {
                        UnitySpecific.EnsureQuaternionContinuityAndRecalculateSlope(
                            target.rotX,
                            target.rotY,
                            target.rotZ,
                            target.rotW);
                    }
                }
            }
        }
Пример #2
0
        private static void RebuildClip(AtomAnimationClip clip, AtomAnimationClip previous)
        {
            foreach (var target in clip.targetControllers)
            {
                if (!target.dirty)
                {
                    continue;
                }

                if (clip.loop)
                {
                    target.SetCurveSnapshot(clip.animationLength, target.GetCurveSnapshot(0f), false);
                }

                target.ComputeCurves();

                if (clip.ensureQuaternionContinuity)
                {
                    var lastMatching = previous?.targetControllers.FirstOrDefault(t => t.TargetsSameAs(target));
                    var q            = lastMatching?.GetRotationAtKeyframe(lastMatching.rotX.length - 1) ?? target.GetRotationAtKeyframe(target.rotX.length - 1);
                    UnitySpecific.EnsureQuaternionContinuityAndRecalculateSlope(
                        target.rotX,
                        target.rotY,
                        target.rotZ,
                        target.rotW,
                        q);
                }

                foreach (var curve in target.GetCurves())
                {
                    curve.ComputeCurves();
                }
            }

            foreach (var target in clip.targetFloatParams)
            {
                if (!target.dirty)
                {
                    continue;
                }

                if (clip.loop)
                {
                    target.SetCurveSnapshot(clip.animationLength, target.GetCurveSnapshot(0), false);
                }

                target.value.ComputeCurves();
            }

            foreach (var target in clip.targetTriggers)
            {
                if (!target.dirty)
                {
                    continue;
                }

                target.RebuildKeyframes(clip.animationLength);
            }
        }
Пример #3
0
        private void RebuildClip(AtomAnimationClip clip)
        {
            foreach (var target in clip.targetControllers)
            {
                if (!target.dirty)
                {
                    continue;
                }

                if (clip.loop)
                {
                    target.SetCurveSnapshot(clip.animationLength, target.GetCurveSnapshot(0f), false);
                }

                target.ReapplyCurveTypes(clip.loop);

                if (clip.ensureQuaternionContinuity)
                {
                    UnitySpecific.EnsureQuaternionContinuityAndRecalculateSlope(
                        target.rotX,
                        target.rotY,
                        target.rotZ,
                        target.rotW);
                }

                RebuildClipLoop(clip, target);
            }

            foreach (var target in clip.targetFloatParams)
            {
                if (!target.dirty)
                {
                    continue;
                }

                if (clip.loop)
                {
                    target.value.SetKeyframe(clip.animationLength, target.value[0].value);
                }

                target.ReapplyCurveTypes(clip.loop);

                RebuildClipLoop(clip, target);
            }

            foreach (var target in clip.targetTriggers)
            {
                if (!target.dirty)
                {
                    continue;
                }

                target.RebuildKeyframes(clip.animationLength);
            }
        }
Пример #4
0
        private void PrepareClipCurves(AtomAnimationClip clip)
        {
            foreach (var target in clip.TargetControllers)
            {
                if (!target.dirty)
                {
                    continue;
                }

                target.dirty = false;

                if (clip.loop)
                {
                    target.SetCurveSnapshot(clip.animationLength, target.GetCurveSnapshot(0f), false);
                }

                target.ReapplyCurveTypes();

                if (clip.loop)
                {
                    target.SmoothLoop();
                }

                if (clip.EnsureQuaternionContinuity)
                {
                    UnitySpecific.EnsureQuaternionContinuityAndRecalculateSlope(
                        target.rotX,
                        target.rotY,
                        target.rotZ,
                        target.rotW);
                }
            }

            foreach (var target in clip.TargetFloatParams)
            {
                if (!target.dirty)
                {
                    continue;
                }

                target.dirty = false;

                if (clip.loop)
                {
                    target.value.SetKeyframe(clip.animationLength, target.value[0].value);
                }

                target.value.FlatAllFrames();
            }
        }