diff --git a/src/plans_base.h b/src/plans_base.h index 6e3e4b27fb..d4e2fd39cc 100644 --- a/src/plans_base.h +++ b/src/plans_base.h @@ -162,6 +162,7 @@ struct Plan : PlanPool::PoolItem<&_plan_pool> { Owner owner; PlanLineVector lines; PlanLine *temp_line; + TileIndex last_tile; bool visible; bool visible_by_all; bool show_lines; @@ -178,6 +179,7 @@ struct Plan : PlanPool::PoolItem<&_plan_pool> { this->show_lines = false; this->colour = COLOUR_WHITE; this->temp_line = new PlanLine(); + this->last_tile = INVALID_TILE; } ~Plan() @@ -236,6 +238,7 @@ struct Plan : PlanPool::PoolItem<&_plan_pool> { free(buffer); } this->temp_line->MarkDirty(); + this->last_tile = this->temp_line->tiles.back(); this->temp_line->Clear(); } return ret; diff --git a/src/plans_gui.cpp b/src/plans_gui.cpp index 01e05c3aae..31e92ccc1f 100644 --- a/src/plans_gui.cpp +++ b/src/plans_gui.cpp @@ -381,6 +381,10 @@ struct PlansWindow : Window { const Point p = GetTileBelowCursor(); const TileIndex tile = TileVirtXY(p.x, p.y); if (_current_plan && tile < MapSize()) { + if (_ctrl_pressed && _current_plan->temp_line->tiles.empty() && _current_plan->last_tile != INVALID_TILE) { + _current_plan->StoreTempTile(_current_plan->last_tile); + _current_plan->last_tile = INVALID_TILE; + } _current_plan->StoreTempTile(tile); _thd.selstart = _thd.selend; }