MCPcopy Create free account
hub / github.com/OpenStarbound/OpenStarbound / collectLiquid

Method collectLiquid

source/game/StarWorldServer.cpp:1097–1137  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1095}
1096
1097ItemDescriptor WorldServer::collectLiquid(List<Vec2I> const& tilePositions, LiquidId liquidId) {
1098 float bucketSize = Root::singleton().assets()->json("/items/defaultParameters.config:liquidItems.bucketSize").toFloat();
1099 unsigned drainedUnits = 0;
1100 float nextUnit = bucketSize;
1101 List<ServerTile*> maybeDrainTiles;
1102
1103 for (auto pos : tilePositions) {
1104 ServerTile* tile = m_tileArray->modifyTile(pos);
1105 if (tile->liquid.liquid == liquidId && !isTileProtected(pos)) {
1106 if (tile->liquid.level >= nextUnit) {
1107 tile->liquid.take(nextUnit);
1108 nextUnit = bucketSize;
1109 drainedUnits++;
1110
1111 for (auto previousTile : maybeDrainTiles)
1112 previousTile->liquid.take(previousTile->liquid.level);
1113
1114 maybeDrainTiles.clear();
1115 }
1116
1117 if (tile->liquid.level > 0) {
1118 nextUnit -= tile->liquid.level;
1119 maybeDrainTiles.append(tile);
1120 }
1121
1122 for (auto const& pair : m_clientInfo) {
1123 if (pair.second->activeSectors.contains(m_tileArray->sectorFor(pos)))
1124 pair.second->pendingLiquidUpdates.add(pos);
1125 }
1126 m_liquidEngine->visitLocation(pos);
1127 }
1128 }
1129
1130 if (drainedUnits > 0) {
1131 auto liquidConfig = Root::singleton().liquidsDatabase()->liquidSettings(liquidId);
1132 if (liquidConfig && liquidConfig->itemDrop)
1133 return liquidConfig->itemDrop.multiply(drainedUnits);
1134 }
1135
1136 return ItemDescriptor();
1137}
1138
1139bool WorldServer::placeDungeon(String const& dungeonName, Vec2I const& position, Maybe<DungeonId> dungeonId, bool forcePlacement) {
1140 m_generatingDungeon = true;

Callers

nothing calls this directly

Calls 15

singletonClass · 0.85
ItemDescriptorClass · 0.85
toFloatMethod · 0.80
jsonMethod · 0.80
assetsMethod · 0.80
liquidSettingsMethod · 0.80
liquidsDatabaseMethod · 0.80
modifyTileMethod · 0.45
takeMethod · 0.45
clearMethod · 0.45
appendMethod · 0.45
containsMethod · 0.45

Tested by

no test coverage detected