| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- using System.Numerics;
- using Content.Client.Parallax;
- using Content.Client.Weather;
- using Content.Shared.Salvage;
- using Content.Shared.Weather;
- using Robust.Client.GameObjects;
- using Robust.Client.Graphics;
- using Robust.Shared.Enums;
- using Robust.Shared.Map;
- using Robust.Shared.Prototypes;
- using Robust.Shared.Timing;
- namespace Content.Client.Overlays;
- /// <summary>
- /// Simple re-useable overlay with stencilled texture.
- /// </summary>
- public sealed partial class StencilOverlay : Overlay
- {
- [Dependency] private readonly IClyde _clyde = default!;
- [Dependency] private readonly IEntityManager _entManager = default!;
- [Dependency] private readonly IGameTiming _timing = default!;
- [Dependency] private readonly IMapManager _mapManager = default!;
- [Dependency] private readonly IPrototypeManager _protoManager = default!;
- private readonly ParallaxSystem _parallax;
- private readonly SharedTransformSystem _transform;
- private readonly SharedMapSystem _map;
- private readonly SpriteSystem _sprite;
- private readonly WeatherSystem _weather;
- public override OverlaySpace Space => OverlaySpace.WorldSpaceBelowFOV;
- private IRenderTexture? _blep;
- private readonly ShaderInstance _shader;
- public StencilOverlay(ParallaxSystem parallax, SharedTransformSystem transform, SharedMapSystem map, SpriteSystem sprite, WeatherSystem weather)
- {
- ZIndex = ParallaxSystem.ParallaxZIndex + 1;
- _parallax = parallax;
- _transform = transform;
- _map = map;
- _sprite = sprite;
- _weather = weather;
- IoCManager.InjectDependencies(this);
- _shader = _protoManager.Index<ShaderPrototype>("WorldGradientCircle").InstanceUnique();
- }
- protected override void Draw(in OverlayDrawArgs args)
- {
- var mapUid = _mapManager.GetMapEntityId(args.MapId);
- var invMatrix = args.Viewport.GetWorldToLocalMatrix();
- if (_blep?.Texture.Size != args.Viewport.Size)
- {
- _blep?.Dispose();
- _blep = _clyde.CreateRenderTarget(args.Viewport.Size, new RenderTargetFormatParameters(RenderTargetColorFormat.Rgba8Srgb), name: "weather-stencil");
- }
- if (_entManager.TryGetComponent<WeatherComponent>(mapUid, out var comp))
- {
- foreach (var (proto, weather) in comp.Weather)
- {
- if (!_protoManager.TryIndex<WeatherPrototype>(proto, out var weatherProto))
- continue;
- var alpha = _weather.GetPercent(weather, mapUid);
- DrawWeather(args, weatherProto, alpha, invMatrix);
- }
- }
- if (_entManager.TryGetComponent<RestrictedRangeComponent>(mapUid, out var restrictedRangeComponent))
- {
- DrawRestrictedRange(args, restrictedRangeComponent, invMatrix);
- }
- args.WorldHandle.UseShader(null);
- args.WorldHandle.SetTransform(Matrix3x2.Identity);
- }
- }
|