private List <SheetmusicInfo> importToStorage(FileReader reader) { List <SheetmusicInfo> sheetmusicInfos = new List <SheetmusicInfo>(); var sheetNames = reader.Filenames.Where(f => f.EndsWith(".sm")); foreach (string name in sheetNames) { using (var raw = reader.GetStream(name)) using (var ms = new MemoryStream()) //we need a memory stream so we can seek and shit using (var sr = new StreamReader(ms)) { copyTo(raw, ms); ms.Position = 0; var decoder = SheetmusicDecoder.GetDecoder(sr); Sheetmusic sheetmusic = decoder.Decode(sr); sheetmusic.SheetmusicInfo.Path = name; RulesetInfo rulesetInfo = rulesets.Where(r => r.RulesetInfo.ID == sheetmusic.SheetmusicInfo.RulesetID) .FirstOrDefault().RulesetInfo; sheetmusic.SheetmusicInfo.RulesetInfo = rulesetInfo; sheetmusicInfos.Add(sheetmusic.SheetmusicInfo); } } return(sheetmusicInfos); }
protected virtual Sheetmusic <T> ConvertSheetmusic(Sheetmusic original) { return(new Sheetmusic <T> { SheetmusicInfo = original.SheetmusicInfo, ControlPointInfo = original.ControlPointInfo, HitObjects = original.HitObjects.SelectMany(h => convert(h, original)).ToList() }); }
public Sheetmusic(Sheetmusic <T> original = null) { if (original != null) { SheetmusicInfo = original.SheetmusicInfo.DeepClone(); ControlPointInfo = original.ControlPointInfo; SheetmusicMetadata = original.SheetmusicMetadata; HitObjects = original.HitObjects; } }
private IEnumerable <T> convert(HitObject original, Sheetmusic sheetmusic) { // Check if the hitobject is already the converted type T tObject = original as T; if (tObject != null) { yield return(tObject); yield break; } // Convert the hit object foreach (var obj in ConvertHitObject(original, sheetmusic)) { if (obj == null) { continue; } yield return(obj); } }
public virtual void PostProcess(Sheetmusic <T> sheetmusic) { }
protected abstract IEnumerable <T> ConvertHitObject(HitObject original, Sheetmusic sheetmusic);
public Sheetmusic <T> Convert(Sheetmusic original) { // We always operate on a clone of the original beatmap, to not modify it game-wide return(ConvertSheetmusic(new Sheetmusic(original))); }