public sealed class FultonSystem : SharedFultonSystem
{
[Dependency] private readonly IRobustRandom _random = default!;
- [Dependency] private readonly SharedContainerSystem _container = default!;
public override void Initialize()
{
{
if (!Deleted(component.Beacon) &&
TryComp<TransformComponent>(component.Beacon, out var beaconXform) &&
- !_container.IsEntityOrParentInContainer(component.Beacon.Value, xform: beaconXform))
+ !Container.IsEntityOrParentInContainer(component.Beacon.Value, xform: beaconXform) &&
+ CanFulton(uid))
{
var xform = Transform(uid);
var metadata = MetaData(uid);
[Dependency] protected readonly SharedAudioSystem Audio = default!;
[Dependency] private readonly SharedDoAfterSystem _doAfter = default!;
[Dependency] private readonly FoldableSystem _foldable = default!;
+ [Dependency] protected readonly SharedContainerSystem Container = default!;
[Dependency] private readonly SharedPopupSystem _popup = default!;
[Dependency] private readonly SharedStackSystem _stack = default!;
[Dependency] protected readonly SharedTransformSystem TransformSystem = default!;
return;
}
- if (!CanFulton(args.Target.Value, uid, component))
+ if (!CanApplyFulton(args.Target.Value, component))
{
_popup.PopupClient(Loc.GetString("fulton-invalid"), uid, uid);
return;
return;
}
- private bool CanFulton(EntityUid targetUid, EntityUid uid, FultonComponent component)
+ protected bool CanApplyFulton(EntityUid targetUid, FultonComponent component)
{
- if (Transform(targetUid).Anchored)
+ if (!CanFulton(targetUid))
return false;
if (component.Whitelist?.IsValid(targetUid, EntityManager) != true)
- {
return false;
- }
+
+ return true;
+ }
+
+ protected bool CanFulton(EntityUid uid)
+ {
+ var xform = Transform(uid);
+
+ if (xform.Anchored)
+ return false;
+
+ // Shouldn't need recursive container checks I think.
+ if (Container.IsEntityInContainer(uid))
+ return false;
return true;
}