private void SearchPath(Pathfinder.PathfindingMode _SearchMode)
    {
        Debug.Log(_SearchMode);

        /**
         * if (m_StartTile == null)
         * {
         *  m_StartTile = m_GameGrid.GetTileAt(m_RowStart, m_ColumnStart);
         * }
         *
         * if (m_EndTile == null)
         * {
         *  m_EndTile = m_GameGrid.GetTileAt(m_RowEnd, m_ColumnEnd);
         * }
         * /**/

        if (m_PathVisualizer)
        {
            m_PathVisualizer.gameObject.SetActive(false);
        }

        Path        path      = null;
        ChronoInfos infos     = new ChronoInfos();
        float       timeLimit = m_HasLimitSearchTime ? m_TimeLimit : -1;

        switch (_SearchMode)
        {
        case Pathfinder.PathfindingMode.PM_Dijkstra:
            path = Pathfinder.SearchDijkstraPathFromTo(m_StartTile, m_EndTile, out infos, timeLimit);
            break;

        case Pathfinder.PathfindingMode.PM_Dijkstra_LinkOpti:
            path = Pathfinder.SearchDisjktraPathFromTo_LinkOpti(m_StartTile, m_EndTile, out infos, timeLimit);
            break;

        case Pathfinder.PathfindingMode.PM_AStar:
            path = Pathfinder.AStarCustomBasic(m_StartTile, m_EndTile, out infos, timeLimit);
            break;

        case Pathfinder.PathfindingMode.PM_AStar_LinkOpti:
            path = Pathfinder.AStar_LinkOpti(m_StartTile, m_EndTile, out infos, timeLimit);
            break;

        case Pathfinder.PathfindingMode.PM_HPA:
            path = Pathfinder.SearchHPAFromTo(m_GridClustered, m_StartTile, m_EndTile, out infos, timeLimit);
            break;

        default:
            break;
        }

        Debug.Log(infos.ToLogMessage());

        m_Hud?.SetChronoLog(infos);

        if (m_PathVisualizer && path != null)
        {
            m_PathVisualizer.gameObject.SetActive(true);
            m_PathVisualizer.TracePath(path, m_GameGrid.TilesRows);
        }
    }