/// <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); }
/// <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); }