using System.Collections.Generic; using JetBrains.Annotations; using Robust.Shared.GameObjects; using Robust.Shared.IoC; using Robust.Shared.Serialization; using Robust.Shared.Serialization.Manager.Attributes; namespace Robust.Shared.Containers { /// /// Default implementation for containers, /// cannot be inherited. If additional logic is needed, /// this logic should go on the systems that are holding this container. /// For example, inventory containers should be modified only through an inventory component. /// [UsedImplicitly] [SerializedType(ClassName)] public sealed class Container : BaseContainer { private const string ClassName = "Container"; /// /// The generic container class uses a list of entities /// [DataField("ents")] private readonly List _containerList = new(); private readonly List _expectedEntities = new(); /// public override IReadOnlyList ContainedEntities => _containerList; public override List ExpectedEntities => _expectedEntities; /// public override string ContainerType => ClassName; /// protected override void InternalInsert(EntityUid toinsert, IEntityManager entMan, MetaDataComponent? meta = null) { _containerList.Add(toinsert); base.InternalInsert(toinsert, entMan, meta); } /// protected override void InternalRemove(EntityUid toremove, IEntityManager entMan, MetaDataComponent? meta = null) { _containerList.Remove(toremove); base.InternalRemove(toremove, entMan, meta); } /// public override bool Contains(EntityUid contained) { return _containerList.Contains(contained); } /// public override void Shutdown() { base.Shutdown(); var entMan = IoCManager.Resolve(); foreach (var entity in _containerList) { entMan.DeleteEntity(entity); } } } }