Beispiel #1
0
        private void AddInteractionVerbsVerbs(EntityUid uid, ItemSlotsComponent itemSlots, GetVerbsEvent <InteractionVerb> args)
        {
            if (args.Hands == null || !args.CanAccess || !args.CanInteract)
            {
                return;
            }

            // If there are any slots that eject on left-click, add a "Take <item>" verb.
            if (_actionBlockerSystem.CanPickup(args.User))
            {
                foreach (var slot in itemSlots.Slots.Values)
                {
                    if (!slot.EjectOnInteract || !CanEject(slot))
                    {
                        continue;
                    }

                    var verbSubject = slot.Name != string.Empty
                        ? Loc.GetString(slot.Name)
                        : EntityManager.GetComponent <MetaDataComponent>(slot.Item !.Value).EntityName ?? string.Empty;

                    InteractionVerb takeVerb = new();
                    takeVerb.IconEntity = slot.Item;
                    takeVerb.Act        = () => TryEjectToHands(uid, slot, args.User, excludeUserAudio: true);

                    if (slot.EjectVerbText == null)
                    {
                        takeVerb.Text = Loc.GetString("take-item-verb-text", ("subject", verbSubject));
                    }
                    else
                    {
                        takeVerb.Text = Loc.GetString(slot.EjectVerbText);
                    }

                    args.Verbs.Add(takeVerb);
                }
            }

            // Next, add the insert-item verbs
            if (args.Using == null || !_actionBlockerSystem.CanDrop(args.User))
            {
                return;
            }

            foreach (var slot in itemSlots.Slots.Values)
            {
                if (!CanInsert(uid, args.Using.Value, slot))
                {
                    continue;
                }

                var verbSubject = slot.Name != string.Empty
                    ? Loc.GetString(slot.Name)
                    : Name(args.Using.Value) ?? string.Empty;

                InteractionVerb insertVerb = new();
                insertVerb.IconEntity = args.Using;
                insertVerb.Act        = () => Insert(uid, slot, args.Using.Value, args.User, excludeUserAudio: true);

                if (slot.InsertVerbText != null)
                {
                    insertVerb.Text        = Loc.GetString(slot.InsertVerbText);
                    insertVerb.IconTexture = "/Textures/Interface/VerbIcons/insert.svg.192dpi.png";
                }
                else if (slot.EjectOnInteract)
                {
                    // Inserting/ejecting is a primary interaction for this entity. Instead of using the insert
                    // category, we will use a single "Place <item>" verb.
                    insertVerb.Text        = Loc.GetString("place-item-verb-text", ("subject", verbSubject));
                    insertVerb.IconTexture = "/Textures/Interface/VerbIcons/drop.svg.192dpi.png";
                }
                else
                {
                    insertVerb.Category = VerbCategory.Insert;
                    insertVerb.Text     = verbSubject;
                }

                args.Verbs.Add(insertVerb);
            }
        }