Beispiel #1
0
        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();
            }
        }