diff options
Diffstat (limited to 'source/game/StarWorldClient.cpp')
-rw-r--r-- | source/game/StarWorldClient.cpp | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/source/game/StarWorldClient.cpp b/source/game/StarWorldClient.cpp index 82c09ae..d4b8151 100644 --- a/source/game/StarWorldClient.cpp +++ b/source/game/StarWorldClient.cpp @@ -375,6 +375,33 @@ TileModificationList WorldClient::applyTileModifications(TileModificationList co return failures; } +TileModificationList WorldClient::replaceTiles(TileModificationList const& modificationList, TileDamage const& tileDamage) { + if (!inWorld()) + return {}; + + // Tell client it can't send a replace packet + if (m_clientState.netCompatibilityRules().isLegacy()) + return modificationList; + + TileModificationList success, failures; + for (auto pair : modificationList) { + if (!isTileProtected(pair.first) && WorldImpl::validateTileReplacement(pair.second)) + success.append(pair); + else + failures.append(pair); + } + + m_outgoingPackets.append(make_shared<ReplaceTileListPacket>(std::move(success), tileDamage)); + + return failures; +} + +bool WorldClient::damageWouldDestroy(Vec2I const& pos, TileLayer layer, TileDamage const& tileDamage) const { + if (!inWorld()) + return false; + return WorldImpl::damageWouldDestroy(m_tileArray, pos, layer, tileDamage); +} + float WorldClient::gravity(Vec2F const& pos) const { if (!inWorld()) return 0.0f; |