Пример #1
0
        public static Node WithScaleAnimation(this Node node, string animationName, Animations.ICurveSampler <Vector3> sampler)
        {
            Guard.NotNull(node, nameof(node));

            if (sampler is Animations.IConvertibleCurve <Vector3> curve)
            {
                var animation = node.LogicalParent.UseAnimation(animationName);

                var degree = curve.MaxDegree;
                if (degree == 0)
                {
                    animation.CreateScaleChannel(node, curve.ToStepCurve(), false);
                }
                if (degree == 1)
                {
                    animation.CreateScaleChannel(node, curve.ToLinearCurve(), true);
                }
                if (degree == 3)
                {
                    animation.CreateScaleChannel(node, curve.ToSplineCurve());
                }
            }
            else
            {
                throw new ArgumentException("Must implement IConvertibleCurve<Vector3>", nameof(sampler));
            }

            return(node);
        }
Пример #2
0
        public static Node WithMorphingAnimation(this Node node, string animationName, Animations.ICurveSampler <Transforms.SparseWeight8> sampler)
        {
            Guard.NotNull(node, nameof(node));
            Guard.NotNull(node.MorphWeights, nameof(node.MorphWeights), "Set node.MorphWeights before setting morphing animation");
            Guard.MustBeGreaterThanOrEqualTo(node.MorphWeights.Count, 0, nameof(node.MorphWeights));

            if (sampler is Animations.IConvertibleCurve <Transforms.SparseWeight8> curve)
            {
                var animation = node.LogicalParent.UseAnimation(animationName);

                var degree = curve.MaxDegree;
                if (degree == 0)
                {
                    animation.CreateMorphChannel(node, curve.ToStepCurve(), node.MorphWeights.Count, false);
                }
                if (degree == 1)
                {
                    animation.CreateMorphChannel(node, curve.ToLinearCurve(), node.MorphWeights.Count, true);
                }
                if (degree == 3)
                {
                    animation.CreateMorphChannel(node, curve.ToSplineCurve(), node.MorphWeights.Count);
                }
            }

            return(node);
        }
        public static Node WithRotationAnimation(this Node node, string animationName, Animations.ICurveSampler <Quaternion> sampler)
        {
            Guard.NotNull(node, nameof(node));

            if (sampler is Animations.IConvertibleCurve <Quaternion> curve)
            {
                var animation = node.LogicalParent.UseAnimation(animationName);

                var degree = curve.MaxDegree;
                if (degree == 0)
                {
                    animation.CreateRotationChannel(node, curve.ToStepCurve(), false);
                }
                if (degree == 1)
                {
                    animation.CreateRotationChannel(node, curve.ToLinearCurve(), true);
                }
                if (degree == 3)
                {
                    animation.CreateRotationChannel(node, curve.ToSplineCurve());
                }
            }

            return(node);
        }
Пример #4
0
        public static Node WithMorphingAnimation <T>(this Node node, string animationName, Animations.ICurveSampler <T> sampler)
            where T : IReadOnlyList <float>
        {
            Guard.NotNull(node, nameof(node));
            Guard.NotNull(node.MorphWeights, nameof(node.MorphWeights), "Set node.MorphWeights before setting morphing animation");
            Guard.MustBeGreaterThanOrEqualTo(node.MorphWeights.Count, 0, nameof(node.MorphWeights));

            if (sampler is Animations.IConvertibleCurve <float[]> arrayCurve)
            {
                var animation = node.LogicalParent.UseAnimation(animationName);

                var degree = arrayCurve.MaxDegree;
                if (degree == 0)
                {
                    animation.CreateMorphChannel(node, arrayCurve.ToStepCurve(), node.MorphWeights.Count, false);
                }
                if (degree == 1)
                {
                    animation.CreateMorphChannel(node, arrayCurve.ToLinearCurve(), node.MorphWeights.Count, true);
                }
                if (degree == 3)
                {
                    animation.CreateMorphChannel(node, arrayCurve.ToSplineCurve(), node.MorphWeights.Count);
                }
            }

            if (sampler is Animations.IConvertibleCurve <ArraySegment <float> > segmentCurve)
            {
                var animation = node.LogicalParent.UseAnimation(animationName);

                var degree = segmentCurve.MaxDegree;
                if (degree == 0)
                {
                    animation.CreateMorphChannel(node, segmentCurve.ToStepCurve(), node.MorphWeights.Count, false);
                }
                if (degree == 1)
                {
                    animation.CreateMorphChannel(node, segmentCurve.ToLinearCurve(), node.MorphWeights.Count, true);
                }
                if (degree == 3)
                {
                    animation.CreateMorphChannel(node, segmentCurve.ToSplineCurve(), node.MorphWeights.Count);
                }
            }

            return(node);
        }