# HG changeset patch # User tron # Date 1141717865 0 # Node ID f4caf4197189614a71960fd5ec6985694075825c # Parent c4673c9360396a7e519a96d7d290c511708df5fd (svn r3779) Move CheckTunnelInWay() to a more appropriate place, invert its result and give it a less ambiguous name (IsTunnelInWay) diff -r c4673c936039 -r f4caf4197189 clear_cmd.c --- a/clear_cmd.c Mon Mar 06 23:01:35 2006 +0000 +++ b/clear_cmd.c Tue Mar 07 07:51:05 2006 +0000 @@ -10,6 +10,7 @@ #include "tile.h" #include "viewport.h" #include "command.h" +#include "tunnel_map.h" #include "variables.h" #include "table/sprites.h" @@ -277,7 +278,7 @@ t = TerraformGetHeightOfTile(&ts, tile + TileDiffXY(0, 1)); if (t <= z) z = t; - if (!CheckTunnelInWay(tile, z * 8)) { + if (IsTunnelInWay(tile, z * 8)) { return_cmd_error(STR_1002_EXCAVATION_WOULD_DAMAGE); } } diff -r c4673c936039 -r f4caf4197189 functions.h --- a/functions.h Mon Mar 06 23:01:35 2006 +0000 +++ b/functions.h Tue Mar 07 07:51:05 2006 +0000 @@ -145,7 +145,6 @@ void InitializeAnimatedTiles(void); /* tunnelbridge_cmd.c */ -bool CheckTunnelInWay(TileIndex tile, int z); bool CheckBridge_Stuff(byte bridge_type, uint bridge_len); uint32 GetBridgeLength(TileIndex begin, TileIndex end); int CalcBridgeLenCostFactor(int x); diff -r c4673c936039 -r f4caf4197189 tunnel_map.c --- a/tunnel_map.c Mon Mar 06 23:01:35 2006 +0000 +++ b/tunnel_map.c Tue Mar 07 07:51:05 2006 +0000 @@ -23,3 +23,30 @@ return tile; } + + +static bool IsTunnelInWayDir(TileIndex tile, uint z, DiagDirection dir) +{ + TileIndexDiff delta = TileOffsByDir(dir); + uint height; + + do { + tile -= delta; + height = GetTileZ(tile); + } while (z < height); + + return + z == height && + IsTileType(tile, MP_TUNNELBRIDGE) && + GB(_m[tile].m5, 4, 4) == 0 && + GetTunnelDirection(tile) == dir; +} + +bool IsTunnelInWay(TileIndex tile, uint z) +{ + return + IsTunnelInWayDir(tile, z, DIAGDIR_NE) || + IsTunnelInWayDir(tile, z, DIAGDIR_SE) || + IsTunnelInWayDir(tile, z, DIAGDIR_SW) || + IsTunnelInWayDir(tile, z, DIAGDIR_NW); +} diff -r c4673c936039 -r f4caf4197189 tunnel_map.h --- a/tunnel_map.h Mon Mar 06 23:01:35 2006 +0000 +++ b/tunnel_map.h Tue Mar 07 07:51:05 2006 +0000 @@ -22,6 +22,7 @@ TileIndex GetOtherTunnelEnd(TileIndex); +bool IsTunnelInWay(TileIndex, uint z); static inline void MakeRoadTunnel(TileIndex t, Owner o, DiagDirection d) diff -r c4673c936039 -r f4caf4197189 tunnelbridge_cmd.c --- a/tunnelbridge_cmd.c Mon Mar 06 23:01:35 2006 +0000 +++ b/tunnelbridge_cmd.c Tue Mar 07 07:51:05 2006 +0000 @@ -428,36 +428,6 @@ return cost; } -static bool DoCheckTunnelInWay(TileIndex tile, uint z, DiagDirection dir) -{ - TileIndexDiff delta = TileOffsByDir(dir); - uint height; - - do { - tile -= delta; - height = GetTileZ(tile); - } while (z < height); - - if (z == height && - IsTileType(tile, MP_TUNNELBRIDGE) && - GB(_m[tile].m5, 4, 4) == 0 && - GetTunnelDirection(tile) == dir) { - _error_message = STR_5003_ANOTHER_TUNNEL_IN_THE_WAY; - return false; - } - - return true; -} - -bool CheckTunnelInWay(TileIndex tile, int z) -{ - return - DoCheckTunnelInWay(tile, z, DIAGDIR_NE) && - DoCheckTunnelInWay(tile, z, DIAGDIR_SE) && - DoCheckTunnelInWay(tile, z, DIAGDIR_SW) && - DoCheckTunnelInWay(tile, z, DIAGDIR_NW); -} - /** Build Tunnel. * @param x,y start tile coord of tunnel @@ -504,8 +474,8 @@ if (start_z == end_z) break; - if (!_cheats.crossing_tunnels.value && !CheckTunnelInWay(end_tile, start_z)) { - return CMD_ERROR; + if (!_cheats.crossing_tunnels.value && IsTunnelInWay(end_tile, start_z)) { + return_cmd_error(STR_5003_ANOTHER_TUNNEL_IN_THE_WAY); } cost += _price.build_tunnel;