/// <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); }
/// <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); }
/// <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); }
///<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); }