public List <CatchHitObject> LoadBeatmap(Beatmap beatmap) { var mapObjects = beatmap.hitObjects; var objects = new List <CatchHitObject>(); foreach (var mapSliderObject in mapObjects.OfType <Slider>()) { var objectExtras = new List <CatchHitObject>(); var objectCode = mapSliderObject.code.Split(','); var sliderObject = new CatchHitObject(objectCode, beatmap, CatchType.CIRCLE); // Slider ticks objectExtras.AddRange(CreateObjectExtra(beatmap, mapSliderObject, mapSliderObject.sliderTickTimes, objectCode, CatchType.DROPLET)); // Slider repeats and tail objectExtras.AddRange(CreateObjectExtra(beatmap, mapSliderObject, GetEdgeTimes(mapSliderObject), objectCode, CatchType.CIRCLE)); objectExtras.Sort((h1, h2) => h1.time.CompareTo(h2.time)); sliderObject.Extras = objectExtras; objects.Add(sliderObject); } objects.AddRange( from mapObject in mapObjects where mapObject is Circle select new CatchHitObject(mapObject.code.Split(','), beatmap, CatchType.CIRCLE) ); objects.Sort((h1, h2) => h1.time.CompareTo(h2.time)); return(objects); }
public void LoadOrigins(List <CatchHitObject> mapObjects) { CatchHitObject lastObject = null; // Set object origin before we return everything foreach (var currentObject in mapObjects) { if (lastObject == null) { lastObject = currentObject; continue; } currentObject.Origin = lastObject; lastObject = currentObject; foreach (var extraHitObject in currentObject.Extras) { extraHitObject.Origin = lastObject; lastObject = extraHitObject; } } }