// Copyright (c) Wojciech Figat. All rights reserved. using System; using FlaxEngine; namespace FlaxEditor.Tools.Foliage.Undo { /// /// The foliage instance edit action. /// /// [Serializable] sealed class EditInstanceAction : IUndoAction { [Serialize] private readonly Guid _foliageId; [Serialize] private int _index; [Serialize] private Transform _before; [Serialize] private Transform _after; /// /// Initializes a new instance of the class. /// /// The foliage. /// The instance index. public EditInstanceAction(FlaxEngine.Foliage foliage, int index) { _foliageId = foliage.ID; _index = index; _before = foliage.GetInstance(_index).Transform; } /// /// Called when foliage editing ends. Records the `after` state of the instance. Marks foliage actor parent scene edited. /// public void RecordEnd() { var foliageId = _foliageId; var foliage = FlaxEngine.Object.Find(ref foliageId); _after = foliage.GetInstance(_index).Transform; Editor.Instance.Scene.MarkSceneEdited(foliage.Scene); } /// public string ActionString => "Edit foliage instance"; /// public void Do() { var foliageId = _foliageId; var foliage = FlaxEngine.Object.Find(ref foliageId); foliage.SetInstanceTransform(_index, _after); foliage.RebuildClusters(); Editor.Instance.Scene.MarkSceneEdited(foliage.Scene); } /// public void Undo() { var foliageId = _foliageId; var foliage = FlaxEngine.Object.Find(ref foliageId); foliage.SetInstanceTransform(_index, _before); foliage.RebuildClusters(); Editor.Instance.Scene.MarkSceneEdited(foliage.Scene); } /// public void Dispose() { } } }