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);
        }
Example #2
0
        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);
        }