/// <summary> /// Set the motion for this spline. /// </summary> /// <param name="target">The object the motion should target. Must be non-null and a reference type.</param> /// <param name="duration">How long the motion should take, in seconds.</param> /// <param name="points">The points that the motion should spline between.</param> /// <returns>A reference to this, for specifying additional parameters.</returns> public Spliner Spline <TTarget, TPoint>(TTarget target, float duration, params TPoint[] points) where TTarget : class { if (target == null) { throw new ArgumentNullException(nameof(target)); } var targetType = target.GetType(); if (targetType.IsValueType) { throw new ArgumentException("Target may not be a struct"); } Target = target; Duration = duration; var path = new List <float[]>(); // float[] here is one object's properties var cross = new List <float[]>(); // float[] here is one property's value at each point GetDefinitions(target, points[0], out accessor, out var pointDef); buffer = new float[accessor.Length]; for (int i = 0; i < points.Length; i++) { path.Add(new float[pointDef.Length]); for (int j = 0; j < pointDef.Length; j++) { path[i][j] = pointDef[j].GetValue(points[i]); } } for (int i = 0; i < pointDef.Length; i++) { var splinePoints = new float[path.Count]; cross.Add(splinePoints); for (int j = 0; j < path.Count; j++) { splinePoints[j] = path[j][i]; } } Splines.Clear(); for (int i = 0; i < cross.Count; i++) { Splines.Add(new Spline(cross[i])); } return(this); }
/// <summary> /// Remove all splines from the group /// </summary> public override void Clear() { Splines.Clear(); SetDirtyAll(); }