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

Method updateDamagedBlocks

source/game/StarWorldServer.cpp:2042–2102  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2040}
2041
2042void WorldServer::updateDamagedBlocks(float dt) {
2043 auto materialDatabase = Root::singleton().materialDatabase();
2044
2045 for (auto pos : m_damagedBlocks.values()) {
2046 auto tile = m_tileArray->modifyTile(pos);
2047 if (!tile) {
2048 m_damagedBlocks.remove(pos);
2049 continue;
2050 }
2051
2052 Vec2F dropPosition = centerOfTile(pos);
2053 if (tile->foregroundDamage.dead()) {
2054 bool harvested = tile->foregroundDamage.harvested();
2055 for (auto drop : destroyBlock(TileLayer::Foreground, pos, harvested, !tileDamageIsPenetrating(tile->foregroundDamage.damageType())))
2056 addEntity(ItemDrop::createRandomizedDrop(drop, dropPosition));
2057
2058 } else if (tile->foregroundDamage.damaged()) {
2059 if (isRealMaterial(tile->foreground)) {
2060 if (isRealMod(tile->foregroundMod)) {
2061 if (tileDamageIsPenetrating(tile->foregroundDamage.damageType()))
2062 tile->foregroundDamage.recover(materialDatabase->materialDamageParameters(tile->foreground), dt);
2063 else if (materialDatabase->modBreaksWithTile(tile->foregroundMod))
2064 tile->foregroundDamage.recover(materialDatabase->modDamageParameters(tile->foregroundMod).sum(materialDatabase->materialDamageParameters(tile->foreground)), dt);
2065 else
2066 tile->foregroundDamage.recover(materialDatabase->modDamageParameters(tile->foregroundMod), dt);
2067 } else
2068 tile->foregroundDamage.recover(materialDatabase->materialDamageParameters(tile->foreground), dt);
2069 } else
2070 tile->foregroundDamage.reset();
2071
2072 queueTileDamageUpdates(pos, TileLayer::Foreground);
2073 }
2074
2075 if (tile->backgroundDamage.dead()) {
2076 bool harvested = tile->backgroundDamage.harvested();
2077 for (auto drop : destroyBlock(TileLayer::Background, pos, harvested, !tileDamageIsPenetrating(tile->backgroundDamage.damageType())))
2078 addEntity(ItemDrop::createRandomizedDrop(drop, dropPosition));
2079
2080 } else if (tile->backgroundDamage.damaged()) {
2081 if (isRealMaterial(tile->background)) {
2082 if (isRealMod(tile->backgroundMod)) {
2083 if (tileDamageIsPenetrating(tile->backgroundDamage.damageType()))
2084 tile->backgroundDamage.recover(materialDatabase->materialDamageParameters(tile->background), dt);
2085 else if (materialDatabase->modBreaksWithTile(tile->backgroundMod))
2086 tile->backgroundDamage.recover(materialDatabase->modDamageParameters(tile->backgroundMod).sum(materialDatabase->materialDamageParameters(tile->background)), dt);
2087 else
2088 tile->backgroundDamage.recover(materialDatabase->modDamageParameters(tile->backgroundMod), dt);
2089 } else {
2090 tile->backgroundDamage.recover(materialDatabase->materialDamageParameters(tile->background), dt);
2091 }
2092 } else {
2093 tile->backgroundDamage.reset();
2094 }
2095
2096 queueTileDamageUpdates(pos, TileLayer::Background);
2097 }
2098
2099 if (tile->backgroundDamage.healthy() && tile->foregroundDamage.healthy())

Callers

nothing calls this directly

Calls 15

singletonClass · 0.85
centerOfTileFunction · 0.85
tileDamageIsPenetratingFunction · 0.85
isRealMaterialFunction · 0.85
isRealModFunction · 0.85
materialDatabaseMethod · 0.80
harvestedMethod · 0.80
damagedMethod · 0.80
recoverMethod · 0.80
modBreaksWithTileMethod · 0.80
modDamageParametersMethod · 0.80

Tested by

no test coverage detected