Convert to or from snowy tiles. */
| 186 | |
| 187 | /** Convert to or from snowy tiles. */ |
| 188 | static void TileLoopClearAlps(TileIndex tile) |
| 189 | { |
| 190 | int k = GetTileZ(tile) - GetSnowLine() + 1; |
| 191 | |
| 192 | if (!IsSnowTile(tile)) { |
| 193 | /* Below the snow line, do nothing if no snow. */ |
| 194 | /* At or above the snow line, make snow tile if needed. */ |
| 195 | if (k >= 0) { |
| 196 | /* Snow density is started at 0 so that it can gradually reach the required density. */ |
| 197 | MakeSnow(tile, 0); |
| 198 | MarkTileDirtyByTile(tile); |
| 199 | } |
| 200 | return; |
| 201 | } |
| 202 | |
| 203 | /* Update snow density. */ |
| 204 | uint current_density = GetClearDensity(tile); |
| 205 | uint req_density = (k < 0) ? 0u : std::min<uint>(k, 3u); |
| 206 | |
| 207 | if (current_density == req_density) { |
| 208 | /* Density at the required level. */ |
| 209 | if (k >= 0) return; |
| 210 | ClearSnow(tile); |
| 211 | } else { |
| 212 | AddClearDensity(tile, current_density < req_density ? 1 : -1); |
| 213 | } |
| 214 | |
| 215 | MarkTileDirtyByTile(tile); |
| 216 | } |
| 217 | |
| 218 | /** |
| 219 | * Tests if at least one surrounding tile is non-desert |
no test coverage detected