Fix entities getting shuffled in the map renderer (#20100)

This commit is contained in:
DrSmugleaf
2023-09-13 00:12:35 -07:00
committed by GitHub
parent 89b670d0c0
commit 5c15f52703

View File

@@ -9,7 +9,6 @@ using Robust.Client.GameObjects;
using Robust.Shared.GameObjects; using Robust.Shared.GameObjects;
using Robust.Shared.Map; using Robust.Shared.Map;
using Robust.Shared.Map.Components; using Robust.Shared.Map.Components;
using Robust.Shared.Maths;
using Robust.Shared.Timing; using Robust.Shared.Timing;
using Robust.Shared.Utility; using Robust.Shared.Utility;
using SixLabors.ImageSharp; using SixLabors.ImageSharp;
@@ -23,7 +22,6 @@ namespace Content.MapRenderer.Painters
private readonly DecalPainter _decalPainter; private readonly DecalPainter _decalPainter;
private readonly IEntityManager _cEntityManager; private readonly IEntityManager _cEntityManager;
private readonly IMapManager _cMapManager;
private readonly IEntityManager _sEntityManager; private readonly IEntityManager _sEntityManager;
private readonly IMapManager _sMapManager; private readonly IMapManager _sMapManager;
@@ -37,7 +35,6 @@ namespace Content.MapRenderer.Painters
_decalPainter = new DecalPainter(client, server); _decalPainter = new DecalPainter(client, server);
_cEntityManager = client.ResolveDependency<IEntityManager>(); _cEntityManager = client.ResolveDependency<IEntityManager>();
_cMapManager = client.ResolveDependency<IMapManager>();
_sEntityManager = server.ResolveDependency<IEntityManager>(); _sEntityManager = server.ResolveDependency<IEntityManager>();
_sMapManager = server.ResolveDependency<IMapManager>(); _sMapManager = server.ResolveDependency<IMapManager>();
@@ -73,26 +70,27 @@ namespace Content.MapRenderer.Painters
var components = new ConcurrentDictionary<EntityUid, List<EntityData>>(); var components = new ConcurrentDictionary<EntityUid, List<EntityData>>();
foreach (var entity in _sEntityManager.GetEntities()) foreach (var serverEntity in _sEntityManager.GetEntities())
{ {
if (!_cEntityManager.TryGetComponent(entity, out SpriteComponent? sprite)) var clientEntity = _cEntityManager.GetEntity(_sEntityManager.GetNetEntity(serverEntity));
if (!_cEntityManager.TryGetComponent(clientEntity, out SpriteComponent? sprite))
{ {
continue; continue;
} }
var prototype = _sEntityManager.GetComponent<MetaDataComponent>(entity).EntityPrototype; var prototype = _sEntityManager.GetComponent<MetaDataComponent>(serverEntity).EntityPrototype;
if (prototype == null) if (prototype == null)
{ {
continue; continue;
} }
var transform = _sEntityManager.GetComponent<TransformComponent>(entity); var transform = _sEntityManager.GetComponent<TransformComponent>(serverEntity);
if (_sMapManager.TryGetGrid(transform.GridUid, out var grid)) if (_sMapManager.TryGetGrid(transform.GridUid, out var grid))
{ {
var position = transform.LocalPosition; var position = transform.LocalPosition;
var (x, y) = TransformLocalPosition(position, grid); var (x, y) = TransformLocalPosition(position, grid);
var data = new EntityData(entity, sprite, x, y); var data = new EntityData(serverEntity, sprite, x, y);
components.GetOrAdd(transform.GridUid.Value, _ => new List<EntityData>()).Add(data); components.GetOrAdd(transform.GridUid.Value, _ => new List<EntityData>()).Add(data);
} }