public void Add(IAction action)
{
if(action.GetType() == typeof(SelectionAction) && firstSelectionAction == null)
firstSelectionAction = (SelectionAction)action;
else if (action.GetType() == typeof(BiomeAction) && firstBiomeAction == null)
firstBiomeAction = (BiomeAction)action;
else if (action.GetType() == typeof(PopulateAction) && firstPopulateAction == null)
firstPopulateAction = (PopulateAction)action;
//ensure the first action of each type isn't lost when the redo stack is emptied
if(firstSelectionAction != null && action != firstSelectionAction && redoStack.Contains(firstSelectionAction))
{
redoStack.Remove(firstSelectionAction);
undoStack.AddLast(firstSelectionAction);
}
if (firstBiomeAction != null && action != firstBiomeAction && redoStack.Contains(firstBiomeAction))
{
redoStack.Remove(firstBiomeAction);
undoStack.AddLast(firstBiomeAction);
}
if (firstPopulateAction != null && action != firstPopulateAction && redoStack.Contains(firstPopulateAction))
{
redoStack.Remove(firstPopulateAction);
undoStack.AddLast(firstPopulateAction);
}
action.PreviousAction = GetPreviousAction(undoStack.Last, action.GetType());
undoStack.AddLast(action);
foreach (IAction a in redoStack)
a.Dispose();
redoStack.Clear();
}