Changeset - r16809:417981a51260
[Not reviewed]
master
0 1 0
alberth - 14 years ago 2010-12-20 19:24:27
alberth@openttd.org
(svn r21552) -Codechange: Move short callback functions into the switch.
1 file changed with 36 insertions and 73 deletions:
0 comments (0 inline, 0 general)
src/road_gui.cpp
Show inline comments
 
@@ -65,64 +65,20 @@ void CcPlaySound1D(const CommandCost &re
 
}
 

	
 
/**
 
 * Set the initial flags for the road constuction.
 
 * The flags are:
 
 * @li The direction is the X-dir
 
 * @li The first tile has a partitial RoadBit (true or false)
 
 *
 
 * @param tile The start tile
 
 */
 
static void PlaceRoad_X_Dir(TileIndex tile)
 
{
 
	_place_road_flag = RF_DIR_X;
 
	if (_tile_fract_coords.x >= 8) _place_road_flag |= RF_START_HALFROAD_X;
 
	VpStartPlaceSizing(tile, VPM_FIX_Y, DDSP_PLACE_ROAD_X_DIR);
 
}
 

	
 
/**
 
 * Set the initial flags for the road constuction.
 
 * The flags are:
 
 * @li The direction is the Y-dir
 
 * @li The first tile has a partitial RoadBit (true or false)
 
 *
 
 * @param tile The start tile
 
 * Callback to start placing a bridge.
 
 * @param tile Start tile of the bridge.
 
 */
 
static void PlaceRoad_Y_Dir(TileIndex tile)
 
{
 
	_place_road_flag = RF_DIR_Y;
 
	if (_tile_fract_coords.y >= 8) _place_road_flag |= RF_START_HALFROAD_Y;
 
	VpStartPlaceSizing(tile, VPM_FIX_X, DDSP_PLACE_ROAD_Y_DIR);
 
}
 

	
 
/**
 
 * Set the initial flags for the road constuction.
 
 * The flags are:
 
 * @li The direction is not set.
 
 * @li The first tile has a partitial RoadBit (true or false)
 
 *
 
 * @param tile The start tile
 
 */
 
static void PlaceRoad_AutoRoad(TileIndex tile)
 
{
 
	_place_road_flag = RF_NONE;
 
	if (_tile_fract_coords.x >= 8) _place_road_flag |= RF_START_HALFROAD_X;
 
	if (_tile_fract_coords.y >= 8) _place_road_flag |= RF_START_HALFROAD_Y;
 
	VpStartPlaceSizing(tile, VPM_X_OR_Y, DDSP_PLACE_AUTOROAD);
 
}
 

	
 
static void PlaceRoad_Bridge(TileIndex tile)
 
static void PlaceRoad_Bridge(TileIndex tile, Window *w)
 
{
 
	if (IsBridgeTile(tile)) {
 
		TileIndex other_tile = GetOtherTunnelBridgeEnd(tile);
 
		Window *w = GetCallbackWnd();
 
		Point pt = {0, 0};
 
		if (w != NULL) w->OnPlaceMouseUp(VPM_X_OR_Y, DDSP_BUILD_BRIDGE, pt, tile, other_tile);
 
		w->OnPlaceMouseUp(VPM_X_OR_Y, DDSP_BUILD_BRIDGE, pt, tile, other_tile);
 
	} else {
 
		VpStartPlaceSizing(tile, VPM_X_OR_Y, DDSP_BUILD_BRIDGE);
 
	}
 
}
 

	
 

	
 
void CcBuildRoadTunnel(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2)
 
{
 
	if (result.Succeeded()) {
 
@@ -179,11 +135,6 @@ static const RoadTypeInfo _road_type_inf
 
	},
 
};
 

	
 
static void PlaceRoad_Tunnel(TileIndex tile)
 
{
 
	DoCommandP(tile, RoadTypeToRoadTypes(_cur_roadtype) | (TRANSPORT_ROAD << 8), 0, CMD_BUILD_TUNNEL | CMD_MSG(STR_ERROR_CAN_T_BUILD_TUNNEL_HERE), CcBuildRoadTunnel);
 
}
 

	
 
static void BuildRoadOutsideStation(TileIndex tile, DiagDirection direction)
 
{
 
	tile += TileOffsByDiagDir(direction);
 
@@ -205,11 +156,6 @@ void CcRoadDepot(const CommandCost &resu
 
	BuildRoadOutsideStation(tile, dir);
 
}
 

	
 
static void PlaceRoad_Depot(TileIndex tile)
 
{
 
	DoCommandP(tile, _cur_roadtype << 2 | _road_depot_orientation, 0, CMD_BUILD_ROAD_DEPOT | CMD_MSG(_road_type_infos[_cur_roadtype].err_depot), CcRoadDepot);
 
}
 

	
 
/**
 
 * Command callback for building road stops.
 
 * @param result Result of the build road stop command.
 
@@ -265,6 +211,10 @@ static void PlaceRoadStop(TileIndex star
 
	ShowSelectStationIfNeeded(cmdcont, ta);
 
}
 

	
 
/**
 
 * Callback for placing a bus station.
 
 * @param tile Position to place the station.
 
 */
 
static void PlaceRoad_BusStation(TileIndex tile)
 
{
 
	if (_remove_button_clicked) {
 
@@ -279,6 +229,10 @@ static void PlaceRoad_BusStation(TileInd
 
	}
 
}
 

	
 
/**
 
 * Callback for placing a truck station.
 
 * @param tile Position to place the station.
 
 */
 
static void PlaceRoad_TruckStation(TileIndex tile)
 
{
 
	if (_remove_button_clicked) {
 
@@ -432,28 +386,28 @@ struct BuildRoadToolbarWindow : Window {
 
		_one_way_button_clicked = false;
 
		switch (widget) {
 
			case RTW_ROAD_X:
 
				HandlePlacePushButton(this, RTW_ROAD_X, _road_type_infos[_cur_roadtype].cursor_nwse, HT_RECT, PlaceRoad_X_Dir);
 
				HandlePlacePushButton(this, RTW_ROAD_X, _road_type_infos[_cur_roadtype].cursor_nwse, HT_RECT, NULL);
 
				this->last_started_action = widget;
 
				break;
 

	
 
			case RTW_ROAD_Y:
 
				HandlePlacePushButton(this, RTW_ROAD_Y, _road_type_infos[_cur_roadtype].cursor_nesw, HT_RECT, PlaceRoad_Y_Dir);
 
				HandlePlacePushButton(this, RTW_ROAD_Y, _road_type_infos[_cur_roadtype].cursor_nesw, HT_RECT, NULL);
 
				this->last_started_action = widget;
 
				break;
 

	
 
			case RTW_AUTOROAD:
 
				HandlePlacePushButton(this, RTW_AUTOROAD, _road_type_infos[_cur_roadtype].cursor_autoroad, HT_RECT, PlaceRoad_AutoRoad);
 
				HandlePlacePushButton(this, RTW_AUTOROAD, _road_type_infos[_cur_roadtype].cursor_autoroad, HT_RECT, NULL);
 
				this->last_started_action = widget;
 
				break;
 

	
 
			case RTW_DEMOLISH:
 
				HandlePlacePushButton(this, RTW_DEMOLISH, ANIMCURSOR_DEMOLISH, HT_RECT, PlaceProc_DemolishArea);
 
				HandlePlacePushButton(this, RTW_DEMOLISH, ANIMCURSOR_DEMOLISH, HT_RECT, NULL);
 
				this->last_started_action = widget;
 
				break;
 

	
 
			case RTW_DEPOT:
 
				if (_game_mode == GM_EDITOR || !CanBuildVehicleInfrastructure(VEH_ROAD)) return;
 
				if (HandlePlacePushButton(this, RTW_DEPOT, SPR_CURSOR_ROAD_DEPOT, HT_RECT, PlaceRoad_Depot)) {
 
				if (HandlePlacePushButton(this, RTW_DEPOT, SPR_CURSOR_ROAD_DEPOT, HT_RECT, NULL)) {
 
					ShowRoadDepotPicker(this);
 
					this->last_started_action = widget;
 
				}
 
@@ -461,7 +415,7 @@ struct BuildRoadToolbarWindow : Window {
 

	
 
			case RTW_BUS_STATION:
 
				if (_game_mode == GM_EDITOR || !CanBuildVehicleInfrastructure(VEH_ROAD)) return;
 
				if (HandlePlacePushButton(this, RTW_BUS_STATION, SPR_CURSOR_BUS_STATION, HT_RECT, PlaceRoad_BusStation)) {
 
				if (HandlePlacePushButton(this, RTW_BUS_STATION, SPR_CURSOR_BUS_STATION, HT_RECT, NULL)) {
 
					ShowRVStationPicker(this, ROADSTOP_BUS);
 
					this->last_started_action = widget;
 
				}
 
@@ -469,7 +423,7 @@ struct BuildRoadToolbarWindow : Window {
 

	
 
			case RTW_TRUCK_STATION:
 
				if (_game_mode == GM_EDITOR || !CanBuildVehicleInfrastructure(VEH_ROAD)) return;
 
				if (HandlePlacePushButton(this, RTW_TRUCK_STATION, SPR_CURSOR_TRUCK_STATION, HT_RECT, PlaceRoad_TruckStation)) {
 
				if (HandlePlacePushButton(this, RTW_TRUCK_STATION, SPR_CURSOR_TRUCK_STATION, HT_RECT, NULL)) {
 
					ShowRVStationPicker(this, ROADSTOP_TRUCK);
 
					this->last_started_action = widget;
 
				}
 
@@ -483,12 +437,12 @@ struct BuildRoadToolbarWindow : Window {
 
				break;
 

	
 
			case RTW_BUILD_BRIDGE:
 
				HandlePlacePushButton(this, RTW_BUILD_BRIDGE, SPR_CURSOR_BRIDGE, HT_RECT, PlaceRoad_Bridge);
 
				HandlePlacePushButton(this, RTW_BUILD_BRIDGE, SPR_CURSOR_BRIDGE, HT_RECT, NULL);
 
				this->last_started_action = widget;
 
				break;
 

	
 
			case RTW_BUILD_TUNNEL:
 
				HandlePlacePushButton(this, RTW_BUILD_TUNNEL, SPR_CURSOR_ROAD_TUNNEL, HT_SPECIAL, PlaceRoad_Tunnel);
 
				HandlePlacePushButton(this, RTW_BUILD_TUNNEL, SPR_CURSOR_ROAD_TUNNEL, HT_SPECIAL, NULL);
 
				this->last_started_action = widget;
 
				break;
 

	
 
@@ -521,15 +475,22 @@ struct BuildRoadToolbarWindow : Window {
 
		_one_way_button_clicked = this->IsWidgetLowered(RTW_ONE_WAY);
 
		switch (this->last_started_action) {
 
			case RTW_ROAD_X:
 
				PlaceRoad_X_Dir(tile);
 
				_place_road_flag = RF_DIR_X;
 
				if (_tile_fract_coords.x >= 8) _place_road_flag |= RF_START_HALFROAD_X;
 
				VpStartPlaceSizing(tile, VPM_FIX_Y, DDSP_PLACE_ROAD_X_DIR);
 
				break;
 

	
 
			case RTW_ROAD_Y:
 
				PlaceRoad_Y_Dir(tile);
 
				_place_road_flag = RF_DIR_Y;
 
				if (_tile_fract_coords.y >= 8) _place_road_flag |= RF_START_HALFROAD_Y;
 
				VpStartPlaceSizing(tile, VPM_FIX_X, DDSP_PLACE_ROAD_Y_DIR);
 
				break;
 

	
 
			case RTW_AUTOROAD:
 
				PlaceRoad_AutoRoad(tile);
 
				_place_road_flag = RF_NONE;
 
				if (_tile_fract_coords.x >= 8) _place_road_flag |= RF_START_HALFROAD_X;
 
				if (_tile_fract_coords.y >= 8) _place_road_flag |= RF_START_HALFROAD_Y;
 
				VpStartPlaceSizing(tile, VPM_X_OR_Y, DDSP_PLACE_AUTOROAD);
 
				break;
 

	
 
			case RTW_DEMOLISH:
 
@@ -537,7 +498,8 @@ struct BuildRoadToolbarWindow : Window {
 
				break;
 

	
 
			case RTW_DEPOT:
 
				PlaceRoad_Depot(tile);
 
				DoCommandP(tile, _cur_roadtype << 2 | _road_depot_orientation, 0,
 
						CMD_BUILD_ROAD_DEPOT | CMD_MSG(_road_type_infos[_cur_roadtype].err_depot), CcRoadDepot);
 
				break;
 

	
 
			case RTW_BUS_STATION:
 
@@ -549,11 +511,12 @@ struct BuildRoadToolbarWindow : Window {
 
				break;
 

	
 
			case RTW_BUILD_BRIDGE:
 
				PlaceRoad_Bridge(tile);
 
				PlaceRoad_Bridge(tile, this);
 
				break;
 

	
 
			case RTW_BUILD_TUNNEL:
 
				PlaceRoad_Tunnel(tile);
 
				DoCommandP(tile, RoadTypeToRoadTypes(_cur_roadtype) | (TRANSPORT_ROAD << 8), 0,
 
						CMD_BUILD_TUNNEL | CMD_MSG(STR_ERROR_CAN_T_BUILD_TUNNEL_HERE), CcBuildRoadTunnel);
 
				break;
 

	
 
			default: NOT_REACHED();
0 comments (0 inline, 0 general)