equal
deleted
inserted
replaced
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; |