]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Validate `ShaderPrototype` IDs (#38728)
authorTayrtahn <tayrtahn@gmail.com>
Fri, 4 Jul 2025 01:11:31 +0000 (21:11 -0400)
committerGitHub <noreply@github.com>
Fri, 4 Jul 2025 01:11:31 +0000 (18:11 -0700)
* Convert all shader prototype string literals to protoids in overlays

* Convert more shader prototype literal strings to protoids

* Convert ValidatePrototypeId to ProtoId

* Later

36 files changed:
Content.Benchmarks/SpawnEquipDeleteBenchmark.cs
Content.Client/Atmos/Overlays/GasTileOverlay.cs
Content.Client/CombatMode/ColoredScreenBorderOverlay.cs
Content.Client/Cooldown/CooldownGraphic.cs
Content.Client/DoAfter/DoAfterOverlay.cs
Content.Client/Drowsiness/DrowsinessOverlay.cs
Content.Client/Drugs/RainbowOverlay.cs
Content.Client/Drunk/DrunkOverlay.cs
Content.Client/Explosion/ExplosionOverlay.cs
Content.Client/Eye/Blinding/BlindOverlay.cs
Content.Client/Eye/Blinding/BlurryVisionOverlay.cs
Content.Client/Flash/FlashOverlay.cs
Content.Client/Interactable/Components/InteractionOutlineComponent.cs
Content.Client/Interaction/DragDropSystem.cs
Content.Client/Light/AmbientOcclusionOverlay.cs
Content.Client/Light/SunShadowOverlay.cs
Content.Client/Mapping/MappingOverlay.cs
Content.Client/Movement/Systems/FloorOcclusionSystem.cs
Content.Client/Outline/TargetOutlineSystem.cs
Content.Client/Overlays/BlackAndWhiteOverlay.cs
Content.Client/Overlays/NoirOverlay.cs
Content.Client/Overlays/StencilOverlay.RestrictedRange.cs
Content.Client/Overlays/StencilOverlay.Weather.cs
Content.Client/Overlays/StencilOverlay.cs
Content.Client/Paper/UI/StampLabel.xaml.cs
Content.Client/Paper/UI/StampWidget.xaml.cs
Content.Client/ParticleAccelerator/UI/ParticleAcceleratorControlMenu.xaml.cs
Content.Client/Popups/PopupOverlay.cs
Content.Client/Radiation/Overlays/RadiationPulseOverlay.cs
Content.Client/Shuttles/FtlArrivalOverlay.cs
Content.Client/Silicons/StationAi/StationAiOverlay.cs
Content.Client/Singularity/SingularityOverlay.cs
Content.Client/StatusIcon/StatusIconOverlay.cs
Content.Client/Stealth/StealthSystem.cs
Content.Client/SurveillanceCamera/UI/SurveillanceCameraMonitorWindow.xaml.cs
Content.Client/UserInterface/Systems/DamageOverlays/Overlays/DamageOverlay.cs

index 0638d945aa5cd09b98c49e03a481cd92f61429a0..9b878eac40ca56ebc5cea8eb7bb9414a54e4db6f 100644 (file)
@@ -8,6 +8,7 @@ using Robust.Shared;
 using Robust.Shared.Analyzers;
 using Robust.Shared.GameObjects;
 using Robust.Shared.Map;
+using Robust.Shared.Prototypes;
 
 namespace Content.Benchmarks;
 
@@ -18,9 +19,11 @@ namespace Content.Benchmarks;
 [Virtual, MemoryDiagnoser]
 public class SpawnEquipDeleteBenchmark
 {
+    private static readonly EntProtoId Mob = "MobHuman";
+    private static readonly ProtoId<StartingGearPrototype> CaptainStartingGear = "CaptainGear";
+
     private TestPair _pair = default!;
     private StationSpawningSystem _spawnSys = default!;
-    private const string Mob = "MobHuman";
     private StartingGearPrototype _gear = default!;
     private EntityUid _entity;
     private EntityCoordinates _coords;
@@ -39,7 +42,7 @@ public class SpawnEquipDeleteBenchmark
         var mapData = await _pair.CreateTestMap();
         _coords = mapData.GridCoords;
         _spawnSys = server.System<StationSpawningSystem>();
-        _gear = server.ProtoMan.Index<StartingGearPrototype>("CaptainGear");
+        _gear = server.ProtoMan.Index(CaptainStartingGear);
     }
 
     [GlobalCleanup]
index cdbcb5b3f68554665b950a118527e6f4e0c994ca..d91cc29e4c3c23d88973bb7b294ab02013429444 100644 (file)
@@ -19,6 +19,8 @@ namespace Content.Client.Atmos.Overlays
 {
     public sealed class GasTileOverlay : Overlay
     {
+        private static readonly ProtoId<ShaderPrototype> UnshadedShader = "unshaded";
+
         private readonly IEntityManager _entManager;
         private readonly IMapManager _mapManager;
         private readonly SharedMapSystem _mapSystem;
@@ -54,7 +56,7 @@ namespace Content.Client.Atmos.Overlays
             _mapManager = IoCManager.Resolve<IMapManager>();
             _mapSystem = entManager.System<SharedMapSystem>();
             _xformSys = xformSys;
-            _shader = protoMan.Index<ShaderPrototype>("unshaded").Instance();
+            _shader = protoMan.Index(UnshadedShader).Instance();
             ZIndex = GasOverlayZIndex;
 
             _gasCount = system.VisibleGasId.Length;
index 9ca94fc3b4238b87f6051905a36474c5d3c09141..749a6839b6e7f04da904d3fc7cb469516cfc9350 100644 (file)
@@ -8,6 +8,8 @@ namespace Content.Client.CombatMode
 {
     public sealed class ColoredScreenBorderOverlay : Overlay
     {
+        private static readonly ProtoId<ShaderPrototype> Shader = "ColoredScreenBorder";
+
         [Dependency] private readonly IPrototypeManager _prototypeManager = default!;
 
         public override OverlaySpace Space => OverlaySpace.WorldSpace;
@@ -16,7 +18,7 @@ namespace Content.Client.CombatMode
         public ColoredScreenBorderOverlay()
         {
             IoCManager.InjectDependencies(this);
-            _shader = _prototypeManager.Index<ShaderPrototype>("ColoredScreenBorder").Instance();
+            _shader = _prototypeManager.Index(Shader).Instance();
         }
 
         protected override void Draw(in OverlayDrawArgs args)
index 25063f8133d9412b6df54ba562c92c17da6d421a..6779e4027a7e73c37322773dbe396a9d55eaa757 100644 (file)
@@ -7,6 +7,8 @@ namespace Content.Client.Cooldown
 {
     public sealed class CooldownGraphic : Control
     {
+        private static readonly ProtoId<ShaderPrototype> Shader = "CooldownAnimation";
+
         [Dependency] private readonly IGameTiming _gameTiming = default!;
         [Dependency] private readonly IPrototypeManager _protoMan = default!;
 
@@ -15,7 +17,7 @@ namespace Content.Client.Cooldown
         public CooldownGraphic()
         {
             IoCManager.InjectDependencies(this);
-            _shader = _protoMan.Index<ShaderPrototype>("CooldownAnimation").InstanceUnique();
+            _shader = _protoMan.Index(Shader).InstanceUnique();
         }
 
         /// <summary>
index 6ecd7584615f18c8c8528dff2ecedb665f4d9000..761584e06ec9fdb4c0d29d09b7c03d20e3756357 100644 (file)
@@ -14,6 +14,8 @@ namespace Content.Client.DoAfter;
 
 public sealed class DoAfterOverlay : Overlay
 {
+    private static readonly ProtoId<ShaderPrototype> UnshadedShader = "unshaded";
+
     private readonly IEntityManager _entManager;
     private readonly IGameTiming _timing;
     private readonly IPlayerManager _player;
@@ -50,7 +52,7 @@ public sealed class DoAfterOverlay : Overlay
         var sprite = new SpriteSpecifier.Rsi(new("/Textures/Interface/Misc/progress_bar.rsi"), "icon");
         _barTexture = _entManager.EntitySysManager.GetEntitySystem<SpriteSystem>().Frame0(sprite);
 
-        _unshadedShader = protoManager.Index<ShaderPrototype>("unshaded").Instance();
+        _unshadedShader = protoManager.Index(UnshadedShader).Instance();
     }
 
     protected override void Draw(in OverlayDrawArgs args)
index 1687216b3e1cd35213e3df14fb7473fc64847269..9c47ec2fbe1c6871f21d0e646b2819496d6347f8 100644 (file)
@@ -10,6 +10,8 @@ namespace Content.Client.Drowsiness;
 
 public sealed class DrowsinessOverlay : Overlay
 {
+    private static readonly ProtoId<ShaderPrototype> Shader = "Drowsiness";
+
     [Dependency] private readonly IEntityManager _entityManager = default!;
     [Dependency] private readonly IPrototypeManager _prototypeManager = default!;
     [Dependency] private readonly IPlayerManager _playerManager = default!;
@@ -33,7 +35,7 @@ public sealed class DrowsinessOverlay : Overlay
 
         _statusEffects = _sysMan.GetEntitySystem<SharedStatusEffectsSystem>();
 
-        _drowsinessShader = _prototypeManager.Index<ShaderPrototype>("Drowsiness").InstanceUnique();
+        _drowsinessShader = _prototypeManager.Index(Shader).InstanceUnique();
     }
 
     protected override void FrameUpdate(FrameEventArgs args)
index bfb3815649929ed075f516cbd666a8b47f7e449b..a2a431feb6d3ccaaf64ebcc05055fb15808b9b88 100644 (file)
@@ -12,6 +12,8 @@ namespace Content.Client.Drugs;
 
 public sealed class RainbowOverlay : Overlay
 {
+    private static readonly ProtoId<ShaderPrototype> Shader = "Rainbow";
+
     [Dependency] private readonly IConfigurationManager _config = default!;
     [Dependency] private readonly IEntityManager _entityManager = default!;
     [Dependency] private readonly IPrototypeManager _prototypeManager = default!;
@@ -41,7 +43,7 @@ public sealed class RainbowOverlay : Overlay
 
         _statusEffects = _sysMan.GetEntitySystem<SharedStatusEffectsSystem>();
 
-        _rainbowShader = _prototypeManager.Index<ShaderPrototype>("Rainbow").InstanceUnique();
+        _rainbowShader = _prototypeManager.Index(Shader).InstanceUnique();
         _config.OnValueChanged(CCVars.ReducedMotion, OnReducedMotionChanged, invokeImmediately: true);
     }
 
index e01719e62cb91837e76355f96742a80902e14404..1f26e75ffc9209b89359b34a9dd136df695092e4 100644 (file)
@@ -10,6 +10,8 @@ namespace Content.Client.Drunk;
 
 public sealed class DrunkOverlay : Overlay
 {
+    private static readonly ProtoId<ShaderPrototype> Shader = "Drunk";
+
     [Dependency] private readonly IEntityManager _entityManager = default!;
     [Dependency] private readonly IPrototypeManager _prototypeManager = default!;
     [Dependency] private readonly IPlayerManager _playerManager = default!;
@@ -30,7 +32,7 @@ public sealed class DrunkOverlay : Overlay
     public DrunkOverlay()
     {
         IoCManager.InjectDependencies(this);
-        _drunkShader = _prototypeManager.Index<ShaderPrototype>("Drunk").InstanceUnique();
+        _drunkShader = _prototypeManager.Index(Shader).InstanceUnique();
     }
 
     protected override void FrameUpdate(FrameEventArgs args)
index a005d0317b19359f3d6dcac7d914d2359f2a95a5..18cb8f647aa0996ff0391a8d4df4c59646492022 100644 (file)
@@ -13,6 +13,8 @@ namespace Content.Client.Explosion;
 [UsedImplicitly]
 public sealed class ExplosionOverlay : Overlay
 {
+    private static readonly ProtoId<ShaderPrototype> UnshadedShader = "unshaded";
+
     [Dependency] private readonly IRobustRandom _robustRandom = default!;
     [Dependency] private readonly IEntityManager _entMan = default!;
     [Dependency] private readonly IPrototypeManager _proto = default!;
@@ -26,7 +28,7 @@ public sealed class ExplosionOverlay : Overlay
     public ExplosionOverlay(SharedAppearanceSystem appearanceSystem)
     {
         IoCManager.InjectDependencies(this);
-        _shader = _proto.Index<ShaderPrototype>("unshaded").Instance();
+        _shader = _proto.Index(UnshadedShader).Instance();
         _transformSystem = _entMan.System<SharedTransformSystem>();
         _appearance = appearanceSystem;
     }
index 1949b170ab890bd4f294878a22aced6cfdb6c60a..906f9c954ce7569a1ed22c8d9e10420a5ccc637f 100644 (file)
@@ -12,6 +12,9 @@ namespace Content.Client.Eye.Blinding
 {
     public sealed class BlindOverlay : Overlay
     {
+        private static readonly ProtoId<ShaderPrototype> GreyscaleShader = "GreyscaleFullscreen";
+        private static readonly ProtoId<ShaderPrototype> CircleShader = "CircleMask";
+
         [Dependency] private readonly IPrototypeManager _prototypeManager = default!;
         [Dependency] private readonly IPlayerManager _playerManager = default!;
         [Dependency] private readonly IEntityManager _entityManager = default!;
@@ -27,8 +30,8 @@ namespace Content.Client.Eye.Blinding
         public BlindOverlay()
         {
             IoCManager.InjectDependencies(this);
-            _greyscaleShader = _prototypeManager.Index<ShaderPrototype>("GreyscaleFullscreen").InstanceUnique();
-            _circleMaskShader = _prototypeManager.Index<ShaderPrototype>("CircleMask").InstanceUnique();
+            _greyscaleShader = _prototypeManager.Index(GreyscaleShader).InstanceUnique();
+            _circleMaskShader = _prototypeManager.Index(CircleShader).InstanceUnique();
         }
         protected override bool BeforeDraw(in OverlayDrawArgs args)
         {
index b56b091309ca4d7e41a51d3345c8692d37c9a130..dccdac27589302bf60ad66da96e61bc0a30c6873 100644 (file)
@@ -10,6 +10,9 @@ namespace Content.Client.Eye.Blinding
 {
     public sealed class BlurryVisionOverlay : Overlay
     {
+        private static readonly ProtoId<ShaderPrototype> CataractsShader = "Cataracts";
+        private static readonly ProtoId<ShaderPrototype> CircleShader = "CircleMask";
+
         [Dependency] private readonly IEntityManager _entityManager = default!;
         [Dependency] private readonly IPlayerManager _playerManager = default!;
         [Dependency] private readonly IPrototypeManager _prototypeManager = default!;
@@ -33,8 +36,8 @@ namespace Content.Client.Eye.Blinding
         public BlurryVisionOverlay()
         {
             IoCManager.InjectDependencies(this);
-            _cataractsShader = _prototypeManager.Index<ShaderPrototype>("Cataracts").InstanceUnique();
-            _circleMaskShader = _prototypeManager.Index<ShaderPrototype>("CircleMask").InstanceUnique();
+            _cataractsShader = _prototypeManager.Index(CataractsShader).InstanceUnique();
+            _circleMaskShader = _prototypeManager.Index(CircleShader).InstanceUnique();
 
             _circleMaskShader.SetParameter("CircleMinDist", 0.0f);
             _circleMaskShader.SetParameter("CirclePow", NoMotion_Pow);
index 8e41c382dd7e7c6a12390d867f2afef106f1ab20..824efb78f37cafff6ec44ff6a5b8601a61a3e936 100644 (file)
@@ -11,6 +11,8 @@ namespace Content.Client.Flash
 {
     public sealed class FlashOverlay : Overlay
     {
+        private static readonly ProtoId<ShaderPrototype> FlashedEffectShader = "FlashedEffect";
+
         [Dependency] private readonly IPrototypeManager _prototypeManager = default!;
         [Dependency] private readonly IEntityManager _entityManager = default!;
         [Dependency] private readonly IPlayerManager _playerManager = default!;
@@ -27,7 +29,7 @@ namespace Content.Client.Flash
         public FlashOverlay()
         {
             IoCManager.InjectDependencies(this);
-            _shader = _prototypeManager.Index<ShaderPrototype>("FlashedEffect").InstanceUnique();
+            _shader = _prototypeManager.Index(FlashedEffectShader).InstanceUnique();
             _flash = _entityManager.System<SharedFlashSystem>();
             _statusSys = _entityManager.System<StatusEffectsSystem>();
         }
index 9803920257ca88cadca38247f50f590c98278d91..8d1d8cd07d1187f0c6f0c19365bb2e1fd0acb1e1 100644 (file)
@@ -7,17 +7,14 @@ namespace Content.Client.Interactable.Components
     [RegisterComponent]
     public sealed partial class InteractionOutlineComponent : Component
     {
+        private static readonly ProtoId<ShaderPrototype> ShaderInRange = "SelectionOutlineInrange";
+        private static readonly ProtoId<ShaderPrototype> ShaderOutOfRange = "SelectionOutline";
+
         [Dependency] private readonly IPrototypeManager _prototypeManager = default!;
         [Dependency] private readonly IEntityManager _entMan = default!;
 
         private const float DefaultWidth = 1;
 
-        [ValidatePrototypeId<ShaderPrototype>]
-        private const string ShaderInRange = "SelectionOutlineInrange";
-
-        [ValidatePrototypeId<ShaderPrototype>]
-        private const string ShaderOutOfRange = "SelectionOutline";
-
         private bool _inRange;
         private ShaderInstance? _shader;
         private int _lastRenderScale;
@@ -65,7 +62,7 @@ namespace Content.Client.Interactable.Components
         {
             var shaderName = inRange ? ShaderInRange : ShaderOutOfRange;
 
-            var instance = _prototypeManager.Index<ShaderPrototype>(shaderName).InstanceUnique();
+            var instance = _prototypeManager.Index(shaderName).InstanceUnique();
             instance.SetParameter("outline_width", DefaultWidth * renderScale);
             return instance;
         }
index fe2386653521da1b7faa3e1781748571ab14f7c8..a1af9f9e2020d537dd26db26830d8bb197c0622e 100644 (file)
@@ -29,6 +29,10 @@ namespace Content.Client.Interaction;
 /// </summary>
 public sealed class DragDropSystem : SharedDragDropSystem
 {
+    private static readonly ProtoId<ShaderPrototype> ShaderDropTargetInRange = "SelectionOutlineInrange";
+
+    private static readonly ProtoId<ShaderPrototype> ShaderDropTargetOutOfRange = "SelectionOutline";
+
     [Dependency] private readonly IStateManager _stateManager = default!;
     [Dependency] private readonly IInputManager _inputManager = default!;
     [Dependency] private readonly IEyeManager _eyeManager = default!;
@@ -54,12 +58,6 @@ public sealed class DragDropSystem : SharedDragDropSystem
     // mousedown event so it can be treated like a regular click
     private const float MaxMouseDownTimeForReplayingClick = 0.85f;
 
-    [ValidatePrototypeId<ShaderPrototype>]
-    private const string ShaderDropTargetInRange = "SelectionOutlineInrange";
-
-    [ValidatePrototypeId<ShaderPrototype>]
-    private const string ShaderDropTargetOutOfRange = "SelectionOutline";
-
     /// <summary>
     /// Current entity being dragged around.
     /// </summary>
@@ -113,8 +111,8 @@ public sealed class DragDropSystem : SharedDragDropSystem
 
         Subs.CVar(_cfgMan, CCVars.DragDropDeadZone, SetDeadZone, true);
 
-        _dropTargetInRangeShader = _prototypeManager.Index<ShaderPrototype>(ShaderDropTargetInRange).Instance();
-        _dropTargetOutOfRangeShader = _prototypeManager.Index<ShaderPrototype>(ShaderDropTargetOutOfRange).Instance();
+        _dropTargetInRangeShader = _prototypeManager.Index(ShaderDropTargetInRange).Instance();
+        _dropTargetOutOfRangeShader = _prototypeManager.Index(ShaderDropTargetOutOfRange).Instance();
         // needs to fire on mouseup and mousedown so we can detect a drag / drop
         CommandBinds.Builder
             .BindBefore(EngineKeyFunctions.Use, new PointerInputCmdHandler(OnUse, false, true), new[] { typeof(SharedInteractionSystem) })
index f771dbe9fc440f0f64f236d4d57372e092d72a00..4caf65449494a46cced71735d20065c70c617723 100644 (file)
@@ -15,6 +15,10 @@ namespace Content.Client.Light;
 /// </summary>
 public sealed class AmbientOcclusionOverlay : Overlay
 {
+    private static readonly ProtoId<ShaderPrototype> UnshadedShader = "unshaded";
+    private static readonly ProtoId<ShaderPrototype> StencilMaskShader = "StencilMask";
+    private static readonly ProtoId<ShaderPrototype> StencilEqualDrawShader = "StencilEqualDraw";
+
     [Dependency] private readonly IClyde _clyde = default!;
     [Dependency] private readonly IConfigurationManager _cfgManager = default!;
     [Dependency] private readonly IEntityManager _entManager = default!;
@@ -87,7 +91,7 @@ public sealed class AmbientOcclusionOverlay : Overlay
         args.WorldHandle.RenderInRenderTarget(_aoTarget,
             () =>
             {
-                worldHandle.UseShader(_proto.Index<ShaderPrototype>("unshaded").Instance());
+                worldHandle.UseShader(_proto.Index(UnshadedShader).Instance());
                 var invMatrix = _aoTarget.GetWorldToLocalMatrix(viewport.Eye!, scale);
 
                 foreach (var entry in query.QueryAabb(mapId, worldBounds))
@@ -110,7 +114,7 @@ public sealed class AmbientOcclusionOverlay : Overlay
             () =>
             {
                 // Don't want lighting affecting it.
-                worldHandle.UseShader(_proto.Index<ShaderPrototype>("unshaded").Instance());
+                worldHandle.UseShader(_proto.Index(UnshadedShader).Instance());
 
                 foreach (var grid in _mapManager.FindGridsIntersecting(mapId, worldBounds))
                 {
@@ -131,11 +135,11 @@ public sealed class AmbientOcclusionOverlay : Overlay
             }, Color.Transparent);
 
         // Draw the stencil texture to depth buffer.
-        worldHandle.UseShader(_proto.Index<ShaderPrototype>("StencilMask").Instance());
+        worldHandle.UseShader(_proto.Index(StencilMaskShader).Instance());
         worldHandle.DrawTextureRect(_aoStencilTarget!.Texture, worldBounds);
 
         // Draw the Blurred AO texture finally.
-        worldHandle.UseShader(_proto.Index<ShaderPrototype>("StencilEqualDraw").Instance());
+        worldHandle.UseShader(_proto.Index(StencilEqualDrawShader).Instance());
         worldHandle.DrawTextureRect(_aoTarget!.Texture, worldBounds, color);
 
         args.WorldHandle.SetTransform(Matrix3x2.Identity);
index a296f95479f8ece5b93480fb910d73a28e54a585..f30f4c0409bf3c7646b51e5ce970607cde78da28 100644 (file)
@@ -11,6 +11,8 @@ namespace Content.Client.Light;
 
 public sealed class SunShadowOverlay : Overlay
 {
+    private static readonly ProtoId<ShaderPrototype> MixShader = "Mix";
+
     public override OverlaySpace Space => OverlaySpace.BeforeLighting;
 
     [Dependency] private readonly IClyde _clyde = default!;
@@ -150,7 +152,7 @@ public sealed class SunShadowOverlay : Overlay
                         viewport.LightRenderTarget.GetWorldToLocalMatrix(eye, scale);
                     worldHandle.SetTransform(invMatrix);
 
-                    var maskShader = _protoManager.Index<ShaderPrototype>("Mix").Instance();
+                    var maskShader = _protoManager.Index(MixShader).Instance();
                     worldHandle.UseShader(maskShader);
 
                     worldHandle.DrawTextureRect(_target.Texture, worldBounds, Color.Black.WithAlpha(alpha));
index ed44b43d5250bc9cc4fc01b83aecc57bc46fa24c..e461440996f95f8d4ddc98b4275aecc84f402c91 100644 (file)
@@ -11,6 +11,8 @@ namespace Content.Client.Mapping;
 
 public sealed class MappingOverlay : Overlay
 {
+    private static readonly ProtoId<ShaderPrototype> UnshadedShader = "unshaded";
+
     [Dependency] private readonly IEntityManager _entities = default!;
     [Dependency] private readonly IPlayerManager _player = default!;
     [Dependency] private readonly IPrototypeManager _prototypes = default!;
@@ -35,7 +37,7 @@ public sealed class MappingOverlay : Overlay
         _sprite = _entities.System<SpriteSystem>();
 
         _state = state;
-        _shader = _prototypes.Index<ShaderPrototype>("unshaded").Instance();
+        _shader = _prototypes.Index(UnshadedShader).Instance();
     }
 
     protected override void Draw(in OverlayDrawArgs args)
index 44573f8e084480baf5a19e8660134b60df672af1..6520d98ac93be02b1216b809f77a285c98310490 100644 (file)
@@ -8,6 +8,8 @@ namespace Content.Client.Movement.Systems;
 
 public sealed class FloorOcclusionSystem : SharedFloorOcclusionSystem
 {
+    private static readonly ProtoId<ShaderPrototype> HorizontalCut = "HorizontalCut";
+
     [Dependency] private readonly IPrototypeManager _proto = default!;
 
     private EntityQuery<SpriteComponent> _spriteQuery;
@@ -48,7 +50,7 @@ public sealed class FloorOcclusionSystem : SharedFloorOcclusionSystem
         if (!_spriteQuery.Resolve(sprite.Owner, ref sprite.Comp, false))
             return;
 
-        var shader = _proto.Index<ShaderPrototype>("HorizontalCut").Instance();
+        var shader = _proto.Index(HorizontalCut).Instance();
 
         if (sprite.Comp.PostShader is not null && sprite.Comp.PostShader != shader)
             return;
index 0d9b9787ae57d19bc815b3db9010013c04c7eb01..73d45a17a989b6b8a0cb6ebd2846311ab57343c2 100644 (file)
@@ -15,6 +15,9 @@ namespace Content.Client.Outline;
 /// </summary>
 public sealed class TargetOutlineSystem : EntitySystem
 {
+    private static readonly ProtoId<ShaderPrototype> ShaderTargetValid = "SelectionOutlineInrange";
+    private static readonly ProtoId<ShaderPrototype> ShaderTargetInvalid = "SelectionOutline";
+
     [Dependency] private readonly IEyeManager _eyeManager = default!;
     [Dependency] private readonly IGameTiming _timing = default!;
     [Dependency] private readonly EntityLookupSystem _lookup = default!;
@@ -70,12 +73,6 @@ public sealed class TargetOutlineSystem : EntitySystem
 
     private Vector2 LookupVector => new(LookupSize, LookupSize);
 
-    [ValidatePrototypeId<ShaderPrototype>]
-    private const string ShaderTargetValid = "SelectionOutlineInrange";
-
-    [ValidatePrototypeId<ShaderPrototype>]
-    private const string ShaderTargetInvalid = "SelectionOutline";
-
     private ShaderInstance? _shaderTargetValid;
     private ShaderInstance? _shaderTargetInvalid;
 
@@ -85,8 +82,8 @@ public sealed class TargetOutlineSystem : EntitySystem
     {
         base.Initialize();
 
-        _shaderTargetValid = _prototypeManager.Index<ShaderPrototype>(ShaderTargetValid).InstanceUnique();
-        _shaderTargetInvalid = _prototypeManager.Index<ShaderPrototype>(ShaderTargetInvalid).InstanceUnique();
+        _shaderTargetValid = _prototypeManager.Index(ShaderTargetValid).InstanceUnique();
+        _shaderTargetInvalid = _prototypeManager.Index(ShaderTargetInvalid).InstanceUnique();
     }
 
     public void Disable()
index 785d1dad7f51d4a587bc6235a8cd3b18266c51f1..251a9534a2abf08002abd583602287ccaa88a26e 100644 (file)
@@ -6,6 +6,8 @@ namespace Content.Client.Overlays;
 
 public sealed partial class BlackAndWhiteOverlay : Overlay
 {
+    private static readonly ProtoId<ShaderPrototype> Shader = "GreyscaleFullscreen";
+
     [Dependency] private readonly IPrototypeManager _prototypeManager = default!;
 
     public override OverlaySpace Space => OverlaySpace.WorldSpace;
@@ -15,7 +17,7 @@ public sealed partial class BlackAndWhiteOverlay : Overlay
     public BlackAndWhiteOverlay()
     {
         IoCManager.InjectDependencies(this);
-        _greyscaleShader = _prototypeManager.Index<ShaderPrototype>("GreyscaleFullscreen").InstanceUnique();
+        _greyscaleShader = _prototypeManager.Index(Shader).InstanceUnique();
         ZIndex = 10; // draw this over the DamageOverlay, RainbowOverlay etc.
     }
 
index d2a6cbe8b3d92b2601aac040cce53aaaa3ef6097..f9e468f99591069dd7117f44fe1f1a186c770b8d 100644 (file)
@@ -6,6 +6,8 @@ namespace Content.Client.Overlays;
 
 public sealed partial class NoirOverlay : Overlay
 {
+    private static readonly ProtoId<ShaderPrototype> Shader = "Noir";
+
     [Dependency] private readonly IPrototypeManager _prototypeManager = default!;
 
     public override OverlaySpace Space => OverlaySpace.WorldSpace;
@@ -15,7 +17,7 @@ public sealed partial class NoirOverlay : Overlay
     public NoirOverlay()
     {
         IoCManager.InjectDependencies(this);
-        _noirShader = _prototypeManager.Index<ShaderPrototype>("Noir").InstanceUnique();
+        _noirShader = _prototypeManager.Index(Shader).InstanceUnique();
         ZIndex = 9; // draw this over the DamageOverlay, RainbowOverlay etc, but before the black and white shader
     }
 
index d29564caa932014df4839ecf78f3f6db2af05848..a5efacc16c43227e9c5f5df207a6475f9687e018 100644 (file)
@@ -45,13 +45,13 @@ public sealed partial class StencilOverlay
         }, Color.Transparent);
 
         worldHandle.SetTransform(Matrix3x2.Identity);
-        worldHandle.UseShader(_protoManager.Index<ShaderPrototype>("StencilMask").Instance());
+        worldHandle.UseShader(_protoManager.Index(StencilMask).Instance());
         worldHandle.DrawTextureRect(_blep!.Texture, worldBounds);
         var curTime = _timing.RealTime;
         var sprite = _sprite.GetFrame(new SpriteSpecifier.Texture(new ResPath("/Textures/Parallaxes/noise.png")), curTime);
 
         // Draw the rain
-        worldHandle.UseShader(_protoManager.Index<ShaderPrototype>("StencilDraw").Instance());
+        worldHandle.UseShader(_protoManager.Index(StencilDraw).Instance());
         _parallax.DrawParallax(worldHandle, worldAABB, sprite, curTime, position, new Vector2(0.5f, 0f));
     }
 }
index b1a521433a89dda4ce1a85be84a70b7382f955f2..509b946ad41d51ce937f9fa1c43686202d968936 100644 (file)
@@ -55,13 +55,13 @@ public sealed partial class StencilOverlay
         }, Color.Transparent);
 
         worldHandle.SetTransform(Matrix3x2.Identity);
-        worldHandle.UseShader(_protoManager.Index<ShaderPrototype>("StencilMask").Instance());
+        worldHandle.UseShader(_protoManager.Index(StencilMask).Instance());
         worldHandle.DrawTextureRect(_blep!.Texture, worldBounds);
         var curTime = _timing.RealTime;
         var sprite = _sprite.GetFrame(weatherProto.Sprite, curTime);
 
         // Draw the rain
-        worldHandle.UseShader(_protoManager.Index<ShaderPrototype>("StencilDraw").Instance());
+        worldHandle.UseShader(_protoManager.Index(StencilDraw).Instance());
         _parallax.DrawParallax(worldHandle, worldAABB, sprite, curTime, position, Vector2.Zero, modulate: (weatherProto.Color ?? Color.White).WithAlpha(alpha));
 
         worldHandle.SetTransform(Matrix3x2.Identity);
index e8461ae5a34dda17c0b670a1a29cccc454d314c6..0796be08e1683bdff9c17af0ba4643f76b285362 100644 (file)
@@ -17,6 +17,10 @@ namespace Content.Client.Overlays;
 /// </summary>
 public sealed partial class StencilOverlay : Overlay
 {
+    private static readonly ProtoId<ShaderPrototype> CircleShader = "WorldGradientCircle";
+    private static readonly ProtoId<ShaderPrototype> StencilMask = "StencilMask";
+    private static readonly ProtoId<ShaderPrototype> StencilDraw = "StencilDraw";
+
     [Dependency] private readonly IClyde _clyde = default!;
     [Dependency] private readonly IEntityManager _entManager = default!;
     [Dependency] private readonly IGameTiming _timing = default!;
@@ -43,7 +47,7 @@ public sealed partial class StencilOverlay : Overlay
         _sprite = sprite;
         _weather = weather;
         IoCManager.InjectDependencies(this);
-        _shader = _protoManager.Index<ShaderPrototype>("WorldGradientCircle").InstanceUnique();
+        _shader = _protoManager.Index(CircleShader).InstanceUnique();
     }
 
     protected override void Draw(in OverlayDrawArgs args)
index be6d52baeaf935c47960bced5d4aff24645b80a7..1750110c4ca13c5bb327c86383a94d7fdc66d435 100644 (file)
@@ -10,6 +10,8 @@ namespace Content.Client.Paper.UI;
 [GenerateTypedNameReferences]
 public sealed partial class StampLabel : Label
 {
+    private static readonly ProtoId<ShaderPrototype> PaperStamp = "PaperStamp";
+
     /// A scale that's applied to the text to ensure it
     /// fits in the allowed space.
     private Vector2 _textScaling = Vector2.One;
@@ -26,7 +28,7 @@ public sealed partial class StampLabel : Label
         RobustXamlLoader.Load(this);
 
         var prototypes = IoCManager.Resolve<IPrototypeManager>();
-        _stampShader = prototypes.Index<ShaderPrototype>("PaperStamp").InstanceUnique();
+        _stampShader = prototypes.Index(PaperStamp).InstanceUnique();
     }
 
     protected override Vector2 MeasureOverride(Vector2 availableSize)
index 487e0732b46a8b7b1f36528a079f88d1e5d1dd76..a462d40e6981a2faff2ca5454c3803f2fb6e3120 100644 (file)
@@ -12,6 +12,8 @@ namespace Content.Client.Paper.UI;
 [GenerateTypedNameReferences]
 public sealed partial class StampWidget : PanelContainer
 {
+    private static readonly ProtoId<ShaderPrototype> PaperStamp = "PaperStamp";
+
     private StyleBoxTexture _borderTexture;
     private ShaderInstance? _stampShader;
 
@@ -42,7 +44,7 @@ public sealed partial class StampWidget : PanelContainer
         PanelOverride = _borderTexture;
 
         var prototypes = IoCManager.Resolve<IPrototypeManager>();
-        _stampShader = prototypes.Index<ShaderPrototype>("PaperStamp").InstanceUnique();
+        _stampShader = prototypes.Index(PaperStamp).InstanceUnique();
     }
 
     protected override void Draw(DrawingHandleScreen handle)
index cc5016c4a70a62aa7ea5f9ebc8f422bcd9c1dae2..27a585119ea82081d4b19634b1f081246708049b 100644 (file)
@@ -262,6 +262,7 @@ public sealed partial class ParticleAcceleratorControlMenu : FancyWindow
 
 public sealed class PASegmentControl : Control
 {
+    private static readonly ProtoId<ShaderPrototype> GreyscaleShaderId = "Greyscale";
     private readonly ShaderInstance _greyScaleShader;
     private readonly TextureRect _base;
     private readonly TextureRect _unlit;
@@ -272,7 +273,7 @@ public sealed class PASegmentControl : Control
 
     public PASegmentControl()
     {
-        _greyScaleShader = IoCManager.Resolve<IPrototypeManager>().Index<ShaderPrototype>("Greyscale").Instance();
+        _greyScaleShader = IoCManager.Resolve<IPrototypeManager>().Index(GreyscaleShaderId).Instance();
 
         AddChild(_base = new TextureRect());
         AddChild(_unlit = new TextureRect());
index cf22c8bbd52c3a815146d0fe94e2dbf2e094362c..3b3e9cd4630e3d9d6fe33dafa4e04e04bdfa8770 100644 (file)
@@ -16,6 +16,8 @@ namespace Content.Client.Popups;
 /// </summary>
 public sealed class PopupOverlay : Overlay
 {
+    private static readonly ProtoId<ShaderPrototype> UnshadedShader = "unshaded";
+
     private readonly IConfigurationManager _configManager;
     private readonly IEntityManager _entManager;
     private readonly IPlayerManager _playerMgr;
@@ -48,7 +50,7 @@ public sealed class PopupOverlay : Overlay
         _popup = popup;
         _controller = controller;
 
-        _shader = protoManager.Index<ShaderPrototype>("unshaded").Instance();
+        _shader = protoManager.Index(UnshadedShader).Instance();
     }
 
     protected override void Draw(in OverlayDrawArgs args)
index d6e36dd0ad4a7f0c0da6e78fe4b6fab287691e12..4cbeaa52f5e79c6a2f11569b8b73f5fbac26de4a 100644 (file)
@@ -13,6 +13,8 @@ namespace Content.Client.Radiation.Overlays
 {
     public sealed class RadiationPulseOverlay : Overlay
     {
+        private static readonly ProtoId<ShaderPrototype> RadiationShader = "Radiation";
+
         [Dependency] private readonly IEntityManager _entityManager = default!;
         [Dependency] private readonly IPrototypeManager _prototypeManager = default!;
         [Dependency] private readonly IGameTiming _gameTiming = default!;
@@ -29,7 +31,7 @@ namespace Content.Client.Radiation.Overlays
         public RadiationPulseOverlay()
         {
             IoCManager.InjectDependencies(this);
-            _baseShader = _prototypeManager.Index<ShaderPrototype>("Radiation").Instance().Duplicate();
+            _baseShader = _prototypeManager.Index(RadiationShader).Instance().Duplicate();
         }
 
         protected override bool BeforeDraw(in OverlayDrawArgs args)
index f24a1e964883cc495f7fe96356ea45d5d73440d1..185d26f333a9ac3f66f3355ac32725b2bdbabdbd 100644 (file)
@@ -14,6 +14,8 @@ namespace Content.Client.Shuttles;
 /// </summary>
 public sealed class FtlArrivalOverlay : Overlay
 {
+    private static readonly ProtoId<ShaderPrototype> UnshadedShader = "unshaded";
+
     public override OverlaySpace Space => OverlaySpace.WorldSpaceBelowEntities;
 
     private EntityLookupSystem _lookups;
@@ -36,7 +38,7 @@ public sealed class FtlArrivalOverlay : Overlay
         _maps = _entManager.System<SharedMapSystem>();
         _sprites = _entManager.System<SpriteSystem>();
 
-        _shader = _protos.Index<ShaderPrototype>("unshaded").Instance();
+        _shader = _protos.Index(UnshadedShader).Instance();
     }
 
     protected override bool BeforeDraw(in OverlayDrawArgs args)
index 15a8a3a63fe90ad1f2759a05c9b98d6e1becfd62..5c84ce0c9389ce52affc217b9d092c8b0678fdd2 100644 (file)
@@ -12,6 +12,10 @@ namespace Content.Client.Silicons.StationAi;
 
 public sealed class StationAiOverlay : Overlay
 {
+    private static readonly ProtoId<ShaderPrototype> CameraStaticShader = "CameraStatic";
+    private static readonly ProtoId<ShaderPrototype> StencilMaskShader = "StencilMask";
+    private static readonly ProtoId<ShaderPrototype> StencilDrawShader = "StencilDraw";
+
     [Dependency] private readonly IClyde _clyde = default!;
     [Dependency] private readonly IEntityManager _entManager = default!;
     [Dependency] private readonly IGameTiming _timing = default!;
@@ -91,7 +95,7 @@ public sealed class StationAiOverlay : Overlay
             () =>
             {
                 worldHandle.SetTransform(invMatrix);
-                var shader = _proto.Index<ShaderPrototype>("CameraStatic").Instance();
+                var shader = _proto.Index(CameraStaticShader).Instance();
                 worldHandle.UseShader(shader);
                 worldHandle.DrawRect(worldBounds, Color.White);
             },
@@ -114,11 +118,11 @@ public sealed class StationAiOverlay : Overlay
         }
 
         // Use the lighting as a mask
-        worldHandle.UseShader(_proto.Index<ShaderPrototype>("StencilMask").Instance());
+        worldHandle.UseShader(_proto.Index(StencilMaskShader).Instance());
         worldHandle.DrawTextureRect(_stencilTexture!.Texture, worldBounds);
 
         // Draw the static
-        worldHandle.UseShader(_proto.Index<ShaderPrototype>("StencilDraw").Instance());
+        worldHandle.UseShader(_proto.Index(StencilDrawShader).Instance());
         worldHandle.DrawTextureRect(_staticTexture!.Texture, worldBounds);
 
         worldHandle.SetTransform(Matrix3x2.Identity);
index e71b6e96b8506df168a3f2f69237634245588379..39b0758bf17cc9163787ebd2e0303c3e0e33e0a3 100644 (file)
@@ -9,6 +9,8 @@ namespace Content.Client.Singularity
 {
     public sealed class SingularityOverlay : Overlay, IEntityEventSubscriber
     {
+        private static readonly ProtoId<ShaderPrototype> Shader = "Singularity";
+
         [Dependency] private readonly IEntityManager _entMan = default!;
         [Dependency] private readonly IPrototypeManager _prototypeManager = default!;
         private SharedTransformSystem? _xformSystem = null;
@@ -29,7 +31,7 @@ namespace Content.Client.Singularity
         public SingularityOverlay()
         {
             IoCManager.InjectDependencies(this);
-            _shader = _prototypeManager.Index<ShaderPrototype>("Singularity").Instance().Duplicate();
+            _shader = _prototypeManager.Index(Shader).Instance().Duplicate();
             _shader.SetParameter("maxDistance", MaxDistance * EyeManager.PixelsPerMeter);
             _entMan.EventBus.SubscribeEvent<PixelToMapEvent>(EventSource.Local, this, OnProjectFromScreenToMap);
             ZIndex = 101; // Should be drawn after the placement overlay so admins placing items near the singularity can tell where they're going.
index aff450e657282222a1bd8abccd1a55823b9e13b3..4d3be5439cffa0e788125d17a707f8c25322dcd0 100644 (file)
@@ -11,6 +11,8 @@ namespace Content.Client.StatusIcon;
 
 public sealed class StatusIconOverlay : Overlay
 {
+    private static readonly ProtoId<ShaderPrototype> UnshadedShader = "unshaded";
+
     [Dependency] private readonly IEntityManager _entity = default!;
     [Dependency] private readonly IPrototypeManager _prototype = default!;
     [Dependency] private readonly IGameTiming _timing = default!;
@@ -29,7 +31,7 @@ public sealed class StatusIconOverlay : Overlay
         _sprite = _entity.System<SpriteSystem>();
         _transform = _entity.System<TransformSystem>();
         _statusIcon = _entity.System<StatusIconSystem>();
-        _unshadedShader = _prototype.Index<ShaderPrototype>("unshaded").Instance();
+        _unshadedShader = _prototype.Index(UnshadedShader).Instance();
     }
 
     protected override void Draw(in OverlayDrawArgs args)
index 940f8f154d7af7817ee480afa6407c3a865a5cc7..5810b9bc85602e40226299ab810a2d9925493711 100644 (file)
@@ -10,6 +10,8 @@ namespace Content.Client.Stealth;
 
 public sealed class StealthSystem : SharedStealthSystem
 {
+    private static readonly ProtoId<ShaderPrototype> Shader = "Stealth";
+
     [Dependency] private readonly IPrototypeManager _protoMan = default!;
     [Dependency] private readonly SharedTransformSystem _transformSystem = default!;
     [Dependency] private readonly SpriteSystem _sprite = default!;
@@ -20,7 +22,7 @@ public sealed class StealthSystem : SharedStealthSystem
     {
         base.Initialize();
 
-        _shader = _protoMan.Index<ShaderPrototype>("Stealth").InstanceUnique();
+        _shader = _protoMan.Index(Shader).InstanceUnique();
 
         SubscribeLocalEvent<StealthComponent, ComponentShutdown>(OnShutdown);
         SubscribeLocalEvent<StealthComponent, ComponentStartup>(OnStartup);
index 0fbaf858da4ae95d95adb0343a537eee17b8e3f3..ac82fbff590692104ffc1eb08f99a2049a58f1c9 100644 (file)
@@ -17,6 +17,8 @@ namespace Content.Client.SurveillanceCamera.UI;
 [GenerateTypedNameReferences]
 public sealed partial class SurveillanceCameraMonitorWindow : DefaultWindow
 {
+    private static readonly ProtoId<ShaderPrototype> CameraStaticShader = "CameraStatic";
+
     [Dependency] private readonly IPrototypeManager _prototypeManager = default!;
     [Dependency] private readonly IResourceCache _resourceCache = default!;
 
@@ -53,7 +55,7 @@ public sealed partial class SurveillanceCameraMonitorWindow : DefaultWindow
 
         // This could be done better. I don't want to deal with stylesheets at the moment.
         var texture = _resourceCache.GetTexture("/Textures/Interface/Nano/square_black.png");
-        var shader = _prototypeManager.Index<ShaderPrototype>("CameraStatic").Instance().Duplicate();
+        var shader = _prototypeManager.Index(CameraStaticShader).Instance().Duplicate();
 
         CameraView.ViewportSize = new Vector2i(500, 500);
         CameraView.Eye = _defaultEye; // sure
index de70fe16f82a6df1d39c871d087164d78bce680a..3eef88f19bb1fe4555a4066782cd0d2e4c8cfde7 100644 (file)
@@ -9,6 +9,8 @@ namespace Content.Client.UserInterface.Systems.DamageOverlays.Overlays;
 
 public sealed class DamageOverlay : Overlay
 {
+    private static readonly ProtoId<ShaderPrototype> CircleMaskShader = "GradientCircleMask";
+
     [Dependency] private readonly IGameTiming _timing = default!;
     [Dependency] private readonly IPrototypeManager _prototypeManager = default!;
     [Dependency] private readonly IEntityManager _entityManager = default!;
@@ -49,9 +51,9 @@ public sealed class DamageOverlay : Overlay
     {
         // TODO: Replace
         IoCManager.InjectDependencies(this);
-        _oxygenShader = _prototypeManager.Index<ShaderPrototype>("GradientCircleMask").InstanceUnique();
-        _critShader = _prototypeManager.Index<ShaderPrototype>("GradientCircleMask").InstanceUnique();
-        _bruteShader = _prototypeManager.Index<ShaderPrototype>("GradientCircleMask").InstanceUnique();
+        _oxygenShader = _prototypeManager.Index(CircleMaskShader).InstanceUnique();
+        _critShader = _prototypeManager.Index(CircleMaskShader).InstanceUnique();
+        _bruteShader = _prototypeManager.Index(CircleMaskShader).InstanceUnique();
     }
 
     protected override void Draw(in OverlayDrawArgs args)