Example #1
0
        public Point2 CatmullInterpolate(List <Point2> Pts, float T)
        {
            if (Pts.Count == 2)
            {
                return(Pts[0].Lerp(Pts[1], T));
            }
            Catmull spline = new Catmull(Pts, this);

            if (spline.Count == 0)
            {
                return(new Point2());
            }
            spline.Sort();
            SplineFunction it = spline.LastOrDefault(sf => sf.T <= T);

            return(it.Eval(T));
        }
Example #2
0
        private static void ParseHitObjects(StringReader sr, ref Beatmap map)
        {
            List <HitCircle> circles  = new List <HitCircle>();
            List <Slider>    sliders  = new List <Slider>();
            List <Spinner>   spinners = new List <Spinner>();

            while (true)
            {
                string line = sr.ReadLine();

                if (string.IsNullOrWhiteSpace(line))
                {
                    map.HitCircles = circles;
                    map.Sliders    = sliders;
                    map.Spinners   = spinners;
                    return;
                }

                string[]  parts = line.Split(',');
                HitObject ho    = new HitObject()
                {
                    X          = int.Parse(parts[0]),
                    Y          = int.Parse(parts[1]),
                    Time       = int.Parse(parts[2]),
                    ObjectType = (HitObjectType)int.Parse(parts[3]),
                    Hitsound   = (HitSoundType)int.Parse(parts[4])
                };
                //ho.

                if ((ho.ObjectType & HitObjectType.Circle) != 0)
                {
                    circles.Add((HitCircle)ho);
                }
                else if ((ho.ObjectType & HitObjectType.Slider) != 0)
                {
                    Slider   slider    = (Slider)ho;
                    string[] pointData = parts[5].Split('|');

                    slider.CurveAnchors = new Vector2D[pointData.Length - 1];
                    for (int i = 1; i < pointData.Length; i++)
                    {
                        string[] point = pointData[i].Split(':');
                        slider.CurveAnchors[i - 1] = new Vector2D(double.Parse(point[0]), double.Parse(point[1]));
                    }

                    switch (pointData[0][0]) //Gets first character of first part of pointData, aka the character signalling the type of slider
                    {
                    case 'B':
                        slider.Type        = SliderType.Bezier;
                        slider.CurvePoints = Bezier.BezierCurveDistributed(slider.CurveAnchors, 500, 0.01);
                        break;

                    case 'P':
                        slider.Type        = SliderType.Perfect;
                        slider.CurvePoints = Perfect.CircularCurve(slider.CurveAnchors, 500);
                        break;

                    case 'L':
                        slider.Type        = SliderType.Linear;
                        slider.CurvePoints = Linear.LinearLine(slider.CurveAnchors, 500);
                        break;

                    case 'C':
                        slider.Type        = SliderType.Catmull;
                        slider.CurvePoints = Catmull.CatmullCurveDistributed(slider.CurveAnchors, 500, 0.01);
                        break;
                    }

                    slider.Repeat      = int.Parse(parts[6]);
                    slider.PixelLength = double.Parse(parts[7]);

                    slider.EdgeHitsounds = new List <HitSoundType>();
                    foreach (string str in parts[8].Split('|'))
                    {
                        slider.EdgeHitsounds.Add((HitSoundType)int.Parse(str));
                    }

                    slider.EdgeAdditions = new List <HitSoundSample>();
                    foreach (string sample in parts[9].Split('|'))
                    {
                        string[] sets = sample.Split(':');
                        slider.EdgeAdditions.Add(new HitSoundSample()
                        {
                            SampleSet   = (SampleSet)int.Parse(sets[0]),
                            AdditionSet = (SampleSet)int.Parse(sets[1])
                        });
                    }

                    sliders.Add(slider);
                }
                else if ((ho.ObjectType & HitObjectType.Spinner) != 0)
                {
                    Spinner s = (Spinner)ho;
                    s.EndTime = int.Parse(parts[5]);

                    spinners.Add(s);
                }
            }
        }