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

Method liquidCollision

source/game/StarWorldGeneration.cpp:114–141  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

112}
113
114void LiquidWorld::liquidCollision(Vec2I const& liquidPos, LiquidId liquidId, Vec2I const& blockPos) {
115 auto const& blockTile = m_worldServer->getServerTile(blockPos);
116
117 if (auto materialInteraction = m_materialDatabase->liquidMaterialInteraction(liquidId, blockTile.foreground)) {
118 if ((!materialInteraction->topOnly || liquidPos[1] > blockPos[1]) && m_worldServer->liquidLevel(liquidPos).level >= materialInteraction->consumeLiquid) {
119 auto modifyLiquidTile = m_worldServer->modifyServerTile(liquidPos);
120 auto modifyBlockTile = m_worldServer->modifyServerTile(blockPos);
121 if (modifyLiquidTile && modifyBlockTile) {
122 modifyLiquidTile->liquid.take(materialInteraction->consumeLiquid);
123 modifyBlockTile->foreground = materialInteraction->transformTo;
124 if (!m_materialDatabase->isMultiColor(materialInteraction->transformTo))
125 modifyBlockTile->foregroundColorVariant = DefaultMaterialColorVariant;
126 m_worldServer->activateLiquidLocation(liquidPos);
127 }
128 }
129 }
130 if (auto modInteraction = m_materialDatabase->liquidModInteraction(liquidId, blockTile.foregroundMod)) {
131 if ((!modInteraction->topOnly || liquidPos[1] > blockPos[1]) && m_worldServer->liquidLevel(liquidPos).level >= modInteraction->consumeLiquid) {
132 auto modifyLiquidTile = m_worldServer->modifyServerTile(liquidPos);
133 auto modifyBlockTile = m_worldServer->modifyServerTile(blockPos);
134 if (modifyLiquidTile && modifyBlockTile) {
135 modifyLiquidTile->liquid.take(modInteraction->consumeLiquid);
136 modifyBlockTile->foregroundMod = modInteraction->transformTo;
137 m_worldServer->activateLiquidLocation(liquidPos);
138 }
139 }
140 }
141}
142
143FallingBlocksWorld::FallingBlocksWorld(WorldServer* w)
144 : m_worldServer(w), m_materialDatabase(Root::singleton().materialDatabase()) {}

Callers

nothing calls this directly

Calls 7

modifyServerTileMethod · 0.80
isMultiColorMethod · 0.80
liquidModInteractionMethod · 0.80
liquidLevelMethod · 0.45
takeMethod · 0.45

Tested by

no test coverage detected