1
0
Fork 0

Codechange: Slightly simplify code in clear_cmd.cpp.

pull/12838/head
J0anJosep 2024-06-30 21:11:38 +02:00 committed by rubidium42
parent 4e026e448c
commit 1e0004bcd6
1 changed files with 13 additions and 31 deletions

View File

@ -144,27 +144,11 @@ static void UpdateFences(TileIndex tile)
assert(IsTileType(tile, MP_CLEAR) && IsClearGround(tile, CLEAR_FIELDS));
bool dirty = false;
bool neighbour = (IsTileType(TileAddXY(tile, 1, 0), MP_CLEAR) && IsClearGround(TileAddXY(tile, 1, 0), CLEAR_FIELDS));
if (!neighbour && GetFence(tile, DIAGDIR_SW) == 0) {
SetFence(tile, DIAGDIR_SW, 3);
dirty = true;
}
neighbour = (IsTileType(TileAddXY(tile, 0, 1), MP_CLEAR) && IsClearGround(TileAddXY(tile, 0, 1), CLEAR_FIELDS));
if (!neighbour && GetFence(tile, DIAGDIR_SE) == 0) {
SetFence(tile, DIAGDIR_SE, 3);
dirty = true;
}
neighbour = (IsTileType(TileAddXY(tile, -1, 0), MP_CLEAR) && IsClearGround(TileAddXY(tile, -1, 0), CLEAR_FIELDS));
if (!neighbour && GetFence(tile, DIAGDIR_NE) == 0) {
SetFence(tile, DIAGDIR_NE, 3);
dirty = true;
}
neighbour = (IsTileType(TileAddXY(tile, 0, -1), MP_CLEAR) && IsClearGround(TileAddXY(tile, 0, -1), CLEAR_FIELDS));
if (!neighbour && GetFence(tile, DIAGDIR_NW) == 0) {
SetFence(tile, DIAGDIR_NW, 3);
for (DiagDirection dir = DIAGDIR_BEGIN; dir < DIAGDIR_END; dir++) {
if (GetFence(tile, dir) != 0) continue;
TileIndex neighbour = tile + TileOffsByDiagDir(dir);
if (IsTileType(neighbour, MP_CLEAR) && IsClearGround(neighbour, CLEAR_FIELDS)) continue;
SetFence(tile, dir, 3);
dirty = true;
}
@ -177,30 +161,28 @@ static void TileLoopClearAlps(TileIndex tile)
{
int k = GetTileZ(tile) - GetSnowLine() + 1;
if (k < 0) {
if (!IsSnowTile(tile)) {
/* Below the snow line, do nothing if no snow. */
if (!IsSnowTile(tile)) return;
} else {
/* At or above the snow line, make snow tile if needed. */
if (!IsSnowTile(tile)) {
if (k >= 0) {
MakeSnow(tile);
MarkTileDirtyByTile(tile);
return;
}
return;
}
/* Update snow density. */
uint current_density = GetClearDensity(tile);
uint req_density = (k < 0) ? 0u : std::min<uint>(k, 3u);
if (current_density < req_density) {
AddClearDensity(tile, 1);
} else if (current_density > req_density) {
AddClearDensity(tile, -1);
} else {
if (current_density == req_density) {
/* Density at the required level. */
if (k >= 0) return;
ClearSnow(tile);
} else {
AddClearDensity(tile, current_density < req_density ? 1 : -1);
}
MarkTileDirtyByTile(tile);
}