Beispiel #1
0
 /// <summary>
 /// Find the closest Node to a specified point in this region.
 /// </summary>
 /// <param name="position">Point to find.</param>
 /// <param name="maxDistance">Max distance to the point.</param>
 /// <returns>Node if found. Null otherwise.</returns>
 public Node Find(Vector2 position, float maxDistance = float.MaxValue)
 {
     /* For performance reasons, we use a square, not a circle, to compute the distance.
      * Ex :
      *
      *         *  *
      *      *        *
      *     *          *
      *     *          *
      *      *        *
      *         *  *
      *
      * VS
      *
      *     +----------+
      *     |          |
      *     |          |
      *     |          |
      *     |          |
      *     +----------+
      */
     return(reusableNodeList.Use(candidates =>
     {
         FindAllCandidatesNoAlloc(position, maxDistance, candidates);
         return FindNearestCandidateNoAlloc(position, maxDistance, candidates);
     }));
 }
Beispiel #2
0
 /// <summary>
 /// Trouve le <see cref="Node"/> le plus proche d'une position donnée.
 /// </summary>
 /// <param name="position">Position.</param>
 /// <param name="maxDistance">Distance maximale avec la position (voir remarques). Par défaut à "float.MaxValue".</param>
 /// <returns><see cref="Node"/> le plus proche de la position donnée, ou null si aucune <see cref="Node"/> n'a été trouvée.</returns>
 /// <remarks>
 /// <para>
 /// Pour des questions de performances, la distance est calculée pas comme un cercle, mais comme un carré.
 /// </para>
 /// <para>
 /// Ex :
 /// </para>
 /// <code>
 ///         *  *
 ///      *        *
 ///     *          *
 ///     *          *
 ///      *        *
 ///         *  *
 ///
 /// VS
 ///
 ///     +----------+
 ///     |          |
 ///     |          |
 ///     |          |
 ///     |          |
 ///     +----------+
 /// </code>
 /// </remarks>
 public Node Find(Vector2 position, float maxDistance)
 {
     return(reusableNodeList.Use(candidates =>
     {
         FindAllCandidatesNoAlloc(position, maxDistance, candidates);
         return FindNearestCandidateNoAlloc(position, maxDistance, candidates);
     }));
 }