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