diff options
author | Kae <80987908+Novaenia@users.noreply.github.com> | 2023-11-30 21:48:31 +1100 |
---|---|---|
committer | Kae <80987908+Novaenia@users.noreply.github.com> | 2023-11-30 21:48:31 +1100 |
commit | 2a56c3f9e33c9c381d1f5b14cffc5905f0739b19 (patch) | |
tree | 703668e196b915f206984587eb14bc434f7e3f50 /source/game/StarWorldServer.cpp | |
parent | 8d0dcd11d7df92044b99ac7c35efaf9202c81512 (diff) |
Fix constant tile entity space updates
Diffstat (limited to 'source/game/StarWorldServer.cpp')
-rw-r--r-- | source/game/StarWorldServer.cpp | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/source/game/StarWorldServer.cpp b/source/game/StarWorldServer.cpp index 26ce363..a722b5a 100644 --- a/source/game/StarWorldServer.cpp +++ b/source/game/StarWorldServer.cpp @@ -1538,15 +1538,20 @@ void WorldServer::updateTileEntityTiles(TileEntityPtr const& entity, bool removi if (tile && (tile->foreground == EmptyMaterialId || tile->foreground == materialSpace.material)) { tile->foreground = materialSpace.material; tile->foregroundMod = NoModId; + bool hadRoot = tile->rootSource.isValid(); if (isRealMaterial(materialSpace.material)) tile->rootSource = entity->tilePosition(); - passedSpaces.emplaceAppend(materialSpace).prevCollision.emplace(tile->collision); + auto& space = passedSpaces.emplaceAppend(materialSpace); + if (hadRoot) + space.prevCollision.emplace(tile->collision); updatedCollision = tile->updateCollision(materialDatabase->materialCollisionKind(tile->foreground)); updated = true; - passedSpaces.emplaceAppend(materialSpace); } else if (tile && tile->collision < CollisionKind::Dynamic) { - passedSpaces.emplaceAppend(materialSpace).prevCollision.emplace(tile->collision); + bool hadRoot = tile->rootSource.isValid(); + auto& space = passedSpaces.emplaceAppend(materialSpace); + if (hadRoot) + space.prevCollision.emplace(tile->collision); updatedCollision = tile->updateCollision(materialDatabase->materialCollisionKind(materialSpace.material)); updated = true; } |