diff --git a/Content.Shared/Storage/EntitySystems/SharedItemMapperSystem.cs b/Content.Shared/Storage/EntitySystems/SharedItemMapperSystem.cs
index eb20c65a11..7ae821d8d9 100644
--- a/Content.Shared/Storage/EntitySystems/SharedItemMapperSystem.cs
+++ b/Content.Shared/Storage/EntitySystems/SharedItemMapperSystem.cs
@@ -4,107 +4,109 @@ using Content.Shared.Whitelist;
using JetBrains.Annotations;
using Robust.Shared.Containers;
-namespace Content.Shared.Storage.EntitySystems
+namespace Content.Shared.Storage.EntitySystems;
+
+///
+/// ItemMapperSystem is a system that on each initialization, insertion, removal of an entity from
+/// given (with appropriate storage attached) will check each stored item to see
+/// if its tags/component, and overall quantity match .
+///
+[UsedImplicitly]
+public abstract class SharedItemMapperSystem : EntitySystem
{
- ///
- /// ItemMapperSystem is a system that on each initialization, insertion, removal of an entity from
- /// given (with appropriate storage attached) will check each stored item to see
- /// if its tags/component, and overall quantity match .
- ///
- [UsedImplicitly]
- public abstract class SharedItemMapperSystem : EntitySystem
+ [Dependency] private readonly SharedAppearanceSystem _appearance = default!;
+ [Dependency] private readonly SharedContainerSystem _container = default!;
+ [Dependency] private readonly EntityWhitelistSystem _whitelistSystem = default!;
+
+ ///
+ public override void Initialize()
{
- [Dependency] private readonly SharedAppearanceSystem _appearance = default!;
- [Dependency] private readonly SharedContainerSystem _container = default!;
- [Dependency] private readonly EntityWhitelistSystem _whitelistSystem = default!;
+ base.Initialize();
+ SubscribeLocalEvent(InitLayers);
+ SubscribeLocalEvent(MapperEntityInserted);
+ SubscribeLocalEvent(MapperEntityRemoved);
+ }
- ///
- public override void Initialize()
+ private void InitLayers(EntityUid uid, ItemMapperComponent component, ComponentInit args)
+ {
+ foreach (var (layerName, val) in component.MapLayers)
{
- base.Initialize();
- SubscribeLocalEvent(InitLayers);
- SubscribeLocalEvent(MapperEntityInserted);
- SubscribeLocalEvent(MapperEntityRemoved);
+ val.Layer = layerName;
}
- private void InitLayers(EntityUid uid, ItemMapperComponent component, ComponentInit args)
+ if (EntityManager.TryGetComponent(uid, out AppearanceComponent? appearanceComponent))
{
- foreach (var (layerName, val) in component.MapLayers)
- {
- val.Layer = layerName;
- }
-
- if (EntityManager.TryGetComponent(uid, out AppearanceComponent? appearanceComponent))
- {
- var list = new List(component.MapLayers.Keys);
- _appearance.SetData(uid, StorageMapVisuals.InitLayers, new ShowLayerData(list), appearanceComponent);
- }
-
- // Ensure appearance is correct with current contained entities.
- UpdateAppearance(uid, component);
+ var list = new List(component.MapLayers.Keys);
+ _appearance.SetData(uid, StorageMapVisuals.InitLayers, new ShowLayerData(list), appearanceComponent);
}
- private void MapperEntityRemoved(EntityUid uid, ItemMapperComponent itemMapper,
- EntRemovedFromContainerMessage args)
+ // Ensure appearance is correct with current contained entities.
+ UpdateAppearance(uid, component);
+ }
+
+ private void MapperEntityRemoved(EntityUid uid, ItemMapperComponent itemMapper, EntRemovedFromContainerMessage args)
+ {
+ if (itemMapper.ContainerWhitelist != null && !itemMapper.ContainerWhitelist.Contains(args.Container.ID))
+ return;
+
+ UpdateAppearance(uid, itemMapper);
+ }
+
+ private void MapperEntityInserted(EntityUid uid,
+ ItemMapperComponent itemMapper,
+ EntInsertedIntoContainerMessage args)
+ {
+ if (itemMapper.ContainerWhitelist != null && !itemMapper.ContainerWhitelist.Contains(args.Container.ID))
+ return;
+
+ UpdateAppearance(uid, itemMapper);
+ }
+
+ private void UpdateAppearance(EntityUid uid, ItemMapperComponent? itemMapper = null)
+ {
+ if (!Resolve(uid, ref itemMapper))
+ return;
+
+ if (EntityManager.TryGetComponent(uid, out AppearanceComponent? appearanceComponent)
+ && TryGetLayers(uid, itemMapper, out var containedLayers))
{
- if (itemMapper.ContainerWhitelist != null && !itemMapper.ContainerWhitelist.Contains(args.Container.ID))
- return;
-
- UpdateAppearance(uid, itemMapper);
- }
-
- private void MapperEntityInserted(EntityUid uid, ItemMapperComponent itemMapper,
- EntInsertedIntoContainerMessage args)
- {
- if (itemMapper.ContainerWhitelist != null && !itemMapper.ContainerWhitelist.Contains(args.Container.ID))
- return;
-
- UpdateAppearance(uid, itemMapper);
- }
-
- private void UpdateAppearance(EntityUid uid, ItemMapperComponent? itemMapper = null)
- {
- if(!Resolve(uid, ref itemMapper))
- return;
-
- if (EntityManager.TryGetComponent(uid, out AppearanceComponent? appearanceComponent)
- && TryGetLayers(uid, itemMapper, out var containedLayers))
- {
- _appearance.SetData(uid, StorageMapVisuals.LayerChanged, new ShowLayerData(containedLayers), appearanceComponent);
- }
- }
-
- ///
- /// Method that iterates over storage of the entity in and sets according to
- /// definition. It will have O(n*m) time behavior (n - number of entities in container, and m - number of
- /// definitions in .
- ///
- /// EntityUid used to search the storage
- /// component that contains definition used to map whitelist in
- /// mapLayers to string.
- ///
- /// list of layers that should be visible
- /// false if msg.Container.Owner is not a storage, true otherwise.
- private bool TryGetLayers(EntityUid uid,
- ItemMapperComponent itemMapper,
- out List showLayers)
- {
- var containedLayers = _container.GetAllContainers(uid)
- .Where(c => itemMapper.ContainerWhitelist?.Contains(c.ID) ?? true).SelectMany(cont => cont.ContainedEntities).ToArray();
-
- var list = new List();
- foreach (var mapLayerData in itemMapper.MapLayers.Values)
- {
- var count = containedLayers.Count(ent => _whitelistSystem.IsWhitelistPassOrNull(mapLayerData.Whitelist,
- ent));
- if (count >= mapLayerData.MinCount && count <= mapLayerData.MaxCount)
- {
- list.Add(mapLayerData.Layer);
- }
- }
-
- showLayers = list;
- return true;
+ _appearance.SetData(uid,
+ StorageMapVisuals.LayerChanged,
+ new ShowLayerData(containedLayers),
+ appearanceComponent);
}
}
+
+ ///
+ /// Method that iterates over storage of the entity in and sets
+ /// according to definition. It will have O(n*m) time behavior
+ /// (n - number of entities in container, and m - number of definitions in ).
+ ///
+ /// EntityUid used to search the storage
+ /// component that contains definition used to map
+ /// Whitelist in to string.
+ ///
+ /// list of layers that should be visible
+ /// false if msg.Container.Owner is not a storage, true otherwise.
+ private bool TryGetLayers(EntityUid uid, ItemMapperComponent itemMapper, out List showLayers)
+ {
+ var containedLayers = _container.GetAllContainers(uid)
+ .Where(c => itemMapper.ContainerWhitelist?.Contains(c.ID) ?? true)
+ .SelectMany(cont => cont.ContainedEntities)
+ .ToArray();
+
+ var list = new List();
+ foreach (var mapLayerData in itemMapper.MapLayers.Values)
+ {
+ var count = containedLayers.Count(ent => _whitelistSystem.IsWhitelistPassOrNull(mapLayerData.Whitelist,
+ ent));
+ if (count >= mapLayerData.MinCount && count <= mapLayerData.MaxCount)
+ {
+ list.Add(mapLayerData.Layer);
+ }
+ }
+
+ showLayers = list;
+ return true;
+ }
}