/// <summary> /// Replaces hit objects and timing points with the values in the editor reader /// </summary> /// <param name="beatmap">Beatmap to replace values in</param> /// <param name="reader">Reader that contains the values from memory</param> /// <returns>A list of selected hit objects which originate from the beatmap.</returns> public static List <HitObject> UpdateBeatmap(Beatmap beatmap, EditorReader reader) { beatmap.SetBookmarks(reader.bookmarks.Select <int, double>(o => o).ToList()); beatmap.BeatmapTiming.TimingPoints = reader.controlPoints.Select(o => (TimingPoint)o).ToList(); List <HitObject> selected = new List <HitObject>(); beatmap.HitObjects = reader.hitObjects.Select(o => { var nho = (HitObject)o; if (o.IsSelected) { selected.Add(nho); } return(nho); }).ToList(); beatmap.General["PreviewTime"] = new TValue(reader.PreviewTime.ToString(CultureInfo.InvariantCulture)); beatmap.Difficulty["SliderMultiplier"] = new TValue(reader.SliderMultiplier.ToString(CultureInfo.InvariantCulture)); beatmap.Difficulty["SliderTickRate"] = new TValue(reader.SliderTickRate.ToString(CultureInfo.InvariantCulture)); // Update all the other stuff based on these values beatmap.BeatmapTiming.SliderMultiplier = reader.SliderMultiplier; // Sort the stuff beatmap.HitObjects = beatmap.HitObjects.OrderBy(o => o.Time).ToList(); beatmap.BeatmapTiming.Sort(); beatmap.CalculateHitObjectComboStuff(); beatmap.CalculateSliderEndTimes(); beatmap.GiveObjectsGreenlines(); return(selected); }