private readonly HashSet<FadingSpriteComponent> _comps = new();
+ private EntityQuery<SpriteComponent> _spriteQuery;
+ private EntityQuery<SpriteFadeComponent> _fadeQuery;
+ private EntityQuery<FadingSpriteComponent> _fadingQuery;
+
private const float TargetAlpha = 0.4f;
private const float ChangeRate = 1f;
public override void Initialize()
{
base.Initialize();
+
+ _spriteQuery = GetEntityQuery<SpriteComponent>();
+ _fadeQuery = GetEntityQuery<SpriteFadeComponent>();
+ _fadingQuery = GetEntityQuery<FadingSpriteComponent>();
+
SubscribeLocalEvent<FadingSpriteComponent, ComponentShutdown>(OnFadingShutdown);
}
base.FrameUpdate(frameTime);
var player = _playerManager.LocalEntity;
- var spriteQuery = GetEntityQuery<SpriteComponent>();
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<SpriteFadeComponent>();
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<FadingSpriteComponent>(ent, out var fading))
+ if (!_fadingQuery.TryComp(ent, out var fading))
{
fading = AddComp<FadingSpriteComponent>(ent);
fading.OriginalAlpha = sprite.Color.A;
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);