private static int Cleanup <T>(T audioRoot, Action <T, HashSet <MonoBehaviour> > traverse) where T : MonoBehaviour { if (audioRoot == null) { return(0); } HashSet <MonoBehaviour> objects = new HashSet <MonoBehaviour>(); var allNodes = audioRoot.GetComponents <MonoBehaviour>(); for (int i = 0; i < allNodes.Length; ++i) { objects.Add(allNodes[i]); } HashSet <MonoBehaviour> inUse = new HashSet <MonoBehaviour>(); traverse(audioRoot, inUse); int deleted = 0; //Delete all objects not in use foreach (MonoBehaviour node in objects) { if (!inUse.Contains(node)) { deleted += 1; InUndoHelper.PureDestroy(node); } } return(deleted); }
private static int Cleanup <T>(T audioRoot) where T : MonoBehaviour, InITreeNode <T> { if (audioRoot == null) { return(0); } HashSet <MonoBehaviour> objects = new HashSet <MonoBehaviour>(); var allNodes = audioRoot.GetComponents <MonoBehaviour>(); for (int i = 0; i < allNodes.Length; ++i) { objects.Add(allNodes[i]); } TreeWalker.ForEach(audioRoot, obj => { objects.Add(obj); obj.GetAuxData().ForEach(o => objects.Add(o)); }); int deleted = 0; //Delete all objects not in use foreach (MonoBehaviour node in objects) { if (!objects.Contains(node)) { deleted += 1; InUndoHelper.PureDestroy(node); } } return(deleted); }
private static int DeleteUnusedBanks(InAudioBankLink bankRoot) { #region Standard cleanup Action <InAudioBankLink, HashSet <MonoBehaviour> > bankAction = null; bankAction = (node, set) => { set.Add(node); for (int i = 0; i < node._children.Count; ++i) { bankAction(node._children[i], set); } }; int deleteCount = 0; HashSet <MonoBehaviour> objects = new HashSet <MonoBehaviour>(); if (bankRoot != null) { var allNodes = bankRoot.GetComponents <MonoBehaviour>(); for (int i = 0; i < allNodes.Length; ++i) { objects.Add(allNodes[i]); } HashSet <MonoBehaviour> inUse = new HashSet <MonoBehaviour>(); bankAction(bankRoot, inUse); List <string> toDelete = new List <string>(); //Delete all objects not in use foreach (InAudioBankLink node in objects) { if (!inUse.Contains(node)) { ++deleteCount; toDelete.Add(node._ID.ToString()); InUndoHelper.PureDestroy(node); } } } #endregion return(deleteCount); }