From 6395345925c30f683f02d1289ed1a1a1cb5b3841 Mon Sep 17 00:00:00 2001 From: Pieter-Jan Briers Date: Tue, 24 Nov 2020 00:14:46 +0100 Subject: [PATCH] Fix bad reflection usage from OverlayEffectsComponent. --- .../Mobs/ClientOverlayEffectsComponent.cs | 20 ++++--------------- .../Graphics/Overlays/FlashOverlay.cs | 9 ++++++--- Content.Shared/Interfaces/IConfigurable.cs | 7 ------- .../Interfaces/IConfigurableOverlay.cs | 9 +++++++++ 4 files changed, 19 insertions(+), 26 deletions(-) delete mode 100644 Content.Shared/Interfaces/IConfigurable.cs create mode 100644 Content.Shared/Interfaces/IConfigurableOverlay.cs diff --git a/Content.Client/GameObjects/Components/Mobs/ClientOverlayEffectsComponent.cs b/Content.Client/GameObjects/Components/Mobs/ClientOverlayEffectsComponent.cs index 8aae18facf..34a3f25e1e 100644 --- a/Content.Client/GameObjects/Components/Mobs/ClientOverlayEffectsComponent.cs +++ b/Content.Client/GameObjects/Components/Mobs/ClientOverlayEffectsComponent.cs @@ -141,23 +141,11 @@ namespace Content.Client.GameObjects.Components.Mobs private void UpdateOverlayConfiguration(OverlayContainer container, Overlay overlay) { - var configurableTypes = overlay.GetType() - .GetInterfaces() - .Where(type => - type.IsGenericType - && type.GetGenericTypeDefinition() == typeof(IConfigurable<>) - && container.Parameters.Exists(p => p.GetType() == type.GenericTypeArguments.First())) - .ToList(); - - if (configurableTypes.Count > 0) + if (overlay is IConfigurableOverlay configurable) { - foreach (var type in configurableTypes) + foreach (var param in container.Parameters) { - var method = type.GetMethod(nameof(IConfigurable.Configure)); - var parameter = container.Parameters - .First(p => p.GetType() == type.GenericTypeArguments.First()); - - method!.Invoke(overlay, new []{ parameter }); + configurable.Configure(param); } } } @@ -169,7 +157,7 @@ namespace Content.Client.GameObjects.Components.Mobs if (overlayType != null) { - overlay = Activator.CreateInstance(overlayType) as Overlay; + overlay = IoCManager.Resolve().CreateInstance(overlayType); UpdateOverlayConfiguration(container, overlay); return true; } diff --git a/Content.Client/Graphics/Overlays/FlashOverlay.cs b/Content.Client/Graphics/Overlays/FlashOverlay.cs index 278e2c0884..547e4dcb17 100644 --- a/Content.Client/Graphics/Overlays/FlashOverlay.cs +++ b/Content.Client/Graphics/Overlays/FlashOverlay.cs @@ -14,7 +14,7 @@ using SixLabors.ImageSharp.PixelFormats; namespace Content.Client.Graphics.Overlays { - public class FlashOverlay : Overlay, IConfigurable + public class FlashOverlay : Overlay, IConfigurableOverlay { [Dependency] private readonly IPrototypeManager _prototypeManager = default!; [Dependency] private readonly IClyde _displayManager = default!; @@ -61,9 +61,12 @@ namespace Content.Client.Graphics.Overlays _screenshotTexture = null; } - public void Configure(TimedOverlayParameter parameters) + public void Configure(OverlayParameter parameters) { - _lastsFor = parameters.Length; + if (parameters is TimedOverlayParameter timedParams) + { + _lastsFor = timedParams.Length; + } } } } diff --git a/Content.Shared/Interfaces/IConfigurable.cs b/Content.Shared/Interfaces/IConfigurable.cs deleted file mode 100644 index 17fbe07880..0000000000 --- a/Content.Shared/Interfaces/IConfigurable.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace Content.Shared.Interfaces -{ - public interface IConfigurable - { - public void Configure(T parameters); - } -} diff --git a/Content.Shared/Interfaces/IConfigurableOverlay.cs b/Content.Shared/Interfaces/IConfigurableOverlay.cs new file mode 100644 index 0000000000..e1f0a6b974 --- /dev/null +++ b/Content.Shared/Interfaces/IConfigurableOverlay.cs @@ -0,0 +1,9 @@ +using Content.Shared.GameObjects.Components.Mobs; + +namespace Content.Shared.Interfaces +{ + public interface IConfigurableOverlay + { + void Configure(OverlayParameter parameter); + } +}