public void RemoveFrames(ICollection <int> frames) { if (frames.Any()) { var invalidateAfter = frames.Min(); bool endBatch = ChangeLog.BeginNewBatch("Remove Multiple Frames", true); ChangeLog.AddGeneralUndo(invalidateAfter, InputLogLength - 1); foreach (var frame in frames.OrderByDescending(f => f)) // Removing them in reverse order allows us to remove by index; { if (frame < Log.Count) { Log.RemoveAt(frame); } if (BindMarkersToInput) // TODO: This is slow, is there a better way to do it? { bool wasRecording = ChangeLog.IsRecording; ChangeLog.IsRecording = false; int firstIndex = Markers.FindIndex(m => m.Frame >= frame); if (firstIndex != -1) { for (int i = firstIndex; i < Markers.Count; i++) { TasMovieMarker m = Markers[i]; if (m.Frame == frame) { Markers.Remove(m); } else { Markers.Move(m.Frame, m.Frame - 1); } } } ChangeLog.IsRecording = wasRecording; } } Changes = true; InvalidateAfter(invalidateAfter); ChangeLog.SetGeneralRedo(); if (endBatch) { ChangeLog.EndBatch(); } } }
public MovieActionMarker(TasMovieMarker marker, int oldPosition = -1, string oldMessage = "") { FirstFrame = oldPosition; if (marker == null) { LastFrame = -1; _oldMessage = oldMessage; } else { LastFrame = marker.Frame; _oldMessage = oldMessage == "" ? marker.Message : oldMessage; _newMessage = marker.Message; } }
public void AddMarkerChange(TasMovieMarker newMarker, int oldPosition = -1, string oldMessage = "", string name = "", bool force = false) { if (IsRecording || force) { if (oldPosition == -1) { name = $"Set Marker at frame {newMarker.Frame}"; } else { name = $"Remove Marker at frame {oldPosition}"; } AddMovieAction(name); _history.Last().Add(new MovieActionMarker(newMarker, oldPosition, oldMessage)); } }
public void InsertEmptyFrame(int frame, int count = 1) { bool endBatch = ChangeLog.BeginNewBatch("Insert Empty Frame: " + frame, true); ChangeLog.AddGeneralUndo(frame, InputLogLength + count - 1); var lg = LogGeneratorInstance(); lg.SetSource(Global.MovieSession.MovieControllerInstance()); for (int i = 0; i < count; i++) { _log.Insert(frame, lg.EmptyEntry); } if (BindMarkersToInput) { bool wasRecording = ChangeLog.IsRecording; ChangeLog.IsRecording = false; int firstIndex = Markers.FindIndex(m => m.Frame >= frame); if (firstIndex != -1) { for (int i = firstIndex; i < Markers.Count; i++) { TasMovieMarker m = Markers.ElementAt(i); Markers.Move(m.Frame, m.Frame + count); } } ChangeLog.IsRecording = wasRecording; } Changes = true; InvalidateAfter(frame - 1); ChangeLog.SetGeneralRedo(); if (endBatch) { ChangeLog.EndBatch(); } if (Global.Emulator.Frame < _log.Count) // Don't stay in recording mode? Fixes TAStudio recording after paint inserting. { this.SwitchToPlay(); } }
public void InsertEmptyFrame(int frame, int count = 1, bool fromHistory = false) { bool endBatch = ChangeLog.BeginNewBatch($"Insert Empty Frame: {frame}", true); ChangeLog.AddGeneralUndo(frame, InputLogLength + count - 1); var lg = LogGeneratorInstance(); lg.SetSource(Global.MovieSession.MovieControllerInstance()); if (frame > Log.Count()) { frame = Log.Count(); } for (int i = 0; i < count; i++) { Log.Insert(frame, lg.EmptyEntry); } if (BindMarkersToInput) { bool wasRecording = ChangeLog.IsRecording; ChangeLog.IsRecording = false; int firstIndex = Markers.FindIndex(m => m.Frame >= frame); if (firstIndex != -1) { for (int i = firstIndex; i < Markers.Count; i++) { TasMovieMarker m = Markers[i]; Markers.Move(m.Frame, m.Frame + count, fromHistory); } } ChangeLog.IsRecording = wasRecording; } Changes = true; InvalidateAfter(frame); ChangeLog.SetGeneralRedo(); if (endBatch) { ChangeLog.EndBatch(); } }
public void RemoveFrames(int removeStart, int removeUpTo, bool fromHistory = false) { bool endBatch = ChangeLog.BeginNewBatch("Remove Frames: " + removeStart + "-" + removeUpTo, true); ChangeLog.AddGeneralUndo(removeStart, InputLogLength - 1); for (int i = removeUpTo - 1; i >= removeStart; i--) { Log.RemoveAt(i); } if (BindMarkersToInput) { bool wasRecording = ChangeLog.IsRecording; ChangeLog.IsRecording = false; int firstIndex = Markers.FindIndex(m => m.Frame >= removeStart); if (firstIndex != -1) { for (int i = firstIndex; i < Markers.Count; i++) { TasMovieMarker m = Markers.ElementAt(i); if (m.Frame < removeUpTo) { Markers.Remove(m); } else { Markers.Move(m.Frame, m.Frame - (removeUpTo - removeStart), fromHistory); } } } ChangeLog.IsRecording = wasRecording; } Changes = true; InvalidateAfter(removeStart); ChangeLog.SetGeneralRedo(); if (endBatch) { ChangeLog.EndBatch(); } }
public void RemoveFrame(int frame) { bool endBatch = ChangeLog.BeginNewBatch("Remove Frame: " + frame, true); ChangeLog.AddGeneralUndo(frame, InputLogLength - 1); Log.RemoveAt(frame); if (BindMarkersToInput) { bool wasRecording = ChangeLog.IsRecording; ChangeLog.IsRecording = false; int firstIndex = Markers.FindIndex(m => m.Frame >= frame); if (firstIndex != -1) { for (int i = firstIndex; i < Markers.Count; i++) { TasMovieMarker m = Markers.ElementAt(i); if (m.Frame == frame) { Markers.Remove(m); } else { Markers.Move(m.Frame, m.Frame - 1); } } } ChangeLog.IsRecording = wasRecording; } Changes = true; InvalidateAfter(frame); ChangeLog.SetGeneralRedo(); if (endBatch) { ChangeLog.EndBatch(); } }