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 | |
parent | 8d0dcd11d7df92044b99ac7c35efaf9202c81512 (diff) |
Fix constant tile entity space updates
-rw-r--r-- | source/game/StarWorldServer.cpp | 11 | ||||
-rw-r--r-- | source/game/interfaces/StarTileEntity.hpp | 5 |
2 files changed, 10 insertions, 6 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; } diff --git a/source/game/interfaces/StarTileEntity.hpp b/source/game/interfaces/StarTileEntity.hpp index c9037e5..7fd366f 100644 --- a/source/game/interfaces/StarTileEntity.hpp +++ b/source/game/interfaces/StarTileEntity.hpp @@ -18,7 +18,7 @@ struct MaterialSpace { Vec2I space; MaterialId material; - Maybe<CollisionKind> prevCollision; + Maybe<CollisionKind> prevCollision; //exclude from == }; DataStream& operator<<(DataStream& ds, MaterialSpace const& materialSpace); @@ -92,8 +92,7 @@ inline MaterialSpace::MaterialSpace(Vec2I space, MaterialId material) inline bool MaterialSpace::operator==(MaterialSpace const& rhs) const { return space == rhs.space - && material == rhs.material - && prevCollision == rhs.prevCollision; + && material == rhs.material; } } |