+++ /dev/null
-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<IEntityManager>();
- if (!entities.TryGetComponent<SpriteComponent>(component.Owner, out var sprite))
- {
- return;
- }
-
- if (component.TryGetData(ClusterGrenadeVisuals.GrenadesCounter, out int grenadesCounter))
- {
- sprite.LayerSetState(0, $"{_state}-{grenadesCounter}");
- }
- }
- }
-}
--- /dev/null
+using Content.Shared.Explosion;
+using Robust.Client.GameObjects;
+
+namespace Content.Client.Explosion;
+
+public sealed class ClusterGrenadeVisualizerSystem : VisualizerSystem<ClusterGrenadeVisualsComponent>
+{
+ protected override void OnAppearanceChange(EntityUid uid, ClusterGrenadeVisualsComponent comp, ref AppearanceChangeEvent args)
+ {
+ if (args.Sprite == null)
+ return;
+
+ if (AppearanceSystem.TryGetData<int>(uid, ClusterGrenadeVisuals.GrenadesCounter, out var grenadesCounter, args.Component))
+ args.Sprite.LayerSetState(0, $"{comp.State}-{grenadesCounter}");
+ }
+}
--- /dev/null
+namespace Content.Client.Explosion;
+
+[RegisterComponent]
+[Access(typeof(ClusterGrenadeVisualizerSystem))]
+public sealed class ClusterGrenadeVisualsComponent : Component
+{
+ [DataField("state")]
+ public string? State;
+}