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.IsWhitelistPass(wrapper.Comp.Whitelist, target) &&
_whitelist.IsBlacklistFail(wrapper.Comp.Blacklist, target);
}
}