]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Attempt to fix random test fail by undeleted AlertControl._spriteViewEntity (#29424)
authorDrSmugleaf <10968691+DrSmugleaf@users.noreply.github.com>
Tue, 25 Jun 2024 01:31:38 +0000 (18:31 -0700)
committerGitHub <noreply@github.com>
Tue, 25 Jun 2024 01:31:38 +0000 (11:31 +1000)
Content.Client/UserInterface/Systems/Alerts/Controls/AlertControl.cs

index 6327757dec2dc1db35d25a3a5e7e57c2690b33b3..19432cd799242dda990d30fd4e52abeab21f5f2f 100644 (file)
@@ -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<SpriteComponent>(_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<SpriteComponent>(_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);