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