// Copyright (c) 2012-2023 Wojciech Figat. All rights reserved. using System; using FlaxEditor.Modules; using FlaxEditor.SceneGraph.Actors; using FlaxEngine; namespace FlaxEditor.Actions { /// /// Change keyframes undo action. /// /// /// [Serializable, HideInEditor] public class EditSplineAction : IUndoAction, ISceneEditAction { [Serialize] private Guid _splineId; [Serialize] private BezierCurve.Keyframe[] _before; [Serialize] private BezierCurve.Keyframe[] _after; /// /// Initializes a new instance of the class. /// /// The spline. /// The spline keyframes state before editing it. public EditSplineAction(Spline spline, BezierCurve.Keyframe[] before) { _splineId = spline.ID; _before = before; _after = (BezierCurve.Keyframe[])spline.SplineKeyframes.Clone(); } /// public string ActionString => "Edit spline keyframes"; /// public void Do() { var spline = FlaxEngine.Object.Find(ref _splineId); if (spline == null) return; spline.SplineKeyframes = _after; SplineNode.OnSplineEdited(spline); } /// public void Undo() { var spline = FlaxEngine.Object.Find(ref _splineId); if (spline == null) return; spline.SplineKeyframes = _before; SplineNode.OnSplineEdited(spline); } /// public void Dispose() { _before = _after = null; } /// public void MarkSceneEdited(SceneModule sceneModule) { var spline = FlaxEngine.Object.Find(ref _splineId); if (spline != null) sceneModule.MarkSceneEdited(spline.Scene); } } }