Makes a lot of entity systems unsubscribe from events on shutdown.

This commit is contained in:
Vera Aguilera Puerto
2021-04-09 16:08:12 +02:00
parent c28f22ebff
commit 03cd390478
15 changed files with 119 additions and 28 deletions

View File

@@ -51,8 +51,12 @@ namespace Content.Client.GameObjects.EntitySystems
/// <inheritdoc />
public override void Shutdown()
{
CommandBinds.Unregister<ConstructionSystem>();
base.Shutdown();
UnsubscribeLocalEvent<PlayerAttachSysMessage>();
UnsubscribeNetworkEvent<AckStructureConstructionMessage>();
CommandBinds.Unregister<ConstructionSystem>();
}
public event EventHandler<CraftingAvailabilityChangedArgs>? CraftingAvailabilityChanged;

View File

@@ -40,6 +40,12 @@ namespace Content.Client.GameObjects.EntitySystems.DoAfter
SubscribeLocalEvent<PlayerAttachSysMessage>(HandlePlayerAttached);
}
public override void Shutdown()
{
base.Shutdown();
UnsubscribeLocalEvent<PlayerAttachSysMessage>();
}
private void HandlePlayerAttached(PlayerAttachSysMessage message)
{
_attachedEntity = message.AttachedEntity;

View File

@@ -46,6 +46,13 @@ namespace Content.Client.GameObjects.EntitySystems.HealthOverlay
SubscribeLocalEvent<PlayerAttachSysMessage>(HandlePlayerAttached);
}
public override void Shutdown()
{
base.Shutdown();
UnsubscribeLocalEvent<PlayerAttachSysMessage>();
}
public void Reset()
{
foreach (var gui in _guis.Values)

View File

@@ -24,9 +24,16 @@ namespace Content.Client.GameObjects.EntitySystems
/// <inheritdoc />
public override void Initialize()
{
SubscribeLocalEvent<IconSmoothDirtyEvent>(HandleDirtyEvent);
base.Initialize();
IoCManager.InjectDependencies(this);
SubscribeLocalEvent<IconSmoothDirtyEvent>(HandleDirtyEvent);
}
public override void Shutdown()
{
base.Shutdown();
UnsubscribeLocalEvent<IconSmoothDirtyEvent>();
}
public override void FrameUpdate(float frameTime)

View File

@@ -46,7 +46,6 @@ namespace Content.Client.GameObjects.EntitySystems
public override void Initialize()
{
base.Initialize();
IoCManager.InjectDependencies(this);
SubscribeNetworkEvent<VerbSystemMessages.VerbsResponseMessage>(FillEntityPopup);
SubscribeNetworkEvent<PlayerContainerVisibilityMessage>(HandleContainerVisibilityMessage);
@@ -62,11 +61,14 @@ namespace Content.Client.GameObjects.EntitySystems
public override void Shutdown()
{
base.Shutdown();
UnsubscribeNetworkEvent<VerbSystemMessages.VerbsResponseMessage>();
UnsubscribeNetworkEvent<PlayerContainerVisibilityMessage>();
UnsubscribeLocalEvent<MoveEvent>();
_contextMenuPresenter?.Dispose();
CommandBinds.Unregister<VerbSystem>();
base.Shutdown();
}
public void Reset()

View File

@@ -17,6 +17,13 @@ namespace Content.Client.GameObjects.EntitySystems
SubscribeLocalEvent<WindowSmoothDirtyEvent>(HandleDirtyEvent);
}
public override void Shutdown()
{
base.Shutdown();
UnsubscribeLocalEvent<WindowSmoothDirtyEvent>();
}
private void HandleDirtyEvent(WindowSmoothDirtyEvent ev)
{
if (ev.Sender.HasComponent<WindowComponent>())

View File

@@ -454,6 +454,13 @@ namespace Content.IntegrationTests.Tests.Networking
SubscribeLocalEvent<SetFooMessage>(HandleMessage);
}
public override void Shutdown()
{
base.Shutdown();
UnsubscribeNetworkEvent<SetFooMessage>();
UnsubscribeLocalEvent<SetFooMessage>();
}
private void HandleMessage(SetFooMessage message, EntitySessionEventArgs args)
{
var entity = EntityManager.GetEntity(message.Uid);

View File

@@ -45,6 +45,13 @@ namespace Content.Server.GameObjects.EntitySystems.AI
SubscribeLocalEvent<MobStateChangedMessage>(MobStateChanged);
}
public override void Shutdown()
{
base.Shutdown();
UnsubscribeLocalEvent<SleepAiMessage>();
UnsubscribeLocalEvent<MobStateChangedMessage>();
}
/// <inheritdoc />
public override void Update(float frameTime)
{

View File

@@ -90,6 +90,22 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Accessible
_mapManager.OnGridRemoved += GridRemoved;
}
public override void Shutdown()
{
base.Shutdown();
_queuedUpdates.Clear();
_regions.Clear();
_cachedAccessible.Clear();
_queuedCacheDeletions.Clear();
_mapManager.OnGridRemoved -= GridRemoved;
UnsubscribeLocalEvent<PathfindingChunkUpdateMessage>();
UnsubscribeNetworkEvent<SharedAiDebug.SubscribeReachableMessage>();
UnsubscribeNetworkEvent<SharedAiDebug.UnsubscribeReachableMessage>();
}
private void GridRemoved(MapId mapId, GridId gridId)
{
_regions.Remove(gridId);
@@ -126,20 +142,6 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Accessible
_queuedCacheDeletions.Clear();
}
public override void Shutdown()
{
base.Shutdown();
_queuedUpdates.Clear();
_regions.Clear();
_cachedAccessible.Clear();
_queuedCacheDeletions.Clear();
_mapManager.OnGridRemoved -= GridRemoved;
UnsubscribeLocalEvent<PathfindingChunkUpdateMessage>();
UnsubscribeLocalEvent<PlayerAttachSystemMessage>();
UnsubscribeNetworkEvent<SharedAiDebug.SubscribeReachableMessage>();
UnsubscribeNetworkEvent<SharedAiDebug.UnsubscribeReachableMessage>();
}
#if DEBUG
private void HandleSubscription(SharedAiDebug.SubscribeReachableMessage message, EntitySessionEventArgs eventArgs)
{

View File

@@ -22,6 +22,14 @@ namespace Content.Server.GameObjects.EntitySystems.Body.Surgery
SubscribeLocalEvent<SurgeryWindowCloseMessage>(OnSurgeryWindowClose);
}
public override void Shutdown()
{
base.Shutdown();
UnsubscribeLocalEvent<SurgeryWindowOpenMessage>();
UnsubscribeLocalEvent<SurgeryWindowCloseMessage>();
}
public void Reset()
{
_openSurgeryUIs.Clear();

View File

@@ -27,6 +27,17 @@ namespace Content.Server.GameObjects.EntitySystems
SubscribeLocalEvent<BuckleComponent, AttackHandMessage>(HandleAttackHand);
}
public override void Shutdown()
{
base.Shutdown();
UnsubscribeLocalEvent<MoveEvent>();
UnsubscribeLocalEvent<EntInsertedIntoContainerMessage>();
UnsubscribeLocalEvent<EntRemovedFromContainerMessage>();
UnsubscribeLocalEvent<BuckleComponent, AttackHandMessage>(HandleAttackHand);
}
private void HandleAttackHand(EntityUid uid, BuckleComponent component, AttackHandMessage args)
{
args.Handled = component.TryUnbuckle(args.User);
@@ -40,14 +51,6 @@ namespace Content.Server.GameObjects.EntitySystems
}
}
public override void Shutdown()
{
base.Shutdown();
UnsubscribeLocalEvent<MoveEvent>();
UnsubscribeLocalEvent<BuckleComponent, AttackHandMessage>(HandleAttackHand);
}
private void MoveEvent(MoveEvent ev)
{
if (!ev.Sender.TryGetComponent(out BuckleComponent? buckle))

View File

@@ -30,9 +30,18 @@ namespace Content.Server.GameObjects.EntitySystems
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<PlayerAttachSystemMessage>(OnPlayerAttached);
}
public override void Shutdown()
{
base.Shutdown();
UnsubscribeLocalEvent<PlayerAttachSystemMessage>();
}
private uint GetNextRoleIdentifier()
{
return unchecked(_nextRoleIdentifier++);

View File

@@ -51,8 +51,12 @@ namespace Content.Server.GameObjects.EntitySystems
/// <inheritdoc />
public override void Shutdown()
{
CommandBinds.Unregister<HandsSystem>();
base.Shutdown();
UnsubscribeLocalEvent<EntRemovedFromContainerMessage>();
UnsubscribeLocalEvent<EntInsertedIntoContainerMessage>();
CommandBinds.Unregister<HandsSystem>();
}
private static void HandleContainerModified(ContainerModifiedMessage args)

View File

@@ -16,10 +16,20 @@ namespace Content.Server.GameObjects.EntitySystems
/// <inheritdoc />
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<EntRemovedFromContainerMessage>(HandleEntityRemovedFromContainer);
SubscribeLocalEvent<EntInsertedIntoContainerMessage>(HandleEntityInsertedIntoContainer);
}
public override void Shutdown()
{
base.Shutdown();
UnsubscribeLocalEvent<EntRemovedFromContainerMessage>();
UnsubscribeLocalEvent<EntInsertedIntoContainerMessage>();
}
/// <inheritdoc />
public override void Update(float frameTime)
{

View File

@@ -26,6 +26,14 @@ namespace Content.Server.GameObjects.EntitySystems
SubscribeLocalEvent<EntParentChangedMessage>(EntParentChanged);
}
public override void Shutdown()
{
base.Shutdown();
UnsubscribeLocalEvent<GravityChangedMessage>();
UnsubscribeLocalEvent<EntParentChangedMessage>();
}
public void Reset()
{
_alerts.Clear();