# HG changeset patch # User rubidium # Date 2011-11-26 18:11:22 # Node ID e95011e0b69243ed9fb778b356688090e4e67197 # Parent 128bfd04225218b270a00ffe34a9fe9f1d9fb93c (svn r23338) -Feature [FS#4841]: diagonal dragging the rail conversion tool when pressing CTRL diff --git a/src/rail_cmd.cpp b/src/rail_cmd.cpp --- a/src/rail_cmd.cpp +++ b/src/rail_cmd.cpp @@ -1402,7 +1402,9 @@ static Vehicle *UpdateTrainPowerProc(Veh * @param tile end tile of rail conversion drag * @param flags operation to perform * @param p1 start tile of drag - * @param p2 new railtype to convert to + * @param p2 various bitstuffed elements: + * - p2 = (bit 0- 3) new railtype to convert to. + * - p2 = (bit 4) build diagonally or not. * @param text unused * @return the cost of this operation or an error */ @@ -1418,7 +1420,8 @@ CommandCost CmdConvertRail(TileIndex til CommandCost cost(EXPENSES_CONSTRUCTION); CommandCost error = CommandCost(STR_ERROR_NO_SUITABLE_RAILROAD_TRACK); // by default, there is no track to convert. TileArea ta(tile, p1); - TILE_AREA_LOOP(tile, ta) { + TileIterator *iter = HasBit(p2, 4) ? (TileIterator *)new DiagonalTileIterator(tile, p1) : new OrthogonalTileIterator(ta); + for (; (tile = *iter) != INVALID_TILE; ++(*iter)) { TileType tt = GetTileType(tile); /* Check if there is any track on tile */ diff --git a/src/rail_gui.cpp b/src/rail_gui.cpp --- a/src/rail_gui.cpp +++ b/src/rail_gui.cpp @@ -604,7 +604,7 @@ struct BuildRailToolbarWindow : Window { break; case RTW_CONVERT_RAIL: - HandlePlacePushButton(this, RTW_CONVERT_RAIL, GetRailTypeInfo(_cur_railtype)->cursor.convert, HT_RECT); + HandlePlacePushButton(this, RTW_CONVERT_RAIL, GetRailTypeInfo(_cur_railtype)->cursor.convert, HT_RECT | HT_DIAGONAL); this->last_user_action = widget; break; @@ -715,7 +715,7 @@ struct BuildRailToolbarWindow : Window { break; case DDSP_CONVERT_RAIL: - DoCommandP(end_tile, start_tile, _cur_railtype, CMD_CONVERT_RAIL | CMD_MSG(STR_ERROR_CAN_T_CONVERT_RAIL), CcPlaySound10); + DoCommandP(end_tile, start_tile, _cur_railtype | (_ctrl_pressed ? 0x10 : 0), CMD_CONVERT_RAIL | CMD_MSG(STR_ERROR_CAN_T_CONVERT_RAIL), CcPlaySound10); break; case DDSP_REMOVE_STATION: