private bool DoAction(TrackWriter track, GameLine beforeact, GameLine afteract) { if (beforeact == null && afteract == null) { throw new ArgumentNullException( "undo action with no values"); } // remove line if (afteract == null) { track.RemoveLine(beforeact); } // add line else if (beforeact == null) { track.AddLine(afteract.Clone()); } // Replace line else if (beforeact.Type != afteract.Type) { track.RemoveLine(beforeact); track.AddLine(afteract); } //move action else { track.ReplaceLine(beforeact, afteract.Clone()); } return(!(beforeact is SceneryLine)); }
public void Redo(TrackWriter track) { bool physchanged = false; for (int i = 0; i < States.Count - 1; i += 2) { physchanged |= DoAction(track, States[i], States[i + 1]); } if (physchanged) { track.NotifyTrackChanged(); } }
public TrackWriter CreateTrackWriter() { return(TrackWriter.AcquireWrite(_tracksync, _track, _renderer, UndoManager, Timeline, _cells)); }