forked from mirror/OpenTTD
(svn r3783) Replace further ints and magic numbers by Direction, DiagDirection and friends
This commit is contained in:
@@ -119,7 +119,7 @@ static inline int GetBridgeType(TileIndex tile)
|
||||
* is_start_tile = false <-- end tile
|
||||
* is_start_tile = true <-- start tile
|
||||
*/
|
||||
static uint32 CheckBridgeSlope(uint direction, uint tileh, bool is_start_tile)
|
||||
static uint32 CheckBridgeSlope(Axis direction, uint tileh, bool is_start_tile)
|
||||
{
|
||||
if (IsSteepTileh(tileh)) return CMD_ERROR;
|
||||
|
||||
@@ -129,7 +129,7 @@ static uint32 CheckBridgeSlope(uint direction, uint tileh, bool is_start_tile)
|
||||
- direction X: tiles 0, 12
|
||||
- direction Y: tiles 0, 9
|
||||
*/
|
||||
if ((direction ? 0x201 : 0x1001) & (1 << tileh)) return 0;
|
||||
if ((direction == AXIS_X ? 0x1001 : 0x201) & (1 << tileh)) return 0;
|
||||
|
||||
// disallow certain start tiles to avoid certain crooked bridges
|
||||
if (tileh == 2) return CMD_ERROR;
|
||||
@@ -139,7 +139,7 @@ static uint32 CheckBridgeSlope(uint direction, uint tileh, bool is_start_tile)
|
||||
- direction X: tiles 0, 3
|
||||
- direction Y: tiles 0, 6
|
||||
*/
|
||||
if ((direction? 0x41 : 0x9) & (1 << tileh)) return 0;
|
||||
if ((direction == AXIS_X ? 0x9 : 0x41) & (1 << tileh)) return 0;
|
||||
|
||||
// disallow certain end tiles to avoid certain crooked bridges
|
||||
if (tileh == 8) return CMD_ERROR;
|
||||
@@ -149,8 +149,8 @@ static uint32 CheckBridgeSlope(uint direction, uint tileh, bool is_start_tile)
|
||||
* start-tile: X 2,1 Y 2,4 (2 was disabled before)
|
||||
* end-tile: X 8,4 Y 8,1 (8 was disabled before)
|
||||
*/
|
||||
if ((tileh == 1 && is_start_tile != (bool)direction) ||
|
||||
(tileh == 4 && is_start_tile == (bool)direction)) {
|
||||
if ((tileh == 1 && is_start_tile != (direction != AXIS_X)) ||
|
||||
(tileh == 4 && is_start_tile == (direction != AXIS_X))) {
|
||||
return CMD_ERROR;
|
||||
}
|
||||
|
||||
@@ -200,7 +200,7 @@ int32 CmdBuildBridge(int x, int y, uint32 flags, uint32 p1, uint32 p2)
|
||||
TileInfo ti_start, ti_end, ti; /* OPT: only 2 of those are ever used */
|
||||
uint bridge_len;
|
||||
uint odd_middle_part;
|
||||
uint direction;
|
||||
Axis direction;
|
||||
uint i;
|
||||
int32 cost, terraformcost, ret;
|
||||
bool allow_on_slopes;
|
||||
@@ -225,17 +225,16 @@ int32 CmdBuildBridge(int x, int y, uint32 flags, uint32 p1, uint32 p2)
|
||||
sx = TileX(p1) * 16;
|
||||
sy = TileY(p1) * 16;
|
||||
|
||||
direction = 0;
|
||||
|
||||
/* check if valid, and make sure that (x,y) are smaller than (sx,sy) */
|
||||
if (x == sx) {
|
||||
if (y == sy) return_cmd_error(STR_5008_CANNOT_START_AND_END_ON);
|
||||
direction = 1;
|
||||
direction = AXIS_Y;
|
||||
if (y > sy) {
|
||||
intswap(y,sy);
|
||||
intswap(x,sx);
|
||||
}
|
||||
} else if (y == sy) {
|
||||
direction = AXIS_X;
|
||||
if (x > sx) {
|
||||
intswap(y,sy);
|
||||
intswap(x,sx);
|
||||
@@ -327,10 +326,10 @@ int32 CmdBuildBridge(int x, int y, uint32 flags, uint32 p1, uint32 p2)
|
||||
odd_middle_part = (bridge_len % 2) ? (bridge_len / 2) : bridge_len;
|
||||
|
||||
for (i = 0; i != bridge_len; i++) {
|
||||
if (direction != 0) {
|
||||
y += 16;
|
||||
} else {
|
||||
if (direction == AXIS_X) {
|
||||
x += 16;
|
||||
} else {
|
||||
y += 16;
|
||||
}
|
||||
|
||||
FindLandscapeHeight(&ti, x, y);
|
||||
@@ -349,13 +348,15 @@ int32 CmdBuildBridge(int x, int y, uint32 flags, uint32 p1, uint32 p2)
|
||||
break;
|
||||
|
||||
case MP_RAILWAY:
|
||||
if (ti.map5 != (direction == 0 ? 2 : 1)) goto not_valid_below;
|
||||
if (ti.map5 != (direction == AXIS_X ? TRACK_BIT_Y : TRACK_BIT_X)) {
|
||||
goto not_valid_below;
|
||||
}
|
||||
m5 = 0xE0;
|
||||
break;
|
||||
|
||||
case MP_STREET:
|
||||
if (GetRoadType(ti.tile) != ROAD_NORMAL ||
|
||||
GetRoadBits(ti.tile) != (direction == 0 ? ROAD_Y : ROAD_X)) {
|
||||
GetRoadBits(ti.tile) != (direction == AXIS_X ? ROAD_Y : ROAD_X)) {
|
||||
goto not_valid_below;
|
||||
}
|
||||
m5 = 0xE8;
|
||||
@@ -408,7 +409,7 @@ not_valid_below:;
|
||||
}
|
||||
}
|
||||
|
||||
SetSignalsOnBothDir(ti_start.tile, (direction & 1) ? 1 : 0);
|
||||
SetSignalsOnBothDir(ti_start.tile, direction == AXIS_X ? TRACK_X : TRACK_Y);
|
||||
|
||||
/* for human player that builds the bridge he gets a selection to choose from bridges (DC_QUERY_COST)
|
||||
It's unnecessary to execute this command every time for every bridge. So it is done only
|
||||
@@ -546,7 +547,6 @@ static int32 DoClearTunnel(TileIndex tile, uint32 flags)
|
||||
Town *t;
|
||||
TileIndex endtile;
|
||||
uint length;
|
||||
static const byte _updsignals_tunnel_dir[4] = { 5, 7, 1, 3};
|
||||
|
||||
SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
|
||||
|
||||
@@ -574,8 +574,7 @@ static int32 DoClearTunnel(TileIndex tile, uint32 flags)
|
||||
if (flags & DC_EXEC) {
|
||||
// We first need to request the direction before calling DoClearSquare
|
||||
// else the direction is always 0.. dah!! ;)
|
||||
DiagDirection tile_dir = GetTunnelDirection(tile);
|
||||
DiagDirection endtile_dir = GetTunnelDirection(endtile);
|
||||
DiagDirection dir = GetTunnelDirection(tile);
|
||||
|
||||
// Adjust the town's player rating. Do this before removing the tile owner info.
|
||||
if (IsTileOwner(tile, OWNER_TOWN) && _game_mode != GM_EDITOR)
|
||||
@@ -583,22 +582,22 @@ static int32 DoClearTunnel(TileIndex tile, uint32 flags)
|
||||
|
||||
DoClearSquare(tile);
|
||||
DoClearSquare(endtile);
|
||||
UpdateSignalsOnSegment(tile, _updsignals_tunnel_dir[tile_dir]);
|
||||
UpdateSignalsOnSegment(endtile, _updsignals_tunnel_dir[endtile_dir]);
|
||||
UpdateSignalsOnSegment(tile, DiagDirToDir(ReverseDiagDir(dir)));
|
||||
UpdateSignalsOnSegment(endtile, DiagDirToDir(dir));
|
||||
}
|
||||
return _price.clear_tunnel * (length + 1);
|
||||
}
|
||||
|
||||
static TileIndex FindEdgesOfBridge(TileIndex tile, TileIndex *endtile)
|
||||
{
|
||||
int direction = GB(_m[tile].m5, 0, 1);
|
||||
Axis direction = GB(_m[tile].m5, 0, 1);
|
||||
TileIndex start;
|
||||
|
||||
// find start of bridge
|
||||
for (;;) {
|
||||
if (IsTileType(tile, MP_TUNNELBRIDGE) && (_m[tile].m5 & 0xE0) == 0x80)
|
||||
break;
|
||||
tile += direction ? TileDiffXY(0, -1) : TileDiffXY(-1, 0);
|
||||
tile += (direction == AXIS_X ? TileDiffXY(-1, 0) : TileDiffXY(0, -1));
|
||||
}
|
||||
|
||||
start = tile;
|
||||
@@ -607,7 +606,7 @@ static TileIndex FindEdgesOfBridge(TileIndex tile, TileIndex *endtile)
|
||||
for (;;) {
|
||||
if (IsTileType(tile, MP_TUNNELBRIDGE) && (_m[tile].m5 & 0xE0) == 0xA0)
|
||||
break;
|
||||
tile += direction ? TileDiffXY(0, 1) : TileDiffXY(1, 0);
|
||||
tile += (direction == AXIS_X ? TileDiffXY(1, 0) : TileDiffXY(0, 1));
|
||||
}
|
||||
|
||||
*endtile = tile;
|
||||
@@ -620,7 +619,7 @@ static int32 DoClearBridge(TileIndex tile, uint32 flags)
|
||||
TileIndex endtile;
|
||||
Vehicle *v;
|
||||
Town *t;
|
||||
int direction;
|
||||
Axis direction;
|
||||
|
||||
SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
|
||||
|
||||
@@ -672,8 +671,8 @@ static int32 DoClearBridge(TileIndex tile, uint32 flags)
|
||||
Omit tile and endtile, since these are already checked, thus solving the problem
|
||||
of bridges over water, or higher bridges, where z is not increased, eg level bridge
|
||||
*/
|
||||
tile += direction ? TileDiffXY(0, 1) : TileDiffXY(1, 0);
|
||||
endtile -= direction ? TileDiffXY(0, 1) : TileDiffXY(1, 0);
|
||||
tile += (direction == AXIS_X ? TileDiffXY(1, 0) : TileDiffXY(0, 1));
|
||||
endtile -= (direction == AXIS_X ? TileDiffXY(1, 0) : TileDiffXY(0, 1));
|
||||
/* Bridges on slopes might have their Z-value offset..correct this */
|
||||
v = FindVehicleBetween(tile, endtile, TilePixelHeight(tile) + 8 + GetCorrectTileHeight(tile));
|
||||
if (v != NULL) {
|
||||
@@ -682,9 +681,8 @@ static int32 DoClearBridge(TileIndex tile, uint32 flags)
|
||||
}
|
||||
|
||||
/* Put the tiles back to start/end position */
|
||||
tile -= direction ? TileDiffXY(0, 1) : TileDiffXY(1, 0);
|
||||
endtile += direction ? TileDiffXY(0, 1) : TileDiffXY(1, 0);
|
||||
|
||||
tile -= (direction == AXIS_X ? TileDiffXY(1, 0) : TileDiffXY(0, 1));
|
||||
endtile += (direction == AXIS_X ? TileDiffXY(1, 0) : TileDiffXY(0, 1));
|
||||
|
||||
t = ClosestTownFromTile(tile, (uint)-1); //needed for town rating penalty
|
||||
// check if you're allowed to remove the bridge owned by a town.
|
||||
@@ -726,17 +724,17 @@ static int32 DoClearBridge(TileIndex tile, uint32 flags)
|
||||
clear_it:;
|
||||
DoClearSquare(c);
|
||||
}
|
||||
c += direction ? TileDiffXY(0, 1) : TileDiffXY(1, 0);
|
||||
c += (direction == AXIS_X ? TileDiffXY(1, 0) : TileDiffXY(0, 1));
|
||||
} while (c <= endtile);
|
||||
|
||||
SetSignalsOnBothDir(tile, direction);
|
||||
SetSignalsOnBothDir(endtile, direction);
|
||||
SetSignalsOnBothDir(tile, direction == AXIS_X ? TRACK_X : TRACK_Y);
|
||||
SetSignalsOnBothDir(endtile, direction == AXIS_X ? TRACK_X : TRACK_Y);
|
||||
}
|
||||
|
||||
if (direction) {
|
||||
return (TileY(endtile) - TileY(tile) + 1) * _price.clear_bridge;
|
||||
} else {
|
||||
if (direction == AXIS_X) {
|
||||
return (TileX(endtile) - TileX(tile) + 1) * _price.clear_bridge;
|
||||
} else {
|
||||
return (TileY(endtile) - TileY(tile) + 1) * _price.clear_bridge;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -918,7 +916,7 @@ static void DrawBridgePillars(const TileInfo *ti, int x, int y, int z)
|
||||
}
|
||||
}
|
||||
|
||||
uint GetBridgeFoundation(uint tileh, byte direction)
|
||||
uint GetBridgeFoundation(uint tileh, Axis axis)
|
||||
{
|
||||
int i;
|
||||
// normal level sloped building (7, 11, 13, 14)
|
||||
@@ -931,8 +929,8 @@ uint GetBridgeFoundation(uint tileh, byte direction)
|
||||
(i += 2, tileh == 4) ||
|
||||
(i += 2, tileh == 8)
|
||||
) && (
|
||||
direction == 0 ||
|
||||
(i++, direction == 1)
|
||||
axis == AXIS_X ||
|
||||
(i++, axis == AXIS_Y)
|
||||
)) {
|
||||
return i + 15;
|
||||
}
|
||||
|
Reference in New Issue
Block a user