diff --git a/Content.Client/Cabinet/ItemCabinetSystem.cs b/Content.Client/Cabinet/ItemCabinetSystem.cs new file mode 100644 index 0000000000..bc9b29ae35 --- /dev/null +++ b/Content.Client/Cabinet/ItemCabinetSystem.cs @@ -0,0 +1,25 @@ +using Content.Shared.Cabinet; +using Robust.Client.GameObjects; + +namespace Content.Client.Cabinet; + +public sealed class ItemCabinetSystem : VisualizerSystem +{ + protected override void OnAppearanceChange(EntityUid uid, ItemCabinetVisualsComponent component, ref AppearanceChangeEvent args) + { + if (TryComp(uid, out SpriteComponent? sprite) + && args.Component.TryGetData(ItemCabinetVisuals.IsOpen, out bool isOpen) + && args.Component.TryGetData(ItemCabinetVisuals.ContainsItem, out bool contains)) + { + var state = isOpen ? component.OpenState : component.ClosedState; + sprite.LayerSetState(ItemCabinetVisualLayers.Door, state); + sprite.LayerSetVisible(ItemCabinetVisualLayers.ContainsItem, contains); + } + } +} + +public enum ItemCabinetVisualLayers +{ + Door, + ContainsItem +} diff --git a/Content.Client/Cabinet/ItemCabinetVisualizer.cs b/Content.Client/Cabinet/ItemCabinetVisualizer.cs deleted file mode 100644 index 79e173665a..0000000000 --- a/Content.Client/Cabinet/ItemCabinetVisualizer.cs +++ /dev/null @@ -1,41 +0,0 @@ -using Content.Shared.Cabinet; -using JetBrains.Annotations; -using Robust.Client.GameObjects; -using Robust.Shared.GameObjects; -using Robust.Shared.IoC; -using Robust.Shared.Serialization.Manager.Attributes; - -namespace Content.Client.Cabinet -{ - [UsedImplicitly] - public class ItemCabinetVisualizer : AppearanceVisualizer - { - [DataField("openState", required: true)] - private string _openState = default!; - - [DataField("closedState", required: true)] - private string _closedState = default!; - - public override void OnChangeData(AppearanceComponent component) - { - base.OnChangeData(component); - - var entities = IoCManager.Resolve(); - if (entities.TryGetComponent(component.Owner, out SpriteComponent sprite) - && component.TryGetData(ItemCabinetVisuals.IsOpen, out bool isOpen) - && component.TryGetData(ItemCabinetVisuals.ContainsItem, out bool contains)) - { - var state = isOpen ? _openState : _closedState; - sprite.LayerSetState(ItemCabinetVisualLayers.Door, state); - sprite.LayerSetVisible(ItemCabinetVisualLayers.ContainsItem, contains); - } - } - } - - public enum ItemCabinetVisualLayers : byte - { - Door, - ContainsItem - //Welded - } -} diff --git a/Content.Client/Cabinet/ItemCabinetVisualsComponent.cs b/Content.Client/Cabinet/ItemCabinetVisualsComponent.cs new file mode 100644 index 0000000000..480445e1e5 --- /dev/null +++ b/Content.Client/Cabinet/ItemCabinetVisualsComponent.cs @@ -0,0 +1,11 @@ +namespace Content.Client.Cabinet; + +[RegisterComponent] +public sealed class ItemCabinetVisualsComponent : Component +{ + [DataField("openState", required: true)] + public string OpenState = default!; + + [DataField("closedState", required: true)] + public string ClosedState = default!; +} diff --git a/Content.Client/Explosion/TriggerSystem.Proximity.cs b/Content.Client/Explosion/TriggerSystem.Proximity.cs index 0e2142d8f2..0373368b9e 100644 --- a/Content.Client/Explosion/TriggerSystem.Proximity.cs +++ b/Content.Client/Explosion/TriggerSystem.Proximity.cs @@ -62,7 +62,7 @@ public sealed partial class TriggerSystem EntityManager.EnsureComponent(uid); } - private void OnProxAppChange(EntityUid uid, TriggerOnProximityComponent component, AppearanceChangeEvent args) + private void OnProxAppChange(EntityUid uid, TriggerOnProximityComponent component, ref AppearanceChangeEvent args) { OnChangeData(uid, component, args.Component); } diff --git a/Content.Server/Cabinet/ItemCabinetComponent.cs b/Content.Server/Cabinet/ItemCabinetComponent.cs index f5a0e067e0..1f3ac9001c 100644 --- a/Content.Server/Cabinet/ItemCabinetComponent.cs +++ b/Content.Server/Cabinet/ItemCabinetComponent.cs @@ -1,8 +1,5 @@ using Content.Shared.Containers.ItemSlots; using Content.Shared.Sound; -using Robust.Shared.GameObjects; -using Robust.Shared.Serialization.Manager.Attributes; -using Robust.Shared.ViewVariables; namespace Content.Server.Cabinet { @@ -10,7 +7,7 @@ namespace Content.Server.Cabinet /// Used for entities that can be opened, closed, and can hold one item. E.g., fire extinguisher cabinets. /// [RegisterComponent] - public class ItemCabinetComponent : Component + public sealed class ItemCabinetComponent : Component { /// /// Sound to be played when the cabinet door is opened. diff --git a/Content.Server/Entry/IgnoredComponents.cs b/Content.Server/Entry/IgnoredComponents.cs index 5deb43916e..9478f8565c 100644 --- a/Content.Server/Entry/IgnoredComponents.cs +++ b/Content.Server/Entry/IgnoredComponents.cs @@ -15,7 +15,8 @@ namespace Content.Server.Entry "Clickable", "Icon", "ClientEntitySpawner", - "CharacterInfo" + "CharacterInfo", + "ItemCabinetVisuals" }; } } diff --git a/Resources/Prototypes/Entities/Structures/Wallmounts/extinguisher_cabinet.yml b/Resources/Prototypes/Entities/Structures/Wallmounts/extinguisher_cabinet.yml index 72f8b9691f..13f264300d 100644 --- a/Resources/Prototypes/Entities/Structures/Wallmounts/extinguisher_cabinet.yml +++ b/Resources/Prototypes/Entities/Structures/Wallmounts/extinguisher_cabinet.yml @@ -26,10 +26,9 @@ doorSound: path: /Audio/Machines/machine_switch.ogg - type: Appearance - visuals: - - type: ItemCabinetVisualizer - openState: open - closedState: closed + - type: ItemCabinetVisuals + openState: open + closedState: closed placement: mode: SnapgridCenter diff --git a/Resources/Prototypes/Entities/Structures/Wallmounts/fireaxe_cabinet.yml b/Resources/Prototypes/Entities/Structures/Wallmounts/fireaxe_cabinet.yml index e0fdfd84f5..69e1562549 100644 --- a/Resources/Prototypes/Entities/Structures/Wallmounts/fireaxe_cabinet.yml +++ b/Resources/Prototypes/Entities/Structures/Wallmounts/fireaxe_cabinet.yml @@ -24,10 +24,9 @@ doorSound: path: /Audio/Machines/machine_switch.ogg - type: Appearance - visuals: - - type: ItemCabinetVisualizer - closedState: glass - openState: glass-up + - type: ItemCabinetVisuals + openState: glass-up + closedState: glass placement: mode: SnapgridCenter