fix(rendering): preserve canonical projection ownership

This commit is contained in:
Erik 2026-07-25 00:47:52 +02:00
parent d8d9897376
commit accd402dd7
2 changed files with 43 additions and 6 deletions

View file

@ -522,13 +522,22 @@ internal sealed class CurrentRenderSceneOracle :
tuple.LandblockId);
if (!_dispatcherProjectionByEntity.TryGetValue(
tuple.Entity,
out CurrentRenderProjectionFingerprint projection)
|| projection.LandblockId != cacheLandblockId)
out CurrentRenderProjectionFingerprint projection))
{
projection = CreateFingerprint(
cacheLandblockId,
tuple.Entity,
ProjectionClassOf(tuple.Entity));
// Logical projection identity remains the canonical owner
// captured by the partition. The dispatcher's cache hint is
// a separate routing fact and can intentionally be the
// temporary player-bucket landblock for outdoor objects.
// Conflating the two rewrote identity at this observer edge.
if (!_projectionByEntity.TryGetValue(
tuple.Entity,
out projection))
{
projection = CreateFingerprint(
cacheLandblockId,
tuple.Entity,
ProjectionClassOf(tuple.Entity));
}
_dispatcherProjectionByEntity[tuple.Entity] = projection;
}
var candidate = new CurrentRenderDispatcherFingerprint(