diff --git a/Content.Client/Explosion/ExplosionOverlaySystem.cs b/Content.Client/Explosion/ExplosionOverlaySystem.cs index c838d35663..0e52ac92cc 100644 --- a/Content.Client/Explosion/ExplosionOverlaySystem.cs +++ b/Content.Client/Explosion/ExplosionOverlaySystem.cs @@ -1,5 +1,6 @@ using Content.Shared.CCVar; using Content.Shared.Explosion; +using Content.Shared.GameTicking; using Robust.Client.GameObjects; using Robust.Client.Graphics; using Robust.Client.ResourceManagement; @@ -34,6 +35,7 @@ public sealed class ExplosionOverlaySystem : EntitySystem SubscribeNetworkEvent(OnExplosion); SubscribeNetworkEvent(HandleExplosionUpdate); SubscribeLocalEvent(OnMapChanged); + SubscribeAllEvent(OnReset); _cfg.OnValueChanged(CCVars.ExplosionPersistence, SetExplosionPersistence, true); @@ -43,6 +45,21 @@ public sealed class ExplosionOverlaySystem : EntitySystem overlayManager.AddOverlay(_overlay); } + private void OnReset(RoundRestartCleanupEvent ev) + { + // Not sure if round restart cleans up client-side entities, but better safe than sorry. + foreach (var exp in _overlay.CompletedExplosions) + { + QueueDel(exp.LightEntity); + } + if (_overlay.ActiveExplosion != null) + QueueDel(_overlay.ActiveExplosion.LightEntity); + + _overlay.CompletedExplosions.Clear(); + _overlay.ActiveExplosion = null; + _overlay.Index = 0; + } + private void OnMapChanged(MapChangedEvent ev) { if (ev.Created) diff --git a/Content.Server/Explosion/EntitySystems/ExplosionSystem.cs b/Content.Server/Explosion/EntitySystems/ExplosionSystem.cs index 226e43bc73..706c924aca 100644 --- a/Content.Server/Explosion/EntitySystems/ExplosionSystem.cs +++ b/Content.Server/Explosion/EntitySystems/ExplosionSystem.cs @@ -7,6 +7,7 @@ using Content.Shared.Camera; using Content.Shared.Damage; using Content.Shared.Database; using Content.Shared.Explosion; +using Content.Shared.GameTicking; using Content.Shared.Throwing; using Robust.Server.Containers; using Robust.Server.Player; @@ -67,6 +68,8 @@ public sealed partial class ExplosionSystem : EntitySystem SubscribeLocalEvent(OnGetResistance); SubscribeLocalEvent(OnTileChanged); + SubscribeLocalEvent(OnReset); + // Handled by ExplosionSystem.Processing.cs SubscribeLocalEvent(OnMapChanged); @@ -76,10 +79,18 @@ public sealed partial class ExplosionSystem : EntitySystem InitAirtightMap(); } + private void OnReset(RoundRestartCleanupEvent ev) + { + _explosionQueue.Clear(); + _activeExplosion = null; + _nodeGroupSystem.Snoozing = false; + } + public override void Shutdown() { base.Shutdown(); UnsubscribeCvars(); + _nodeGroupSystem.Snoozing = false; } private void OnGetResistance(EntityUid uid, ExplosionResistanceComponent component, GetExplosionResistanceEvent args)