diff --git a/Content.Client/Sprite/SpriteFadeSystem.cs b/Content.Client/Sprite/SpriteFadeSystem.cs index 676a6e583d..3323dd660f 100644 --- a/Content.Client/Sprite/SpriteFadeSystem.cs +++ b/Content.Client/Sprite/SpriteFadeSystem.cs @@ -20,12 +20,21 @@ public sealed class SpriteFadeSystem : EntitySystem private readonly HashSet _comps = new(); + private EntityQuery _spriteQuery; + private EntityQuery _fadeQuery; + private EntityQuery _fadingQuery; + private const float TargetAlpha = 0.4f; private const float ChangeRate = 1f; public override void Initialize() { base.Initialize(); + + _spriteQuery = GetEntityQuery(); + _fadeQuery = GetEntityQuery(); + _fadingQuery = GetEntityQuery(); + SubscribeLocalEvent(OnFadingShutdown); } @@ -42,28 +51,26 @@ public sealed class SpriteFadeSystem : EntitySystem base.FrameUpdate(frameTime); var player = _playerManager.LocalEntity; - var spriteQuery = GetEntityQuery(); var change = ChangeRate * frameTime; if (TryComp(player, out TransformComponent? playerXform) && _stateManager.CurrentState is GameplayState state && - spriteQuery.TryGetComponent(player, out var playerSprite)) + _spriteQuery.TryGetComponent(player, out var playerSprite)) { - var fadeQuery = GetEntityQuery(); var mapPos = _transform.GetMapCoordinates(_playerManager.LocalEntity!.Value, xform: playerXform); // Also want to handle large entities even if they may not be clickable. foreach (var ent in state.GetClickableEntities(mapPos)) { if (ent == player || - !fadeQuery.HasComponent(ent) || - !spriteQuery.TryGetComponent(ent, out var sprite) || + !_fadeQuery.HasComponent(ent) || + !_spriteQuery.TryGetComponent(ent, out var sprite) || sprite.DrawDepth < playerSprite.DrawDepth) { continue; } - if (!TryComp(ent, out var fading)) + if (!_fadingQuery.TryComp(ent, out var fading)) { fading = AddComp(ent); fading.OriginalAlpha = sprite.Color.A; @@ -85,7 +92,7 @@ public sealed class SpriteFadeSystem : EntitySystem if (_comps.Contains(comp)) continue; - if (!spriteQuery.TryGetComponent(uid, out var sprite)) + if (!_spriteQuery.TryGetComponent(uid, out var sprite)) continue; var newColor = Math.Min(sprite.Color.A + change, comp.OriginalAlpha);