diff --git a/Content.Client/Explosion/ClusterGrenadeVisualizer.cs b/Content.Client/Explosion/ClusterGrenadeVisualizer.cs deleted file mode 100644 index ace76bb5de..0000000000 --- a/Content.Client/Explosion/ClusterGrenadeVisualizer.cs +++ /dev/null @@ -1,34 +0,0 @@ -using Content.Shared.Explosion; -using JetBrains.Annotations; -using Robust.Client.GameObjects; -using Robust.Shared.GameObjects; -using Robust.Shared.IoC; -using Robust.Shared.Serialization.Manager.Attributes; - -namespace Content.Client.Explosion -{ - [UsedImplicitly] - // ReSharper disable once InconsistentNaming - public sealed class ClusterGrenadeVisualizer : AppearanceVisualizer - { - [DataField("state")] - private string? _state; - - [Obsolete("Subscribe to AppearanceChangeEvent instead.")] - public override void OnChangeData(AppearanceComponent component) - { - base.OnChangeData(component); - - var entities = IoCManager.Resolve(); - if (!entities.TryGetComponent(component.Owner, out var sprite)) - { - return; - } - - if (component.TryGetData(ClusterGrenadeVisuals.GrenadesCounter, out int grenadesCounter)) - { - sprite.LayerSetState(0, $"{_state}-{grenadesCounter}"); - } - } - } -} diff --git a/Content.Client/Explosion/ClusterGrenadeVisualizerSystem.cs b/Content.Client/Explosion/ClusterGrenadeVisualizerSystem.cs new file mode 100644 index 0000000000..1e35cb6b59 --- /dev/null +++ b/Content.Client/Explosion/ClusterGrenadeVisualizerSystem.cs @@ -0,0 +1,16 @@ +using Content.Shared.Explosion; +using Robust.Client.GameObjects; + +namespace Content.Client.Explosion; + +public sealed class ClusterGrenadeVisualizerSystem : VisualizerSystem +{ + protected override void OnAppearanceChange(EntityUid uid, ClusterGrenadeVisualsComponent comp, ref AppearanceChangeEvent args) + { + if (args.Sprite == null) + return; + + if (AppearanceSystem.TryGetData(uid, ClusterGrenadeVisuals.GrenadesCounter, out var grenadesCounter, args.Component)) + args.Sprite.LayerSetState(0, $"{comp.State}-{grenadesCounter}"); + } +} diff --git a/Content.Client/Explosion/ClusterGrenadeVisualsComponent.cs b/Content.Client/Explosion/ClusterGrenadeVisualsComponent.cs new file mode 100644 index 0000000000..df04358c58 --- /dev/null +++ b/Content.Client/Explosion/ClusterGrenadeVisualsComponent.cs @@ -0,0 +1,9 @@ +namespace Content.Client.Explosion; + +[RegisterComponent] +[Access(typeof(ClusterGrenadeVisualizerSystem))] +public sealed class ClusterGrenadeVisualsComponent : Component +{ + [DataField("state")] + public string? State; +} diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Throwable/clusterbang.yml b/Resources/Prototypes/Entities/Objects/Weapons/Throwable/clusterbang.yml index b2a17e1dd2..794ab0a4b2 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Throwable/clusterbang.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Throwable/clusterbang.yml @@ -9,9 +9,8 @@ netsync: false state: base-0 - type: Appearance - visuals: - - type: ClusterGrenadeVisualizer - state: base + - type: ClusterGrenadeVisuals + state: base - type: ClusterGrenade - type: ContainerContainer containers: