public void BuildFromKeyframes(List <SplineKeyframe> keyframes) { var keyframeDifference = SplineSolver == null; if (SplineSolver != null) { keyframeDifference = keyframes.Count() != Nodes.Count(); if (!(SplineSolver is LinearSplineSolver) && SplineSolver.Nodes.Count == 2) { keyframeDifference = true; } else if (!(SplineSolver is QuadraticSplineSolver) && SplineSolver.Nodes.Count == 3) { keyframeDifference = true; } else if (!(SplineSolver is QuadraticSplineSolver) && SplineSolver.Nodes.Count == 4) { keyframeDifference = true; } else if (!(SplineSolver is CatmullRomSplineSolver)) { keyframeDifference = true; } } if (keyframeDifference) { if (SplineSolver != null) { Object.DestroyImmediate(SplineSolver); } if (keyframes.Count == 2) { SplineSolver = ScriptableObject.CreateInstance <LinearSplineSolver>(); } else if (keyframes.Count == 3) { SplineSolver = ScriptableObject.CreateInstance <QuadraticSplineSolver>(); } else if (keyframes.Count == 4) { SplineSolver = ScriptableObject.CreateInstance <CubicBezierSplineSolver>(); } else { SplineSolver = ScriptableObject.CreateInstance <CatmullRomSplineSolver>(); } } SplineSolver.Nodes = keyframes; SplineSolver.Build(); }
public void BuildFromKeyframes(List <JSplineKeyframe> keyframes) { bool keyframeDifference = SplineSolver == null; if (SplineSolver != null) { keyframeDifference = keyframes.Count() != Nodes.Count(); if (SplineType != SplineSolver.SplineType()) { keyframeDifference = true; } } if (keyframeDifference) { if (SplineSolver != null) { ScriptableObject.DestroyImmediate(SplineSolver); } if (SplineType == JSplineType.Liner) { if (keyframes.Count >= 2) { SplineSolver = ScriptableObject.CreateInstance <JLinearSplineSolver>(); } else { throw new SystemException("Need At Least 2 Points"); } } else if (SplineType == JSplineType.Hermite) { if (keyframes.Count >= 2) { SplineSolver = ScriptableObject.CreateInstance <JHermiteSplineSolver>(); } else { throw new SystemException("Need At Least 2 Points"); } } else if (SplineType == JSplineType.Bezier) { if (keyframes.Count >= 2) { SplineSolver = ScriptableObject.CreateInstance <JNTimesBezierSplineSolver>(); } else { throw new SystemException("Need At Least 2 Points"); } } else if (SplineType == JSplineType.CatmullRom) { if (keyframes.Count >= 4) { SplineSolver = ScriptableObject.CreateInstance <JCatmullRomSplineSolver>(); } else { throw new SystemException("Need At Least 4 Points"); } } else if (SplineType == JSplineType.CubicSpline) { if (keyframes.Count >= 2) { SplineSolver = ScriptableObject.CreateInstance <JNaturalCubicSplineSolver>(); } else { throw new SystemException("Need At Least 2 Points"); } } } if (SplineSolver != null) { SplineSolver.Nodes = keyframes; SplineSolver.closedCurve = IsClosed; SplineSolver.Build(); } }