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

Method place_orphan

plugins/3dveins.cpp:1336–1407  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1334}
1335
1336bool VeinGenerator::place_orphan(t_veinkey key, int size, GeoLayer *from)
1337{
1338 std::map<int, VeinExtent::PVec> best;
1339
1340 for (auto it = biomes.begin(); it != biomes.end(); ++it)
1341 {
1342 auto &layers = it->second->layers;
1343
1344 for (size_t i = 0; i < layers.size(); i++)
1345 {
1346 if (layers[i]->mineral_tiles >= layers[i]->unmined_tiles)
1347 continue;
1348
1349 VeinExtent::Ptr vein = map_find(layers[i]->veins, key);
1350 if (!vein)
1351 continue;
1352
1353 int dist = std::min(
1354 layers[i]->min_z() - from->max_z(),
1355 from->min_z() - layers[i]->max_z()
1356 );
1357
1358 best[std::max(0, dist)].push_back(vein);
1359 }
1360 }
1361
1362 if (best.empty())
1363 {
1364 WARN(process,out).print(
1365 "Could not place orphaned vein {} {} anywhere.\n",
1366 MaterialInfo(0,key.first).getToken(),
1367 ENUM_KEY_STR(inclusion_type, key.second)
1368 );
1369
1370 return true;
1371 }
1372
1373 for (auto it = best.begin(); size > 0 && it != best.end(); ++it)
1374 {
1375 auto &vec = it->second;
1376
1377 int free = 0;
1378 for (size_t i = 0; i < vec.size(); i++)
1379 {
1380 auto layer = vec[i]->layers[0];
1381 free += layer->unmined_tiles - layer->mineral_tiles;
1382 }
1383 float coeff = float(size)/free;
1384
1385 for (size_t i = 0; i < vec.size(); i++)
1386 {
1387 auto layer = vec[i]->layers[0];
1388 int cfree = std::max(0, layer->unmined_tiles - layer->mineral_tiles);
1389 int cnt = std::min(size, std::min(cfree, int(ceilf(cfree*coeff))));
1390 vec[i]->add_tiles(cnt);
1391 layer->mineral_tiles += cnt;
1392 size -= cnt;
1393 }

Callers

nothing calls this directly

Calls 11

map_findFunction · 0.85
min_zMethod · 0.80
max_zMethod · 0.80
add_tilesMethod · 0.80
MaterialInfoClass · 0.50
beginMethod · 0.45
endMethod · 0.45
sizeMethod · 0.45
emptyMethod · 0.45
printMethod · 0.45
getTokenMethod · 0.45

Tested by

no test coverage detected