public LineLayer() { InitializeComponent(); NoteRelations = new NoteRelationCollection(); }
private static void ProcessNoteRelations(Note root, IDictionary <int, bool> noteProcessed, IDictionary <int, ScoreNote> map, NoteRelationCollection relations) { var waitingList = new Queue <Note>(); waitingList.Enqueue(root); while (waitingList.Count > 0) { var note = waitingList.Dequeue(); if (noteProcessed[note.ID]) { continue; } noteProcessed[note.ID] = true; if (note.HasPrevSync) { if (!relations.ContainsPair(map[note.ID], map[note.PrevSyncTarget.ID])) { relations.Add(map[note.ID], map[note.PrevSyncTarget.ID], NoteRelation.Sync); waitingList.Enqueue(note.PrevSyncTarget); } } if (note.HasNextSync) { if (!relations.ContainsPair(map[note.ID], map[note.NextSyncTarget.ID])) { relations.Add(map[note.ID], map[note.NextSyncTarget.ID], NoteRelation.Sync); waitingList.Enqueue(note.NextSyncTarget); } } if (note.HasNextFlickOrSlide) { if (!relations.ContainsPair(map[note.ID], map[note.NextFlickOrSlideNote.ID])) { relations.Add(map[note.ID], map[note.NextFlickOrSlideNote.ID], NoteRelation.FlickOrSlide); waitingList.Enqueue(note.NextFlickOrSlideNote); } } if (note.HasPrevFlickOrSlide) { if (!relations.ContainsPair(map[note.ID], map[note.PrevFlickOrSlideNote.ID])) { relations.Add(map[note.ID], map[note.PrevFlickOrSlideNote.ID], NoteRelation.FlickOrSlide); waitingList.Enqueue(note.PrevFlickOrSlideNote); } } if (note.IsHoldStart) { if (!relations.ContainsPair(map[note.ID], map[note.HoldTarget.ID])) { relations.Add(map[note.ID], map[note.HoldTarget.ID], NoteRelation.Hold); waitingList.Enqueue(note.HoldTarget); } } } }