Prevent content from overriding sprite shader (#9036)

This commit is contained in:
Leon Friedrich
2022-07-15 14:28:51 +12:00
committed by GitHub
parent 603ceea256
commit 21fca0f6e3
4 changed files with 32 additions and 11 deletions

View File

@@ -21,6 +21,7 @@ public sealed class TargetOutlineSystem : EntitySystem
[Dependency] private readonly IPlayerManager _playerManager = default!;
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
[Dependency] private readonly SharedInteractionSystem _interactionSystem = default!;
[Dependency] private readonly SpriteSystem _spriteSystem = default!;
private bool _enabled = false;
@@ -143,7 +144,7 @@ public sealed class TargetOutlineSystem : EntitySystem
if (!valid)
{
// was this previously valid?
if (_highlightedSprites.Remove(sprite))
if (_highlightedSprites.Remove(sprite) && (sprite.PostShader == _shaderTargetValid || sprite.PostShader == _shaderTargetInvalid))
{
sprite.PostShader = null;
sprite.RenderOrder = 0;
@@ -162,6 +163,11 @@ public sealed class TargetOutlineSystem : EntitySystem
valid = (origin - target).LengthSquared <= Range;
}
if (sprite.PostShader != null &&
sprite.PostShader != _shaderTargetValid &&
sprite.PostShader != _shaderTargetInvalid)
return;
// highlight depending on whether its in or out of range
sprite.PostShader = valid ? _shaderTargetValid : _shaderTargetInvalid;
sprite.RenderOrder = EntityManager.CurrentTick.Value;
@@ -173,6 +179,9 @@ public sealed class TargetOutlineSystem : EntitySystem
{
foreach (var sprite in _highlightedSprites)
{
if (sprite.PostShader != _shaderTargetValid && sprite.PostShader != _shaderTargetInvalid)
continue;
sprite.PostShader = null;
sprite.RenderOrder = 0;
}