using System.Linq; using Content.Shared.ActionBlocker; using Content.Shared.DragDrop; using Content.Shared.Placeable; using Robust.Shared.GameStates; using Robust.Shared.Map; using Robust.Shared.Serialization; namespace Content.Shared.Storage { [NetworkedComponent()] public abstract class SharedStorageComponent : Component { [Serializable, NetSerializable] public sealed class StorageBoundUserInterfaceState : BoundUserInterfaceState { public readonly List StoredEntities; public readonly int StorageSizeUsed; public readonly int StorageCapacityMax; public StorageBoundUserInterfaceState(List storedEntities, int storageSizeUsed, int storageCapacityMax) { StoredEntities = storedEntities; StorageSizeUsed = storageSizeUsed; StorageCapacityMax = storageCapacityMax; } } [Serializable, NetSerializable] public sealed class StorageInsertItemMessage : BoundUserInterfaceMessage { } [Serializable, NetSerializable] public sealed class StorageRemoveItemMessage : BoundUserInterfaceMessage { public readonly EntityUid InteractedItemUID; public StorageRemoveItemMessage(EntityUid interactedItemUID) { InteractedItemUID = interactedItemUID; } } [Serializable, NetSerializable] public enum StorageUiKey { Key, } [Dependency] private readonly IEntityManager _entMan = default!; public abstract IReadOnlyList? StoredEntities { get; } /// /// Removes from the storage container and updates the stored value /// /// The entity to remove /// True if no longer in storage, false otherwise public abstract bool Remove(EntityUid entity); } /// /// Network event for displaying an animation of entities flying into a storage entity /// [Serializable, NetSerializable] public sealed class AnimateInsertingEntitiesEvent : EntityEventArgs { public readonly EntityUid Storage; public readonly List StoredEntities; public readonly List EntityPositions; public AnimateInsertingEntitiesEvent(EntityUid storage, List storedEntities, List entityPositions) { Storage = storage; StoredEntities = storedEntities; EntityPositions = entityPositions; } } [NetSerializable] [Serializable] public enum StorageVisuals : byte { Open, CanLock, Locked } }