42 |
42 |
43 static void BuildBridge(Window *w, int i) |
43 static void BuildBridge(Window *w, int i) |
44 { |
44 { |
45 DeleteWindow(w); |
45 DeleteWindow(w); |
46 DoCommandP(_bridgedata.end_tile, _bridgedata.start_tile, |
46 DoCommandP(_bridgedata.end_tile, _bridgedata.start_tile, |
47 _bridgedata.indexes[i] | (_bridgedata.type << 8), CcBuildBridge, |
47 _bridgedata.type | _bridgedata.indexes[i], CcBuildBridge, |
48 CMD_BUILD_BRIDGE | CMD_MSG(STR_5015_CAN_T_BUILD_BRIDGE_HERE)); |
48 CMD_BUILD_BRIDGE | CMD_MSG(STR_5015_CAN_T_BUILD_BRIDGE_HERE)); |
49 } |
49 } |
50 |
50 |
51 /* Names of the build bridge selection window */ |
51 /* Names of the build bridge selection window */ |
52 enum BuildBridgeSelectionWidgets { |
52 enum BuildBridgeSelectionWidgets { |
141 WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_RESIZABLE, |
141 WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_RESIZABLE, |
142 _build_bridge_widgets, |
142 _build_bridge_widgets, |
143 BuildBridgeWndProc |
143 BuildBridgeWndProc |
144 }; |
144 }; |
145 |
145 |
146 /* Widget definition for the road bridge selection window */ |
146 void ShowBuildBridgeWindow(TileIndex start, TileIndex end, TransportType transport_type, byte bridge_type) |
147 static const Widget _build_road_bridge_widgets[] = { |
|
148 { WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, // BBSW_CLOSEBOX |
|
149 { WWT_CAPTION, RESIZE_NONE, 7, 11, 199, 0, 13, STR_1803_SELECT_ROAD_BRIDGE, STR_018C_WINDOW_TITLE_DRAG_THIS}, // BBSW_CAPTION |
|
150 { WWT_MATRIX, RESIZE_BOTTOM, 7, 0, 187, 14, 101, 0x401, STR_101F_BRIDGE_SELECTION_CLICK}, // BBSW_BRIDGE_LIST |
|
151 { WWT_SCROLLBAR, RESIZE_BOTTOM, 7, 188, 199, 14, 89, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST}, // BBSW_SCROLLBAR |
|
152 { WWT_RESIZEBOX, RESIZE_TB, 7, 188, 199, 90, 101, 0x0, STR_RESIZE_BUTTON}, // BBSW_RESIZEBOX |
|
153 { WIDGETS_END}, |
|
154 }; |
|
155 |
|
156 /* Window definition for the road bridge selection window */ |
|
157 static const WindowDesc _build_road_bridge_desc = { |
|
158 WDP_AUTO, WDP_AUTO, 200, 102, 200, 102, |
|
159 WC_BUILD_BRIDGE, WC_BUILD_TOOLBAR, |
|
160 WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_RESIZABLE, |
|
161 _build_road_bridge_widgets, |
|
162 BuildBridgeWndProc |
|
163 }; |
|
164 |
|
165 |
|
166 void ShowBuildBridgeWindow(TileIndex start, TileIndex end, byte bridge_type) |
|
167 { |
147 { |
168 DeleteWindowById(WC_BUILD_BRIDGE, 0); |
148 DeleteWindowById(WC_BUILD_BRIDGE, 0); |
169 |
149 |
170 _bridgedata.type = bridge_type; |
150 _bridgedata.type = ((transport_type << 7) | bridge_type) << 8; //prepare the parameter for use only once |
171 _bridgedata.start_tile = start; |
151 _bridgedata.start_tile = start; |
172 _bridgedata.end_tile = end; |
152 _bridgedata.end_tile = end; |
173 |
153 |
174 /* only query bridge building possibility once, result is the same for all bridges! |
154 /* only query bridge building possibility once, result is the same for all bridges! |
175 * returns CMD_ERROR on failure, and price on success */ |
155 * returns CMD_ERROR on failure, and price on success */ |
176 StringID errmsg = INVALID_STRING_ID; |
156 StringID errmsg = INVALID_STRING_ID; |
177 CommandCost ret = DoCommand(end, start, (bridge_type << 8), DC_AUTO | DC_QUERY_COST, CMD_BUILD_BRIDGE); |
157 CommandCost ret = DoCommand(end, start, _bridgedata.type, DC_AUTO | DC_QUERY_COST, CMD_BUILD_BRIDGE); |
178 |
158 |
179 uint8 j = 0; |
159 uint8 j = 0; |
180 if (CmdFailed(ret)) { |
160 if (CmdFailed(ret)) { |
181 errmsg = _error_message; |
161 errmsg = _error_message; |
182 } else { |
162 } else { |