MCPcopy Create free account
hub / github.com/DFHack/dfhack / propagate_vertical_flags

Function propagate_vertical_flags

plugins/dig-now.cpp:213–242  ·  view source on GitHub ↗

propagate light, outside, and subterranean flags to open tiles below this one

Source from the content-addressed store, hash-verified

211
212// propagate light, outside, and subterranean flags to open tiles below this one
213static 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
244static bool can_dig_default(df::tiletype tt) {
245 df::tiletype_shape shape = tileShape(tt);

Callers 1

dig_tileFunction · 0.85

Calls 3

tileShapeFunction · 0.85
tiletypeAtMethod · 0.80
setDesignationAtMethod · 0.80

Tested by

no test coverage detected