diff --git a/Content.Client/UserInterface/Systems/Alerts/Controls/AlertControl.cs b/Content.Client/UserInterface/Systems/Alerts/Controls/AlertControl.cs index 6327757dec..19432cd799 100644 --- a/Content.Client/UserInterface/Systems/Alerts/Controls/AlertControl.cs +++ b/Content.Client/UserInterface/Systems/Alerts/Controls/AlertControl.cs @@ -52,20 +52,12 @@ namespace Content.Client.UserInterface.Systems.Alerts.Controls TooltipSupplier = SupplyTooltip; Alert = alert; _severity = severity; - - _spriteViewEntity = _entityManager.Spawn(Alert.AlertViewEntity); - if (_entityManager.TryGetComponent(_spriteViewEntity, out var sprite)) - { - var icon = Alert.GetIcon(_severity); - if (sprite.LayerMapTryGet(AlertVisualLayers.Base, out var layer)) - sprite.LayerSetSprite(layer, icon); - } - _icon = new SpriteView { Scale = new Vector2(2, 2) }; - _icon.SetEntity(_spriteViewEntity); + + SetupIcon(); Children.Add(_icon); _cooldownGraphic = new CooldownGraphic @@ -113,6 +105,36 @@ namespace Content.Client.UserInterface.Systems.Alerts.Controls _cooldownGraphic.FromTime(Cooldown.Value.Start, Cooldown.Value.End); } + private void SetupIcon() + { + if (!_entityManager.Deleted(_spriteViewEntity)) + _entityManager.QueueDeleteEntity(_spriteViewEntity); + + _spriteViewEntity = _entityManager.Spawn(Alert.AlertViewEntity); + if (_entityManager.TryGetComponent(_spriteViewEntity, out var sprite)) + { + var icon = Alert.GetIcon(_severity); + if (sprite.LayerMapTryGet(AlertVisualLayers.Base, out var layer)) + sprite.LayerSetSprite(layer, icon); + } + + _icon.SetEntity(_spriteViewEntity); + } + + protected override void EnteredTree() + { + base.EnteredTree(); + SetupIcon(); + } + + protected override void ExitedTree() + { + base.ExitedTree(); + + if (!_entityManager.Deleted(_spriteViewEntity)) + _entityManager.QueueDeleteEntity(_spriteViewEntity); + } + protected override void Dispose(bool disposing) { base.Dispose(disposing);