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

Method replaceTile

source/game/StarWorldServer.cpp:891–916  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

889}
890
891bool WorldServer::replaceTile(Vec2I const& pos, TileModification const& modification, TileDamage const& tileDamage) {
892 if (isTileProtected(pos))
893 return false;
894
895 if (!WorldImpl::validateTileReplacement(modification))
896 return false;
897
898 if (auto placeMaterial = modification.ptr<PlaceMaterial>()) {
899 if (!isTileConnectable(pos, placeMaterial->layer, true))
900 return false;
901
902 if (auto tile = m_tileArray->modifyTile(pos)) {
903 auto damageParameters = WorldImpl::tileDamageParameters(tile, placeMaterial->layer, tileDamage);
904 bool harvested = tileDamage.amount >= 0 && tileDamage.harvestLevel >= damageParameters.requiredHarvestLevel();
905 auto damage = placeMaterial->layer == TileLayer::Foreground ? tile->foregroundDamage : tile->backgroundDamage;
906 Vec2F dropPosition = centerOfTile(pos);
907
908 for (auto drop : destroyBlock(placeMaterial->layer, pos, harvested, !tileDamageIsPenetrating(damage.damageType()), false))
909 addEntity(ItemDrop::createRandomizedDrop(drop, dropPosition));
910
911 return true;
912 }
913 }
914
915 return false;
916}
917
918TileModificationList WorldServer::replaceTiles(TileModificationList const& modificationList, TileDamage const& tileDamage, bool applyDamage) {
919 TileModificationList success, failures;

Callers

nothing calls this directly

Calls 7

validateTileReplacementFunction · 0.85
tileDamageParametersFunction · 0.85
centerOfTileFunction · 0.85
tileDamageIsPenetratingFunction · 0.85
requiredHarvestLevelMethod · 0.80
damageTypeMethod · 0.60
modifyTileMethod · 0.45

Tested by

no test coverage detected