1018 } |
1015 } |
1019 |
1016 |
1020 cost = 0; |
1017 cost = 0; |
1021 |
1018 |
1022 switch (GetRailTileType(tile)) { |
1019 switch (GetRailTileType(tile)) { |
1023 /* XXX: Why the fuck do we remove these thow signals first? */ |
|
1024 case RAIL_TILE_SIGNALS: |
1020 case RAIL_TILE_SIGNALS: |
1025 if (HasSignalOnTrack(tile, TRACK_X)) { |
1021 case RAIL_TILE_NORMAL: { |
1026 ret = DoCommand(tile, TRACK_X, 0, flags, CMD_REMOVE_SIGNALS); |
1022 TrackBits tracks = GetTrackBits(tile); |
|
1023 uint i; |
|
1024 |
|
1025 for_each_bit (i, tracks) { |
|
1026 ret = DoCommand(tile, 0, i, flags, CMD_REMOVE_SINGLE_RAIL); |
1027 if (CmdFailed(ret)) return CMD_ERROR; |
1027 if (CmdFailed(ret)) return CMD_ERROR; |
1028 cost += ret; |
1028 cost += ret; |
1029 } |
|
1030 if (HasSignalOnTrack(tile, TRACK_LOWER)) { |
|
1031 ret = DoCommand(tile, TRACK_LOWER, 0, flags, CMD_REMOVE_SIGNALS); |
|
1032 if (CmdFailed(ret)) return CMD_ERROR; |
|
1033 cost += ret; |
|
1034 } |
|
1035 |
|
1036 m5 &= TRACK_BIT_MASK; |
|
1037 if (!(flags & DC_EXEC)) { |
|
1038 for (; m5 != 0; m5 >>= 1) if (m5 & 1) cost += _price.remove_rail; |
|
1039 return cost; |
|
1040 } |
|
1041 /* FALLTHROUGH */ |
|
1042 |
|
1043 case RAIL_TILE_NORMAL: { |
|
1044 uint i; |
|
1045 |
|
1046 for (i = 0; m5 != 0; i++, m5 >>= 1) { |
|
1047 if (m5 & 1) { |
|
1048 ret = DoCommand(tile, 0, i, flags, CMD_REMOVE_SINGLE_RAIL); |
|
1049 if (CmdFailed(ret)) return CMD_ERROR; |
|
1050 cost += ret; |
|
1051 } |
|
1052 } |
1029 } |
1053 return cost; |
1030 return cost; |
1054 } |
1031 } |
1055 |
1032 |
1056 case RAIL_TILE_DEPOT_WAYPOINT: |
1033 case RAIL_TILE_DEPOT_WAYPOINT: |