using System.Numerics; using Robust.Client.Graphics; using Robust.Client.Player; using Robust.Shared.Enums; using Robust.Shared.Prototypes; using Content.Shared.Abilities; namespace Content.Client.Nyanotrasen.Overlays; public sealed partial class DogVisionOverlay : Overlay { [Dependency] private readonly IPrototypeManager _prototypeManager = default!; [Dependency] private readonly IPlayerManager _playerManager = default!; [Dependency] IEntityManager _entityManager = default!; public override bool RequestScreenTexture => true; public override OverlaySpace Space => OverlaySpace.WorldSpace; private readonly ShaderInstance _dogVisionShader; public DogVisionOverlay() { IoCManager.InjectDependencies(this); _dogVisionShader = _prototypeManager.Index("DogVision").Instance().Duplicate(); } protected override bool BeforeDraw(in OverlayDrawArgs args) { if (_playerManager.LocalEntity is not { Valid: true } player || !_entityManager.HasComponent(player)) { return false; } return base.BeforeDraw(in args); } protected override void Draw(in OverlayDrawArgs args) { if (ScreenTexture is null) return; _dogVisionShader.SetParameter("SCREEN_TEXTURE", ScreenTexture); var worldHandle = args.WorldHandle; var viewport = args.WorldBounds; worldHandle.SetTransform(Matrix3x2.Identity); worldHandle.UseShader(_dogVisionShader); worldHandle.DrawRect(viewport, Color.White); worldHandle.UseShader(null); // important - as of writing, construction overlay breaks without this } }