| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 | using System;using System.Collections;using System.Collections.Generic;namespace LitMotion{    /// <summary>    /// A class that manages multiple motion handles at once.    /// </summary>    public sealed class CompositeMotionHandle : ICollection<MotionHandle>, IEnumerable<MotionHandle>    {        public CompositeMotionHandle()        {            handleList = new();        }        public CompositeMotionHandle(int capacity)        {            if (capacity < 0)            {                throw new ArgumentOutOfRangeException("capacity");            }                        handleList = new(capacity);        }        /// <summary>        /// Cancel all Motion handles and clear list.        /// </summary>        public void Cancel()        {            for (int i = 0; i < handleList.Count; i++)            {                var handle = handleList[i];                if (handle.IsActive()) handle.Cancel();            }            handleList.Clear();        }        /// <summary>        /// Complete all motion handles and clear list.        /// </summary>        public void Complete()        {            for (int i = 0; i < handleList.Count; i++)            {                var handle = handleList[i];                if (handle.IsActive()) handle.Complete();            }            handleList.Clear();        }        /// <summary>        /// Add motion handle.        /// </summary>        /// <param name="handle">Motion handle</param>        public void Add(MotionHandle handle)        {            handleList.Add(handle);        }        public List<MotionHandle>.Enumerator GetEnumerator()        {            return handleList.GetEnumerator();        }        IEnumerator<MotionHandle> IEnumerable<MotionHandle>.GetEnumerator()        {            return handleList.GetEnumerator();        }        IEnumerator IEnumerable.GetEnumerator()        {            return handleList.GetEnumerator();        }        public void Clear()        {            handleList.Clear();        }        public bool Contains(MotionHandle item)        {            return handleList.Contains(item);        }        public void CopyTo(MotionHandle[] array, int arrayIndex)        {            handleList.CopyTo(array, arrayIndex);        }        public bool Remove(MotionHandle item)        {            return handleList.Remove(item);        }        public int Count => handleList.Count;        public bool IsReadOnly => false;        readonly List<MotionHandle> handleList;    }}
 |