// Copyright (c) 2012-2022 Wojciech Figat. All rights reserved.
using System;
using FlaxEngine;
namespace FlaxEditor.Surface.Undo
{
///
/// Move Visject Surface nodes undo action.
///
///
class MoveNodesAction : IUndoAction
{
private VisjectSurface _surface;
private ContextHandle _context;
private uint[] _nodeIds;
private readonly Float2 _locationDelta;
public MoveNodesAction(VisjectSurfaceContext context, uint[] nodeIds, Float2 locationDelta)
{
_surface = context.Surface;
_context = new ContextHandle(context);
_nodeIds = nodeIds;
_locationDelta = locationDelta;
}
///
public string ActionString => "Move nodes";
///
public void Do()
{
Apply(_locationDelta);
}
///
public void Undo()
{
Apply(-_locationDelta);
}
private void Apply(Float2 delta)
{
var context = _context.Get(_surface);
foreach (var nodeId in _nodeIds)
{
var node = context.FindNode(nodeId);
if (node == null)
throw new Exception("Missing node.");
node.Location += delta;
}
context.MarkAsModified(false);
}
///
public void Dispose()
{
_surface = null;
_nodeIds = null;
}
}
}