Plans: Improve drawing performance of current plan line
This commit is contained in:
@@ -2425,10 +2425,11 @@ static void ViewportDrawVehicleRouteSteps(const Viewport * const vp)
|
|||||||
|
|
||||||
void ViewportDrawPlans(const Viewport *vp)
|
void ViewportDrawPlans(const Viewport *vp)
|
||||||
{
|
{
|
||||||
|
if (Plan::GetNumItems() == 0 && !(_current_plan && _current_plan->temp_line->tiles.size() > 1)) return;
|
||||||
|
|
||||||
DrawPixelInfo *old_dpi = _cur_dpi;
|
DrawPixelInfo *old_dpi = _cur_dpi;
|
||||||
_cur_dpi = &_dpi_for_text;
|
_cur_dpi = &_dpi_for_text;
|
||||||
|
|
||||||
if (Plan::GetNumItems() != 0) {
|
|
||||||
const Rect bounds = {
|
const Rect bounds = {
|
||||||
ScaleByZoom(_dpi_for_text.left - 2, vp->zoom),
|
ScaleByZoom(_dpi_for_text.left - 2, vp->zoom),
|
||||||
ScaleByZoom(_dpi_for_text.top - 2, vp->zoom),
|
ScaleByZoom(_dpi_for_text.top - 2, vp->zoom),
|
||||||
@@ -2482,16 +2483,24 @@ void ViewportDrawPlans(const Viewport *vp)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (_current_plan && _current_plan->temp_line->tiles.size() > 1) {
|
if (_current_plan && _current_plan->temp_line->tiles.size() > 1) {
|
||||||
for (uint i = 1; i < _current_plan->temp_line->tiles.size(); i++) {
|
PlanLine *pl = _current_plan->temp_line;
|
||||||
const TileIndex from_tile = _current_plan->temp_line->tiles[i-1];
|
TileIndex to_tile = pl->tiles[0];
|
||||||
|
int to_coord_delta = (int)TileY(to_tile) - (int)TileX(to_tile);
|
||||||
|
for (uint i = 1; i < pl->tiles.size(); i++) {
|
||||||
|
const TileIndex from_tile = to_tile;
|
||||||
|
const int from_coord_delta = to_coord_delta;
|
||||||
|
to_tile = pl->tiles[i];
|
||||||
|
to_coord_delta = (int)TileY(to_tile) - (int)TileX(to_tile);
|
||||||
|
|
||||||
|
if (to_coord_delta < min_coord_delta && from_coord_delta < min_coord_delta) continue;
|
||||||
|
if (to_coord_delta > max_coord_delta && from_coord_delta > max_coord_delta) continue;
|
||||||
|
|
||||||
const Point from_pt = RemapCoords2(TileX(from_tile) * TILE_SIZE + TILE_SIZE / 2, TileY(from_tile) * TILE_SIZE + TILE_SIZE / 2);
|
const Point from_pt = RemapCoords2(TileX(from_tile) * TILE_SIZE + TILE_SIZE / 2, TileY(from_tile) * TILE_SIZE + TILE_SIZE / 2);
|
||||||
const int from_x = UnScaleByZoom(from_pt.x, vp->zoom);
|
const int from_x = UnScaleByZoom(from_pt.x, vp->zoom);
|
||||||
const int from_y = UnScaleByZoom(from_pt.y, vp->zoom);
|
const int from_y = UnScaleByZoom(from_pt.y, vp->zoom);
|
||||||
|
|
||||||
const TileIndex to_tile = _current_plan->temp_line->tiles[i];
|
|
||||||
const Point to_pt = RemapCoords2(TileX(to_tile) * TILE_SIZE + TILE_SIZE / 2, TileY(to_tile) * TILE_SIZE + TILE_SIZE / 2);
|
const Point to_pt = RemapCoords2(TileX(to_tile) * TILE_SIZE + TILE_SIZE / 2, TileY(to_tile) * TILE_SIZE + TILE_SIZE / 2);
|
||||||
const int to_x = UnScaleByZoom(to_pt.x, vp->zoom);
|
const int to_x = UnScaleByZoom(to_pt.x, vp->zoom);
|
||||||
const int to_y = UnScaleByZoom(to_pt.y, vp->zoom);
|
const int to_y = UnScaleByZoom(to_pt.y, vp->zoom);
|
||||||
|
Reference in New Issue
Block a user