// Copyright (c) 2007-2017 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using OpenTK; using osu.Game.Beatmaps; using osu.Game.Rulesets.Objects; using osu.Game.Rulesets.Osu.Objects; using System.Collections.Generic; using osu.Game.Rulesets.Objects.Types; using System; using osu.Game.Rulesets.Osu.UI; using osu.Game.Rulesets.Beatmaps; namespace osu.Game.Rulesets.Osu.Beatmaps { internal class OsuBeatmapConverter : BeatmapConverter { protected override IEnumerable ValidConversionTypes { get; } = new[] { typeof(IHasPosition) }; protected override IEnumerable ConvertHitObject(HitObject original, Beatmap beatmap) { var curveData = original as IHasCurve; var endTimeData = original as IHasEndTime; var positionData = original as IHasPosition; var comboData = original as IHasCombo; if (curveData != null) { yield return new Slider { StartTime = original.StartTime, Samples = original.Samples, ControlPoints = curveData.ControlPoints, CurveType = curveData.CurveType, Distance = curveData.Distance, RepeatSamples = curveData.RepeatSamples, RepeatCount = curveData.RepeatCount, Position = positionData?.Position ?? Vector2.Zero, NewCombo = comboData?.NewCombo ?? false }; } else if (endTimeData != null) { yield return new Spinner { StartTime = original.StartTime, Samples = original.Samples, EndTime = endTimeData.EndTime, Position = positionData?.Position ?? OsuPlayfield.BASE_SIZE / 2, }; } else { yield return new HitCircle { StartTime = original.StartTime, Samples = original.Samples, Position = positionData?.Position ?? Vector2.Zero, NewCombo = comboData?.NewCombo ?? false }; } } } }