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); }
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); }
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); }