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);
}
}
}
}