diff --git a/Content.Client/GameObjects/Components/Crayon/CrayonDecalVisualizer.cs b/Content.Client/GameObjects/Components/Crayon/CrayonDecalVisualizer.cs index 317dcf5504..e5b6045f1f 100644 --- a/Content.Client/GameObjects/Components/Crayon/CrayonDecalVisualizer.cs +++ b/Content.Client/GameObjects/Components/Crayon/CrayonDecalVisualizer.cs @@ -13,13 +13,20 @@ namespace Content.Client.GameObjects.Components.Crayon var sprite = component.Owner.GetComponent(); - var state = component.GetData(CrayonVisuals.State); - var color = component.GetData(CrayonVisuals.Color); - var rotation = component.GetData(CrayonVisuals.Rotation); + if (component.TryGetData(CrayonVisuals.State, out string state)) + { + sprite.LayerSetState(0, state); + } - sprite.LayerSetState(0, state); - sprite.LayerSetColor(0, color); - sprite.Rotation = rotation; + if (component.TryGetData(CrayonVisuals.Color, out Color color)) + { + sprite.LayerSetColor(0, color); + } + + if (component.TryGetData(CrayonVisuals.Rotation, out Angle rotation)) + { + sprite.Rotation = rotation; + } } } } diff --git a/Content.Client/GameObjects/Components/Kitchen/MicrowaveVisualizer.cs b/Content.Client/GameObjects/Components/Kitchen/MicrowaveVisualizer.cs index f9508fa289..0c12b02f62 100644 --- a/Content.Client/GameObjects/Components/Kitchen/MicrowaveVisualizer.cs +++ b/Content.Client/GameObjects/Components/Kitchen/MicrowaveVisualizer.cs @@ -1,4 +1,5 @@ -using Content.Client.GameObjects.Components.Sound; +#nullable enable +using Content.Client.GameObjects.Components.Sound; using Content.Shared.GameObjects.Components.Power; using Content.Shared.GameObjects.Components.Sound; using Content.Shared.Kitchen; @@ -11,13 +12,13 @@ namespace Content.Client.GameObjects.Components.Kitchen { public sealed class MicrowaveVisualizer : AppearanceVisualizer { - private LoopingSoundComponent _loopingSoundComponent; - public override void OnChangeData(AppearanceComponent component) { base.OnChangeData(component); var sprite = component.Owner.GetComponent(); - _loopingSoundComponent ??= component.Owner.GetComponent(); + + var loopingSoundComponent = component.Owner.GetComponentOrNull(); + if (!component.TryGetData(PowerDeviceVisuals.VisualState, out MicrowaveVisualState state)) { state = MicrowaveVisualState.Idle; @@ -27,7 +28,7 @@ namespace Content.Client.GameObjects.Components.Kitchen case MicrowaveVisualState.Idle: sprite.LayerSetState(MicrowaveVisualizerLayers.Base, "mw"); sprite.LayerSetState(MicrowaveVisualizerLayers.BaseUnlit, "mw_unlit"); - _loopingSoundComponent.StopAllSounds(); + loopingSoundComponent?.StopAllSounds(); break; case MicrowaveVisualState.Cooking: @@ -38,8 +39,8 @@ namespace Content.Client.GameObjects.Components.Kitchen var scheduledSound = new ScheduledSound(); scheduledSound.Filename = "/Audio/Machines/microwave_loop.ogg"; scheduledSound.AudioParams = audioParams; - _loopingSoundComponent.StopAllSounds(); - _loopingSoundComponent.AddScheduledSound(scheduledSound); + loopingSoundComponent?.StopAllSounds(); + loopingSoundComponent?.AddScheduledSound(scheduledSound); break; default: diff --git a/Content.Client/GameObjects/Components/WindowVisualizer.cs b/Content.Client/GameObjects/Components/WindowVisualizer.cs index e66ded87d2..87f6e6339c 100644 --- a/Content.Client/GameObjects/Components/WindowVisualizer.cs +++ b/Content.Client/GameObjects/Components/WindowVisualizer.cs @@ -1,11 +1,11 @@ -using System; +#nullable enable +using System; using Content.Shared.GameObjects.Components; using Content.Shared.Utility; using JetBrains.Annotations; using Robust.Client.GameObjects; using Robust.Client.Interfaces.GameObjects.Components; using Robust.Shared.GameObjects.Components.Transform; -using Robust.Shared.Interfaces.GameObjects; namespace Content.Client.GameObjects.Components { @@ -17,24 +17,29 @@ namespace Content.Client.GameObjects.Components base.OnChangeData(component); var sprite = component.Owner.GetComponent(); - var snapGrid = component.Owner.GetComponent(); + if (!component.Owner.TryGetComponent(out SnapGridComponent? snapGrid)) + return; + var lowWall = FindLowWall(snapGrid); - if (lowWall == null) return; + if (lowWall == null) + return; if (component.TryGetData(WindowVisuals.Damage, out float fraction)) { var level = Math.Min(ContentHelpers.RoundToLevels(fraction, 1, 7), 5); if (level == 0) { - foreach (WindowDamageLayers val in Enum.GetValues(typeof(WindowDamageLayers))) + foreach (var val in Enum.GetValues(typeof(WindowDamageLayers))) { - sprite.LayerSetVisible(val, false); + if (val == null) continue; + sprite.LayerSetVisible((WindowDamageLayers) val, false); } return; } - foreach (WindowDamageLayers val in Enum.GetValues(typeof(WindowDamageLayers))) + foreach (var val in Enum.GetValues(typeof(WindowDamageLayers))) { - sprite.LayerSetVisible(val, true); + if (val == null) continue; + sprite.LayerSetVisible((WindowDamageLayers) val, true); } sprite.LayerSetState(WindowDamageLayers.DamageNE, $"{(int) lowWall.LastCornerNE}_{level}"); @@ -45,11 +50,11 @@ namespace Content.Client.GameObjects.Components } } - private static LowWallComponent FindLowWall(SnapGridComponent snapGrid) + private static LowWallComponent? FindLowWall(SnapGridComponent snapGrid) { foreach (var entity in snapGrid.GetLocal()) { - if (entity.TryGetComponent(out LowWallComponent lowWall)) + if (entity.TryGetComponent(out LowWallComponent? lowWall)) { return lowWall; } diff --git a/Content.IntegrationTests/Tests/DummyIconTest.cs b/Content.IntegrationTests/Tests/DummyIconTest.cs new file mode 100644 index 0000000000..4844a49237 --- /dev/null +++ b/Content.IntegrationTests/Tests/DummyIconTest.cs @@ -0,0 +1,35 @@ +#nullable enable +using System.Linq; +using System.Threading.Tasks; +using NUnit.Framework; +using Robust.Client.GameObjects; +using Robust.Client.Interfaces.ResourceManagement; +using Robust.Shared.GameObjects; +using Robust.Shared.Prototypes; + +namespace Content.IntegrationTests.Tests +{ + [TestFixture] + public class DummyIconTest : ContentIntegrationTest + { + [Test] + public async Task Test() + { + var client = StartClient(); + await client.WaitIdleAsync(); + + var prototypeManager = client.ResolveDependency(); + var resourceCache = client.ResolveDependency(); + + await client.WaitAssertion(() => + { + foreach (var proto in prototypeManager.EnumeratePrototypes()) + { + if (!proto.Components.ContainsKey("Sprite")) continue; + + SpriteComponent.GetPrototypeTextures(proto, resourceCache).ToList(); + } + }); + } + } +}