| 112 | } |
| 113 | |
| 114 | void 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 | |
| 143 | FallingBlocksWorld::FallingBlocksWorld(WorldServer* w) |
| 144 | : m_worldServer(w), m_materialDatabase(Root::singleton().materialDatabase()) {} |
nothing calls this directly
no test coverage detected