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

@@ -23,18 +23,20 @@ namespace Content.Client.Interactable.Components
{
_lastRenderScale = renderScale;
_inRange = inInteractionRange;
if (_entMan.TryGetComponent(Owner, out ISpriteComponent? sprite))
if (_entMan.TryGetComponent(Owner, out SpriteComponent? sprite) && sprite.PostShader == null)
{
sprite.PostShader = MakeNewShader(inInteractionRange, renderScale);
sprite.RenderOrder = _entMan.CurrentTick.Value;
// TODO why is this creating a new instance of the outline shader every time the mouse enters???
_shader = MakeNewShader(inInteractionRange, renderScale);
sprite.PostShader = _shader;
}
}
public void OnMouseLeave()
{
if (_entMan.TryGetComponent(Owner, out ISpriteComponent? sprite))
if (_entMan.TryGetComponent(Owner, out SpriteComponent? sprite))
{
sprite.PostShader = null;
if (sprite.PostShader == _shader)
sprite.PostShader = null;
sprite.RenderOrder = 0;
}
@@ -44,11 +46,13 @@ namespace Content.Client.Interactable.Components
public void UpdateInRange(bool inInteractionRange, int renderScale)
{
if (_entMan.TryGetComponent(Owner, out ISpriteComponent? sprite)
if (_entMan.TryGetComponent(Owner, out SpriteComponent? sprite)
&& sprite.PostShader == _shader
&& (inInteractionRange != _inRange || _lastRenderScale != renderScale))
{
_inRange = inInteractionRange;
_lastRenderScale = renderScale;
_shader = MakeNewShader(_inRange, _lastRenderScale);
sprite.PostShader = _shader;
}