mirror of https://github.com/OpenTTD/OpenTTD
(svn r3387) Restructure the code, which places fences along railroad tracks.
This includes no functional changes, just some cleanup before some bugfixrelease/0.4.5
parent
793a0099d4
commit
18de531671
99
rail_cmd.c
99
rail_cmd.c
|
@ -1951,7 +1951,6 @@ static void TileLoop_Track(TileIndex tile)
|
||||||
{
|
{
|
||||||
byte old_ground;
|
byte old_ground;
|
||||||
byte new_ground;
|
byte new_ground;
|
||||||
TrackBits rail;
|
|
||||||
|
|
||||||
old_ground = _m[tile].m5 & RAIL_TYPE_SPECIAL ? GB(_m[tile].m4, 0, 4) : GB(_m[tile].m2, 0, 4);
|
old_ground = _m[tile].m5 & RAIL_TYPE_SPECIAL ? GB(_m[tile].m4, 0, 4) : GB(_m[tile].m2, 0, 4);
|
||||||
|
|
||||||
|
@ -1978,45 +1977,75 @@ static void TileLoop_Track(TileIndex tile)
|
||||||
|
|
||||||
if (old_ground != RAIL_GROUND_BROWN) { /* wait until bottom is green */
|
if (old_ground != RAIL_GROUND_BROWN) { /* wait until bottom is green */
|
||||||
/* determine direction of fence */
|
/* determine direction of fence */
|
||||||
rail = _m[tile].m5 & TRACK_BIT_MASK;
|
TrackBits rail = _m[tile].m5 & TRACK_BIT_MASK;
|
||||||
|
|
||||||
if (rail == TRACK_BIT_UPPER) {
|
switch (rail) {
|
||||||
new_ground = RAIL_GROUND_FENCE_HORIZ1;
|
case TRACK_BIT_UPPER: new_ground = RAIL_GROUND_FENCE_HORIZ1; break;
|
||||||
} else if (rail == TRACK_BIT_LOWER) {
|
case TRACK_BIT_LOWER: new_ground = RAIL_GROUND_FENCE_HORIZ2; break;
|
||||||
new_ground = RAIL_GROUND_FENCE_HORIZ2;
|
case TRACK_BIT_LEFT: new_ground = RAIL_GROUND_FENCE_VERT1; break;
|
||||||
} else if (rail == TRACK_BIT_LEFT) {
|
case TRACK_BIT_RIGHT: new_ground = RAIL_GROUND_FENCE_VERT2; break;
|
||||||
new_ground = RAIL_GROUND_FENCE_VERT1;
|
|
||||||
} else if (rail == TRACK_BIT_RIGHT) {
|
|
||||||
new_ground = RAIL_GROUND_FENCE_VERT2;
|
|
||||||
} else {
|
|
||||||
PlayerID owner = GetTileOwner(tile);
|
|
||||||
|
|
||||||
if ( (!(rail&(TRACK_BIT_DIAG2|TRACK_BIT_UPPER|TRACK_BIT_LEFT)) && (rail&TRACK_BIT_DIAG1)) || rail==(TRACK_BIT_LOWER|TRACK_BIT_RIGHT)) {
|
default: {
|
||||||
if (!IsTileType(tile + TileDiffXY(0, -1), MP_RAILWAY) ||
|
PlayerID owner = GetTileOwner(tile);
|
||||||
!IsTileOwner(tile + TileDiffXY(0, -1), owner) ||
|
|
||||||
(_m[tile + TileDiffXY(0, -1)].m5 == TRACK_BIT_UPPER || _m[tile + TileDiffXY(0, -1)].m5 == TRACK_BIT_LEFT))
|
|
||||||
new_ground = RAIL_GROUND_FENCE_NW;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( (!(rail&(TRACK_BIT_DIAG2|TRACK_BIT_LOWER|TRACK_BIT_RIGHT)) && (rail&TRACK_BIT_DIAG1)) || rail==(TRACK_BIT_UPPER|TRACK_BIT_LEFT)) {
|
if (rail == (TRACK_BIT_LOWER | TRACK_BIT_RIGHT) || (
|
||||||
if (!IsTileType(tile + TileDiffXY(0, 1), MP_RAILWAY) ||
|
!(rail & (TRACK_BIT_DIAG2 | TRACK_BIT_UPPER | TRACK_BIT_LEFT)) &&
|
||||||
!IsTileOwner(tile + TileDiffXY(0, 1), owner) ||
|
(rail & TRACK_BIT_DIAG1)
|
||||||
(_m[tile + TileDiffXY(0, 1)].m5 == TRACK_BIT_LOWER || _m[tile + TileDiffXY(0, 1)].m5 == TRACK_BIT_RIGHT))
|
)) {
|
||||||
new_ground = (new_ground == RAIL_GROUND_FENCE_NW) ? RAIL_GROUND_FENCE_SENW : RAIL_GROUND_FENCE_SE;
|
TileIndex n = tile + TileDiffXY(0, -1);
|
||||||
}
|
|
||||||
|
|
||||||
if ( (!(rail&(TRACK_BIT_DIAG1|TRACK_BIT_UPPER|TRACK_BIT_RIGHT)) && (rail&TRACK_BIT_DIAG2)) || rail==(TRACK_BIT_LOWER|TRACK_BIT_LEFT)) {
|
if (!IsTileType(n, MP_RAILWAY) ||
|
||||||
if (!IsTileType(tile + TileDiffXY(-1, 0), MP_RAILWAY) ||
|
!IsTileOwner(n, owner) ||
|
||||||
!IsTileOwner(tile + TileDiffXY(-1, 0), owner) ||
|
_m[n].m5 == TRACK_BIT_UPPER ||
|
||||||
(_m[tile + TileDiffXY(-1, 0)].m5 == TRACK_BIT_UPPER || _m[tile + TileDiffXY(-1, 0)].m5 == TRACK_BIT_RIGHT))
|
_m[n].m5 == TRACK_BIT_LEFT) {
|
||||||
new_ground = RAIL_GROUND_FENCE_NE;
|
new_ground = RAIL_GROUND_FENCE_NW;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ( (!(rail&(TRACK_BIT_DIAG1|TRACK_BIT_LOWER|TRACK_BIT_LEFT)) && (rail&TRACK_BIT_DIAG2)) || rail==(TRACK_BIT_UPPER|TRACK_BIT_RIGHT)) {
|
if (rail == (TRACK_BIT_UPPER | TRACK_BIT_LEFT) || (
|
||||||
if (!IsTileType(tile + TileDiffXY(1, 0), MP_RAILWAY) ||
|
!(rail & (TRACK_BIT_DIAG2 | TRACK_BIT_LOWER | TRACK_BIT_RIGHT)) &&
|
||||||
!IsTileOwner(tile + TileDiffXY(1, 0), owner) ||
|
(rail & TRACK_BIT_DIAG1)
|
||||||
(_m[tile + TileDiffXY(1, 0)].m5 == TRACK_BIT_LOWER || _m[tile + TileDiffXY(1, 0)].m5 == TRACK_BIT_LEFT))
|
)) {
|
||||||
new_ground = (new_ground == RAIL_GROUND_FENCE_NE) ? RAIL_GROUND_FENCE_NESW : RAIL_GROUND_FENCE_SW;
|
TileIndex n = tile + TileDiffXY(0, 1);
|
||||||
|
|
||||||
|
if (!IsTileType(n, MP_RAILWAY) ||
|
||||||
|
!IsTileOwner(n, owner) ||
|
||||||
|
_m[n].m5 == TRACK_BIT_LOWER ||
|
||||||
|
_m[n].m5 == TRACK_BIT_RIGHT) {
|
||||||
|
new_ground = (new_ground == RAIL_GROUND_FENCE_NW) ?
|
||||||
|
RAIL_GROUND_FENCE_SENW : RAIL_GROUND_FENCE_SE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rail == (TRACK_BIT_LOWER | TRACK_BIT_LEFT) || (
|
||||||
|
!(rail & (TRACK_BIT_DIAG1 | TRACK_BIT_UPPER | TRACK_BIT_RIGHT)) &&
|
||||||
|
(rail & TRACK_BIT_DIAG2)
|
||||||
|
)) {
|
||||||
|
TileIndex n = tile + TileDiffXY(-1, 0);
|
||||||
|
|
||||||
|
if (!IsTileType(n, MP_RAILWAY) ||
|
||||||
|
!IsTileOwner(n, owner) ||
|
||||||
|
_m[n].m5 == TRACK_BIT_UPPER ||
|
||||||
|
_m[n].m5 == TRACK_BIT_RIGHT) {
|
||||||
|
new_ground = RAIL_GROUND_FENCE_NE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rail == (TRACK_BIT_UPPER | TRACK_BIT_RIGHT) || (
|
||||||
|
!(rail & (TRACK_BIT_DIAG1 | TRACK_BIT_LOWER | TRACK_BIT_LEFT)) &&
|
||||||
|
(rail & TRACK_BIT_DIAG2)
|
||||||
|
)) {
|
||||||
|
TileIndex n = tile + TileDiffXY(1, 0);
|
||||||
|
|
||||||
|
if (!IsTileType(n, MP_RAILWAY) ||
|
||||||
|
!IsTileOwner(n, owner) ||
|
||||||
|
_m[n].m5 == TRACK_BIT_LOWER ||
|
||||||
|
_m[n].m5 == TRACK_BIT_LEFT) {
|
||||||
|
new_ground = (new_ground == RAIL_GROUND_FENCE_NE) ?
|
||||||
|
RAIL_GROUND_FENCE_NESW : RAIL_GROUND_FENCE_SW;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue