示例#1
0
 private bool CanPull(EntityUid entity)
 {
     return(!(EntityManager.HasComponent <GhostComponent>(entity) ||
              EntityManager.HasComponent <IMapGridComponent>(entity) ||
              EntityManager.HasComponent <MapComponent>(entity) ||
              entity.IsInContainer()));
 }
示例#2
0
        public override Outcome Execute(float frameTime)
        {
            var entMan = IoCManager.Resolve <IEntityManager>();

            if (entMan.Deleted(_target) ||
                !entMan.HasComponent <SharedItemComponent>(_target) ||
                _target.IsInContainer() ||
                !_owner.InRangeUnobstructed(_target, popup: true))
            {
                return(Outcome.Failed);
            }

            if (!entMan.TryGetComponent(_owner, out HandsComponent? handsComponent))
            {
                return(Outcome.Failed);
            }

            var emptyHands = false;

            foreach (var hand in handsComponent.ActivePriorityEnumerable())
            {
                if (handsComponent.GetItem(hand) == null)
                {
                    if (handsComponent.ActiveHand != hand)
                    {
                        handsComponent.ActiveHand = hand;
                    }

                    emptyHands = true;
                    break;
                }
            }

            if (!emptyHands)
            {
                return(Outcome.Failed);
            }

            var interactionSystem = EntitySystem.Get <InteractionSystem>();

            interactionSystem.InteractHand(_owner, _target);
            return(Outcome.Success);
        }
示例#3
0
        public override Outcome Execute(float frameTime)
        {
            var entMan            = IoCManager.Resolve <IEntityManager>();
            var sysMan            = IoCManager.Resolve <IEntitySystemManager>();
            var interactionSystem = sysMan.GetEntitySystem <InteractionSystem>();
            var handsSys          = sysMan.GetEntitySystem <SharedHandsSystem>();

            if (entMan.Deleted(_target) ||
                !entMan.HasComponent <SharedItemComponent>(_target) ||
                _target.IsInContainer() ||
                !interactionSystem.InRangeUnobstructed(_owner, _target, popup: true))
            {
                return(Outcome.Failed);
            }

            // select empty hand
            if (!handsSys.TrySelectEmptyHand(_owner))
            {
                return(Outcome.Failed);
            }

            interactionSystem.InteractHand(_owner, _target);
            return(Outcome.Success);
        }