Ejemplo n.º 1
0
        /// <summary>
        /// Slices the collision collection.
        /// </summary>
        /// <param name="originalList">The original collision collection.</param>
        /// <returns>The sliced collection.</returns>
        public virtual ActiveCollisionsContainer.EventData Slice(ActiveCollisionsContainer.EventData originalList)
        {
            SlicedList.Clear();
            RemainingList.Clear();

            if (!isActiveAndEnabled)
            {
                return(SlicedList);
            }

            int collectionCount  = originalList.ActiveCollisions.Count;
            int actualStartIndex = GetStartIndex(StartIndex, collectionCount);
            int actualLength     = GetRangeLength(actualStartIndex, (int)Length, collectionCount);

            for (int index = actualStartIndex; index < actualStartIndex + actualLength; index++)
            {
                SlicedList.ActiveCollisions.Add(originalList.ActiveCollisions[index]);
            }

            Sliced?.Invoke(SlicedList);

            foreach (CollisionNotifier.EventData originalCollision in originalList.ActiveCollisions)
            {
                if (!SlicedList.ActiveCollisions.Contains(originalCollision))
                {
                    RemainingList.ActiveCollisions.Add(originalCollision);
                }
            }
            Remained?.Invoke(RemainingList);

            return(SlicedList);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Slices the collision collection.
        /// </summary>
        /// <param name="originalList">The original collision collection.</param>
        /// <returns>The sliced collection.</returns>
        public virtual ActiveCollisionsContainer.EventData Slice(ActiveCollisionsContainer.EventData originalList)
        {
            SlicedList.Clear();
            RemainingList.Clear();

            if (!isActiveAndEnabled)
            {
                return(SlicedList);
            }

            uint collectionCount  = (uint)originalList.activeCollisions.Count;
            uint actualStartIndex = GetStartIndex(startIndex, collectionCount);
            uint actualLength     = GetRangeLength(actualStartIndex, length, collectionCount);

            SlicedList.activeCollisions.AddRange(originalList.activeCollisions.GetRange((int)actualStartIndex, (int)actualLength));
            Sliced?.Invoke(SlicedList);

            RemainingList.activeCollisions.AddRange(originalList.activeCollisions.Except(SlicedList.activeCollisions));
            Remained?.Invoke(RemainingList);

            return(SlicedList);
        }