using Content.Shared.Charges.Systems; using Content.Shared.DoAfter; using Content.Shared.Item; using Content.Shared.ParcelWrap.Components; using Content.Shared.Popups; using Content.Shared.Whitelist; using Robust.Shared.Audio.Systems; using Robust.Shared.Containers; using Robust.Shared.Network; namespace Content.Shared.ParcelWrap.Systems; /// /// This system handles things related to package wrap, both wrapping items to create parcels, and unwrapping existing /// parcels. /// /// /// public sealed partial class ParcelWrappingSystem : EntitySystem { [Dependency] private readonly SharedAppearanceSystem _appearance = default!; [Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly SharedChargesSystem _charges = default!; [Dependency] private readonly SharedContainerSystem _container = default!; [Dependency] private readonly SharedDoAfterSystem _doAfter = default!; [Dependency] private readonly SharedItemSystem _item = default!; [Dependency] private readonly INetManager _net = default!; [Dependency] private readonly SharedPopupSystem _popup = default!; [Dependency] private readonly SharedTransformSystem _transform = default!; [Dependency] private readonly EntityWhitelistSystem _whitelist = default!; /// public override void Initialize() { base.Initialize(); InitializeParcelWrap(); InitializeWrappedParcel(); } /// /// Returns whether or not can be used to wrap . /// /// The entity doing the wrapping. /// The entity to be wrapped. /// True if can be used to wrap , false otherwise. public bool IsWrappable(Entity wrapper, EntityUid target) { return // Wrapping cannot wrap itself wrapper.Owner != target && // Wrapper should never be empty, but may as well make sure. !_charges.IsEmpty(wrapper.Owner) && _whitelist.CheckBoth(target, wrapper.Comp.Blacklist, wrapper.Comp.Whitelist); } }