Map Pausing Fixes (#2520)

This commit is contained in:
Acruid
2022-02-12 15:54:03 +11:00
committed by GitHub
parent b540f04a7a
commit 5a28c16cae
16 changed files with 484 additions and 142 deletions
@@ -1,25 +1,24 @@
using Robust.Shared.IoC;
using Robust.Shared.Timing;
using Robust.Shared.Map;
namespace Robust.Shared.GameObjects
{
[RegisterComponent]
public sealed class IgnorePauseComponent : Component
{
[Dependency] private readonly IEntityManager _entMan = default!;
protected override void OnAdd()
{
base.OnAdd();
_entMan.GetComponent<MetaDataComponent>(Owner).EntityPaused = false;
IoCManager.Resolve<IEntityManager>().GetComponent<MetaDataComponent>(Owner).EntityPaused = false;
}
protected override void OnRemove()
{
base.OnRemove();
if (IoCManager.Resolve<IPauseManager>().IsMapPaused(_entMan.GetComponent<TransformComponent>(Owner).MapID))
var entMan = IoCManager.Resolve<IEntityManager>();
if (IoCManager.Resolve<IMapManager>().IsMapPaused(entMan.GetComponent<TransformComponent>(Owner).MapID))
{
_entMan.GetComponent<MetaDataComponent>(Owner).EntityPaused = true;
entMan.GetComponent<MetaDataComponent>(Owner).EntityPaused = true;
}
}
}
@@ -147,9 +147,11 @@ namespace Robust.Shared.GameObjects
get => _entityPaused;
set
{
if (_entityPaused == value)
return;
var entMan = IoCManager.Resolve<IEntityManager>();
if (_entityPaused == value || value && entMan.HasComponent<IgnorePauseComponent>(Owner))
if (value && entMan.HasComponent<IgnorePauseComponent>(Owner))
return;
_entityPaused = value;
@@ -728,17 +728,27 @@ namespace Robust.Shared.GameObjects
var oldMapId = MapID;
//Set Paused state
var mapPaused = _mapManager.IsMapPaused(newMapId);
var metaData = _entMan.GetComponent<MetaDataComponent>(Owner);
metaData.EntityPaused = mapPaused;
MapID = newMapId;
MapIdChanged(oldMapId);
UpdateChildMapIdsRecursive(MapID, _entMan);
UpdateChildMapIdsRecursive(MapID, _entMan, mapPaused);
}
private void UpdateChildMapIdsRecursive(MapId newMapId, IEntityManager entMan)
private void UpdateChildMapIdsRecursive(MapId newMapId, IEntityManager entMan, bool mapPaused)
{
var xforms = _entMan.GetEntityQuery<TransformComponent>();
var metaEnts = _entMan.GetEntityQuery<MetaDataComponent>();
foreach (var child in _children)
{
//Set Paused state
var metaData = metaEnts.GetComponent(child);
metaData.EntityPaused = mapPaused;
var concrete = xforms.GetComponent(child);
var old = concrete.MapID;
@@ -747,7 +757,7 @@ namespace Robust.Shared.GameObjects
if (concrete.ChildCount != 0)
{
concrete.UpdateChildMapIdsRecursive(newMapId, entMan);
concrete.UpdateChildMapIdsRecursive(newMapId, entMan, mapPaused);
}
}
}