src/water_cmd.cpp
changeset 6460 b3017e083031
parent 6432 8fb778a7f2d7
child 6486 4f8af35b11eb
equal deleted inserted replaced
6459:8c66c58bf6cf 6460:b3017e083031
     1 /* $Id$ */
     1 /* $Id$ */
     2 
     2 
     3 #include "stdafx.h"
     3 #include "stdafx.h"
     4 #include "openttd.h"
     4 #include "openttd.h"
     5 #include "bridge_map.h"
     5 #include "bridge_map.h"
       
     6 #include "cmd_helper.h"
     6 #include "station_map.h"
     7 #include "station_map.h"
     7 #include "table/sprites.h"
     8 #include "table/sprites.h"
     8 #include "table/strings.h"
     9 #include "table/strings.h"
     9 #include "functions.h"
    10 #include "functions.h"
    10 #include "map.h"
    11 #include "map.h"
    43 static Vehicle *FindFloodableVehicleOnTile(TileIndex tile);
    44 static Vehicle *FindFloodableVehicleOnTile(TileIndex tile);
    44 static void FloodVehicle(Vehicle *v);
    45 static void FloodVehicle(Vehicle *v);
    45 
    46 
    46 /** Build a ship depot.
    47 /** Build a ship depot.
    47  * @param tile tile where ship depot is built
    48  * @param tile tile where ship depot is built
    48  * @param p1 depot direction (0 == X or 1 == Y)
    49  * @param p1 bit 0 depot orientation (Axis)
    49  * @param p2 unused
    50  * @param p2 unused
    50  */
    51  */
    51 int32 CmdBuildShipDepot(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
    52 int32 CmdBuildShipDepot(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
    52 {
    53 {
    53 	TileIndex tile2;
    54 	TileIndex tile2;
    55 	int32 cost, ret;
    56 	int32 cost, ret;
    56 	Depot *depot;
    57 	Depot *depot;
    57 
    58 
    58 	SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
    59 	SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
    59 
    60 
    60 	if (p1 > 1) return CMD_ERROR;
       
    61 
       
    62 	if (!EnsureNoVehicle(tile)) return CMD_ERROR;
    61 	if (!EnsureNoVehicle(tile)) return CMD_ERROR;
    63 
    62 
    64 	tile2 = tile + (p1 ? TileDiffXY(0, 1) : TileDiffXY(1, 0));
    63 	Axis axis = Extract<Axis, 0>(p1);
       
    64 
       
    65 	tile2 = tile + (axis == AXIS_X ? TileDiffXY(1, 0) : TileDiffXY(0, 1));
    65 	if (!EnsureNoVehicle(tile2)) return CMD_ERROR;
    66 	if (!EnsureNoVehicle(tile2)) return CMD_ERROR;
    66 
    67 
    67 	if (!IsClearWaterTile(tile) || !IsClearWaterTile(tile2))
    68 	if (!IsClearWaterTile(tile) || !IsClearWaterTile(tile2))
    68 		return_cmd_error(STR_3801_MUST_BE_BUILT_ON_WATER);
    69 		return_cmd_error(STR_3801_MUST_BE_BUILT_ON_WATER);
    69 
    70 
    82 
    83 
    83 	if (flags & DC_EXEC) {
    84 	if (flags & DC_EXEC) {
    84 		depot->xy = tile;
    85 		depot->xy = tile;
    85 		depot->town_index = ClosestTownFromTile(tile, (uint)-1)->index;
    86 		depot->town_index = ClosestTownFromTile(tile, (uint)-1)->index;
    86 
    87 
    87 		MakeShipDepot(tile, _current_player, DEPOT_NORTH, (Axis)p1);
    88 		MakeShipDepot(tile,  _current_player, DEPOT_NORTH, axis);
    88 		MakeShipDepot(tile2, _current_player, DEPOT_SOUTH, (Axis)p1);
    89 		MakeShipDepot(tile2, _current_player, DEPOT_SOUTH, axis);
    89 		MarkTileDirtyByTile(tile);
    90 		MarkTileDirtyByTile(tile);
    90 		MarkTileDirtyByTile(tile2);
    91 		MarkTileDirtyByTile(tile2);
    91 	}
    92 	}
    92 
    93 
    93 	return cost + _price.build_ship_depot;
    94 	return cost + _price.build_ship_depot;