public void DeleteTargetActors() { VoosActor builtin = targetActors.FirstOrDefault(a => a.IsBuiltinActor()); if (builtin != null) { popups.Show($"Sorry, built-in actors such as {builtin.GetDisplayName()} cannot be deleted.", "OK"); } var deletableActors = targetActors.Where(a => a != null && !a.IsLockedByAnother() && !a.IsBuiltinActor()).ToList(); if (deletableActors.Count == 0) { return; } var actorStates = engine.SaveActorHierarchy(deletableActors); var label = deletableActors.Count > 1 ? $"Delete {deletableActors.Count} actors" : $"Delete {deletableActors[0].GetDisplayName()}"; undoStack.Push(new UndoStack.Item { actionLabel = label, getUnableToDoReason = () => null, getUnableToUndoReason = () => null, doIt = () => { foreach (var state in actorStates) { ActorUndoUtil.GetValidActorThen( engine, state.name, validActor => this.DeleteActor(validActor)); } }, undo = () => engine.RestoreActorHierarchy(actorStates) }); SetCameraFollowingActor(false); }