diff options
author | rubidium <rubidium@openttd.org> | 2010-08-28 19:02:21 +0000 |
---|---|---|
committer | rubidium <rubidium@openttd.org> | 2010-08-28 19:02:21 +0000 |
commit | 41a80490befda13df13115f3e272d05247bcf4a2 (patch) | |
tree | 1e3f9b83d4291b273b4ba04606837a956845a969 /src/object_cmd.cpp | |
parent | 3e67b4fe5fd94d181e44d8291d389868cd86182b (diff) | |
download | openttd-41a80490befda13df13115f3e272d05247bcf4a2.tar.xz |
(svn r20668) -Codechange: add (more) support for bridges over objects
Diffstat (limited to 'src/object_cmd.cpp')
-rw-r--r-- | src/object_cmd.cpp | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/src/object_cmd.cpp b/src/object_cmd.cpp index d16cfeb78..dbfc6fda7 100644 --- a/src/object_cmd.cpp +++ b/src/object_cmd.cpp @@ -127,7 +127,7 @@ void UpdateCompanyHQ(TileIndex tile, uint score) } } -extern CommandCost CheckBuildableTile(TileIndex tile, uint invalid_dirs, int &allowed_z); +extern CommandCost CheckBuildableTile(TileIndex tile, uint invalid_dirs, int &allowed_z, bool check_bridge); static CommandCost ClearTile_Object(TileIndex tile, DoCommandFlag flags); /** @@ -189,12 +189,22 @@ CommandCost CmdBuildObject(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3 /* Check whether the ground is flat enough. */ int allowed_z = -1; TILE_AREA_LOOP(t, ta) { - cost.AddCost(CheckBuildableTile(t, 0, allowed_z)); + /* We'll do the bridge test later; it's quite custom. */ + cost.AddCost(CheckBuildableTile(t, 0, allowed_z, false)); } } } if (cost.Failed()) return cost; + /* Finally do a check for bridges. */ + TILE_AREA_LOOP(t, ta) { + if (MayHaveBridgeAbove(t) && IsBridgeAbove(t) && ( + !(spec->flags & OBJECT_FLAG_ALLOW_UNDER_BRIDGE) || + (GetTileMaxZ(t) + spec->height * TILE_HEIGHT >= GetBridgeHeight(GetSouthernBridgeEnd(t))))) { + return_cmd_error(STR_ERROR_MUST_DEMOLISH_BRIDGE_FIRST); + } + } + int hq_score = 0; switch (type) { case OBJECT_TRANSMITTER: |