Пример #1
0
        public DrawableRpHoldObject(RpHoldObject h)
            : base(h)
        {
            Template = new SlideTemplate(HitObject)
            {
                Position = new Vector2(0, 0),
                Alpha    = 1
            };

            Children = new Drawable[]
            {
                Template,
                _rpDetectPress
            };

            //may not be so correct
            //Size = _rpDetectPress.DrawSize;
            Scale = new Vector2(HitObject.Scale);
        }
Пример #2
0
        /// <summary>
        ///     如果是RP專用譜面�E�就朁E��老E��個轉換器
        /// </summary>
        /// <param name="text"></param>
        /// <returns></returns>
        public override HitObject Parse(string text)
        {
            var split = text.Split(',');
            var type  = (RpBaseObjectType.ObjectType) int.Parse(split[3]);
            var combo = type.HasFlag(RpBaseObjectType.ObjectType.NewCombo);

            type &= (RpBaseObjectType.ObjectType) 0xF;
            type &= ~RpBaseObjectType.ObjectType.NewCombo;
            BaseRpHitableObject result;

            switch (type)
            {
            case RpBaseObjectType.ObjectType.Click:
                result = new RpHitObject();
                break;

            case RpBaseObjectType.ObjectType.LongTail:
                var s = new RpHoldObject();

                var    curveType   = RpBaseObjectType.CurveTypes.Catmull;
                var    repeatCount = 0;
                double length      = 0;
                var    points      = new List <Vector2>();

                points.Add(new Vector2(int.Parse(split[0]), int.Parse(split[1])));

                var pointsplit = split[5].Split('|');
                for (var i = 0; i < pointsplit.Length; i++)
                {
                    if (pointsplit[i].Length == 1)
                    {
                        switch (pointsplit[i])
                        {
                        case @"C":
                            curveType = RpBaseObjectType.CurveTypes.Catmull;
                            break;

                        case @"B":
                            curveType = RpBaseObjectType.CurveTypes.Bezier;
                            break;

                        case @"L":
                            curveType = RpBaseObjectType.CurveTypes.Linear;
                            break;

                        case @"P":
                            curveType = RpBaseObjectType.CurveTypes.PerfectCurve;
                            break;
                        }
                        continue;
                    }

                    var temp = pointsplit[i].Split(':');
                    var v    = new Vector2(
                        (int)System.Convert.ToDouble(temp[0], CultureInfo.InvariantCulture),
                        (int)System.Convert.ToDouble(temp[1], CultureInfo.InvariantCulture)
                        );
                    points.Add(v);
                }

                repeatCount = System.Convert.ToInt32(split[6], CultureInfo.InvariantCulture);

                if (repeatCount > 9000)
                {
                    throw new ArgumentOutOfRangeException("wacky man");
                }

                if (split.Length > 7)
                {
                    length = System.Convert.ToDouble(split[7], CultureInfo.InvariantCulture);
                }

                //s.RepeatCount = repeatCount;

                //建立裡面皁E��有座樁E
                s.Curve = new SliderCurve
                {
                    ControlPoints = points,
                    Length        = length,
                    CurveType     = curveType
                };

                s.Curve.Calculate();

                result = s;
                break;

            case RpBaseObjectType.ObjectType.ContainerPress:
                result = new RpContainerLineHoldObject();
                break;

            default:
                //throw new InvalidOperationException($@"Unknown hit object type {type}");
                return(null);
            }
            result.Position  = new Vector2(int.Parse(split[0]), int.Parse(split[1]));
            result.StartTime = double.Parse(split[2]);
            result.Samples.Add(
                new SampleInfo
            {
                Bank = "whistle",
                Name = "soft"
            }
                );
            //result.NewCombo = combo;
            // TODO: "addition" field
            return(result);
        }
Пример #3
0
 public DrawableRpHoldObject(RpHoldObject h)
     : base(h)
 {
 }