#pragma once #include "drape_frontend/color_constants.hpp" #include "drape_frontend/route_shape.hpp" #include "drape/pointers.hpp" #include "traffic/speed_groups.hpp" #include "geometry/polyline2d.hpp" #include #include #include namespace dp { class TextureManager; class GraphicsContext; } // namespace dp namespace df { class RouteBuilder { public: using FlushFn = std::function &&)>; using FlushArrowsFn = std::function &&)>; using FlushMarkersFn = std::function &&)>; RouteBuilder(FlushFn && flushFn, FlushArrowsFn && flushArrowsFn, FlushMarkersFn && flushMarkersFn); void Build(ref_ptr context, dp::DrapeID subrouteId, SubrouteConstPtr subroute, ref_ptr textures, int recacheId); void BuildArrows(ref_ptr context, dp::DrapeID subrouteId, std::vector const & borders, ref_ptr textures, int recacheId); void ClearRouteCache(); private: FlushFn m_flushFn; FlushArrowsFn m_flushArrowsFn; FlushMarkersFn m_flushMarkersFn; struct RouteCacheData { m2::PolylineD m_polyline; double m_baseDepthIndex = 0.0; }; std::unordered_map m_routeCache; }; } // namespace df