private void StartDragTimelineTargetAction(TargetIcon icon) { isDraggingNotesOnTimeline = true; startTimelineMoveTime = icon.data.beatTime; timelineTargetMoveIntents = new List <TargetTimelineMoveIntent>(); timeline.selectedNotes.ForEach(target => { var intent = new TargetTimelineMoveIntent(); intent.target = target.data; intent.startTime = target.data.beatTime; timelineTargetMoveIntents.Add(intent); }); }
public void MoveTarget(TargetData data, QNT_Timestamp newTime) { TargetTimelineMoveIntent intent = new TargetTimelineMoveIntent(); intent.targetData = data; intent.startTick = data.time; intent.intendedTick = newTime; List <TargetTimelineMoveIntent> list = new List <TargetTimelineMoveIntent>(); list.Add(intent); timeline.MoveTimelineTargets(list); }
public override void UndoAction(Timeline timeline) { List <Target> targets = targetTimelineMoveIntents.Select(intent => timeline.FindNote(intent.target)).ToList(); for (int i = 0; i < targetTimelineMoveIntents.Count; ++i) { TargetTimelineMoveIntent intent = targetTimelineMoveIntents[i]; Target target = targets[i]; target.data.beatTime = intent.startTime; intent.target.beatTime = intent.startTime; } timeline.SortOrderedList(); }
public override void DoAction(Timeline timeline) { if (moveAction == null) { bool first = true; ulong firstTick = 0, lastTick = 0; //Find the first and last note in the sequence foreach (TargetData data in affectedTargets) { if (first) { firstTick = data.time.tick; lastTick = data.time.tick; first = false; } else if (data.time.tick > lastTick) { lastTick = data.time.tick; } else if (data.time.tick < firstTick) { firstTick = data.time.tick; } } List <TargetTimelineMoveIntent> intents = new List <TargetTimelineMoveIntent>(); foreach (TargetData data in affectedTargets) { ulong amt = data.time.tick - firstTick; TargetTimelineMoveIntent intent = new TargetTimelineMoveIntent(); intent.targetData = data; intent.startTick = data.time; intent.intendedTick = new QNT_Timestamp(lastTick - amt); intents.Add(intent); } moveAction = timeline.GenerateMoveTimelineAction(intents); } moveAction.DoAction(timeline); }