propagate light, outside, and subterranean flags to open tiles below this one
| 211 | |
| 212 | // propagate light, outside, and subterranean flags to open tiles below this one |
| 213 | static void propagate_vertical_flags(MapExtras::MapCache &map, |
| 214 | const DFCoord &pos) { |
| 215 | df::tile_designation td = map.designationAt(pos); |
| 216 | |
| 217 | if (!map.ensureBlockAt(DFCoord(pos.x, pos.y, pos.z+1))) { |
| 218 | // only the sky above |
| 219 | td.bits.light = true; |
| 220 | td.bits.outside = true; |
| 221 | td.bits.subterranean = false; |
| 222 | } |
| 223 | |
| 224 | int32_t zlevel = pos.z; |
| 225 | df::tiletype_shape shape = |
| 226 | tileShape(map.tiletypeAt(DFCoord(pos.x, pos.y, zlevel))); |
| 227 | while ((shape == df::tiletype_shape::EMPTY |
| 228 | || shape == df::tiletype_shape::RAMP_TOP) |
| 229 | && map.ensureBlockAt(DFCoord(pos.x, pos.y, --zlevel))) { |
| 230 | DFCoord pos_below(pos.x, pos.y, zlevel); |
| 231 | df::tile_designation td_below = map.designationAt(pos_below); |
| 232 | if (td_below.bits.light == td.bits.light |
| 233 | && td_below.bits.outside == td.bits.outside |
| 234 | && td_below.bits.subterranean == td.bits.subterranean) |
| 235 | break; |
| 236 | td_below.bits.light = td.bits.light; |
| 237 | td_below.bits.outside = td.bits.outside; |
| 238 | td_below.bits.subterranean = td.bits.subterranean; |
| 239 | map.setDesignationAt(pos_below, td_below); |
| 240 | shape = tileShape(map.tiletypeAt(pos_below)); |
| 241 | } |
| 242 | } |
| 243 | |
| 244 | static bool can_dig_default(df::tiletype tt) { |
| 245 | df::tiletype_shape shape = tileShape(tt); |
no test coverage detected