Веб-сайт самохостера Lotigara

summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKae <80987908+Novaenia@users.noreply.github.com>2023-11-30 21:48:31 +1100
committerKae <80987908+Novaenia@users.noreply.github.com>2023-11-30 21:48:31 +1100
commit2a56c3f9e33c9c381d1f5b14cffc5905f0739b19 (patch)
tree703668e196b915f206984587eb14bc434f7e3f50
parent8d0dcd11d7df92044b99ac7c35efaf9202c81512 (diff)
Fix constant tile entity space updates
-rw-r--r--source/game/StarWorldServer.cpp11
-rw-r--r--source/game/interfaces/StarTileEntity.hpp5
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;
}
}