예제 #1
0
        /// <inheritdoc/>

        public override IHitObject CreateHitObject(string data)
        {
            IHitObject hitobject = null;
            var        d         = data.Split(',');
            var        types     = new HitObjectTypesConverter().Convert(int.Parse(d[3]), out var maybeType);

            if (maybeType == HitObjectTypes.HitCircle || types.Contains(HitObjectTypes.HitCircle))
            {
                hitobject = new HitCircle();
            }
            if (maybeType == HitObjectTypes.Slider || types.Contains(HitObjectTypes.Slider))
            {
                hitobject = new Slider();
            }
            if (maybeType == HitObjectTypes.Spinner || types.Contains(HitObjectTypes.Spinner))
            {
                hitobject = new Spinner();
            }
            var type = maybeType;

            if (hitobject == null)
            {
                throw new IncorrectHitObjectException(this, type ?? types[0]);
            }
            hitobject.Parse(data);
            return(hitobject);
        }
예제 #2
0
 /// <summary>
 /// 获取一个打击物件的结束时间,没有结束时间的取开始时间
 /// </summary>
 /// <param name="hitObject"></param>
 /// <returns></returns>
 public static double GetEndTime(this IHitObject hitObject)
 {
     if (hitObject is null)
     {
         return(0);
     }
     if (hitObject is IHasEndHitObject hasEnd)
     {
         return(hasEnd.EndTime);
     }
     return(hitObject.Offset);
 }
예제 #3
0
        /// <inheritdoc/>
        public override IHitObject CreateHitObject(string data, int maniaColumn)
        {
            var        d         = data.Split(',');
            var        types     = new HitObjectTypesConverter().Convert(int.Parse(d[3]), out var maybeType);
            IHitObject hitobject = null;

            if (maybeType == HitObjectTypes.HitCircle || types.Contains(HitObjectTypes.HitCircle))
            {
                hitobject = new ManiaHit();
            }
            if (maybeType == HitObjectTypes.ManiaHold || types.Contains(HitObjectTypes.ManiaHold))
            {
                hitobject = new ManiaHold();
            }
            if (hitobject == null)
            {
                throw new IncorrectHitObjectException(this, types[0]);
            }
            ((IManiaHitObject)hitobject).BeatmapColumn = maniaColumn;
            hitobject.Parse(data);
            return(hitobject);
        }
예제 #4
0
        ///<inheritdoc/>
        public override IHitObject CreateHitObject(string data)
        {
            IHitObject hitobject = null;
            var        d         = data.Split(',');
            var        types     = new HitObjectTypesConverter().Convert(int.Parse(d[3]), out var maybeBestVal);
            var        hitSounds = new HitSoundsConverter().Convert(int.Parse(d[4]), out _);

            if (types.Contains(HitObjectTypes.Slider) || types.Contains(HitObjectTypes.Spinner))
            {
                hitobject = new DrumRoll();
            }
            if (maybeBestVal == HitObjectTypes.HitCircle)
            {
                //根据音效选择红色
                //有Finish音效则是双打
                if (hitSounds.Contains(HitSounds.Finish))
                {
                    hitobject = new LargeTaikoRedHit();
                }
                if (hitSounds.Contains(HitSounds.Normal))
                {
                    if (hitSounds.Contains(HitSounds.Finish))
                    {
                        //有Finish音效则是双打
                        hitobject = new LargeTaikoRedHit();
                    }
                    //否则是单打
                    else
                    {
                        hitobject = new TaikoRedHit();
                    }
                }
                //根据音效选择蓝色
                if (hitSounds.Contains(HitSounds.Whistle) || hitSounds.Contains(HitSounds.Clap))
                {
                    if (hitSounds.Contains(HitSounds.Finish))
                    {
                        //有Finish音效则是双打
                        hitobject = new LargeTaikoBlueHit();
                    }
                    else
                    {
                        //否则是单打
                        hitobject = new TaikoBlueHit();
                    }
                }
            }

            if (hitobject == null)
            {
                var builder = new StringBuilder("HitObject类型:");
                for (var i = 0; i < types.Count; i++)
                {
                    builder.Append(types[i]);
                    if (i != types.Count - 1)
                    {
                        builder.Append(", ");
                    }
                }

                builder.Append("  HitSounds:");
                for (var i = 0; i < hitSounds.Count; i++)
                {
                    builder.Append(hitSounds[i]);
                    if (i != hitSounds.Count - 1)
                    {
                        builder.Append(", ");
                    }
                }

                throw new IncorrectHitObjectException(this, types[0], builder.ToString());
            }

            hitobject.Parse(data);
            return(hitobject);
        }