// 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);
}
}
}