/// <summary> /// Moves all of the Danmaku in the collection to a random 2D points within a specified rectangular area. /// </summary> /// <remarks> /// Positions are chosen randomly and independently for each Danmaku from a uniform distribution within a specified Rect. /// This function is not thread-safe: it can only be called from the Unity main thread as it utilizes Unity API calls. /// All contained null objects will be ignored. /// The Danmaku objects can be filtered with the <paramref name="filter"/> parameter. If it returns <c>true</c> for an Danmaku, then it is moved. /// If <paramref name="filter"/> is null, all Danmaku are moved. /// See: <see cref="Danmaku.Position"/> /// </remarks> /// <param name="danmakus">The enumerable collection of Danmaku. This function does nothing if it is null.</param> /// <param name="area">The rectangular area to move the contained Danmaku to.</param> /// <param name="filter">a function to filter whether or not to apply the action. Returns true if it should. Defaults to null.</param> public static IEnumerable<Danmaku> MoveTo(this IEnumerable<Danmaku> danmakus, Rect area, Func<Danmaku, bool> filter = null) { return danmakus.ForEach(x => x.Position = area.RandomPoint(), filter); }