public virtual bool UseItem(int i)
 {
     if (Inventory[i] is IUsableUpdatableItem UsableUpdatableItem)
     {
         if (IsItemEligibleToBeUsed(UsableUpdatableItem))
         {
             UsableUpdatableItem.Use(this);
             ItemsCurrentlyInUse.Add(UsableUpdatableItem);
             return(true);
         }
         else
         {
             return(false);
         }
     }
     else if (Inventory[i] is IUsableItem UsableItem)
     {
         if (UsableItem.RemainingUsages > 0)
         {
             UsableItem.Use(this);
             UsableItem.RemainingUsages--;
         }
         if (UsableItem.RemainingUsages == 0)
         {
             DeleteItem(i);
         }
         return(true);
     }
     else
     {
         return(false); //Item is unusable
     }
 }
Пример #2
0
    public void InventoryRightClick(BaseItemSlot itemSlot)
    {
        if (itemSlot.Item is EquippableItem)
        {
            Equip((EquippableItem)itemSlot.Item);
        }
        else if (itemSlot.Item is UsableItem)
        {
            UsableItem usableItem = (UsableItem)itemSlot.Item;
            usableItem.Use(player);

            if (usableItem.isConsumable)
            {
                inventory.RemoveItem(usableItem);
                usableItem.Destroy();
            }
        }
        else if (itemSlot.Item is PlaceableItem)
        {
            PlaceableItem placeable = (PlaceableItem)itemSlot.Item;
            placeable.Place(player);

            placeable.Destroy();
        }
    }
Пример #3
0
 public override bool Perform()
 {
     ((IBackPackBeing)performer).BackPack.Remove(item);
     item.Position = performer.Position.Clone();
     notify(item.UseKind, item);
     item.Use(performer);
     return(true);
 }
Пример #4
0
    public UsableItem Item; // TODO

    public void Use(Inventory user)
    {
        if (Item != null)
        {
            if (Item.Use(user))
            {
                Item = null;
            }
        }
    }
Пример #5
0
    private void UseRelicAbility(int index)
    {
        UsableItem item = relic.GetRelic(index);

        if (item == null)
        {
            return;
        }
        item.Use(player);
    }
Пример #6
0
 public override bool Perform()
 {
     if (Rng.Random.NextFloat() < WAND_DESTROY_RATE)
     {
         ((IBackPackBeing)performer).BackPack.Remove(item);
         notify("wand-destroy");
     }
     item.Position = performer.Position.Clone();
     notify(item.UseKind, item);
     item.Use(performer);
     return(true);
 }
Пример #7
0
    private void UseItemRPC(int i)
    {
        UsableItem usableItem = usablePanel.usableSlots[i].Item as UsableItem;

        if (usableItem != null)
        {
            usableItem.Use(this);

            if (usableItem.IsConsumable)
            {
                usablePanel.RemoveItem(usableItem);
                usableItem.Destroy();
            }
        }
    }
Пример #8
0
 public override bool Perform()
 {
     ((IBackPackBeing)performer).BackPack.RemoveSingleItem(item);
     item.Position = performer.Position.Clone();
     if (((ISkillsBeing)performer).Skills["reading"].Roll())
     {
         notify(item.UseKind, item);
         item.Use(performer);
     }
     else
     {
         notify("read-failed", item);
     }
     return(true);
 }
Пример #9
0
        protected virtual void UseItemInHotbar(int index)
        {
            InventoryComp inventory = this.GetComponent <InventoryComp>();

            if (inventory.hotbar[index] != null)
            {
                UsableItem usableItem =
                    inventory.GetItemStackInHotbar(index).item.entity.GetComponent <UsableItem>();

                if (usableItem != null)
                {
                    usableItem.Use(this.entity, null);
                }
            }
        }
 private void InventoryRightClick(BaseItemSlot itemSlot)
 {
     if (itemSlot.Item is EquippableItem)
     {
         Equip((EquippableItem)itemSlot.Item);
     }
     else if (itemSlot.Item is UsableItem)
     {
         UsableItem usableItem = (UsableItem)itemSlot.Item;
         usableItem.Use(this);
         if (usableItem.IsConsumable)
         {
             inventory.RemoveItem(usableItem);
             usableItem.Destroy();
         }
     }
 }
Пример #11
0
    private void EquipFormInventory(Item item)
    {
        if (item is EquippableItem)
        {
            Equip((EquippableItem)item);
        }
        else if (item is UsableItem)
        {
            UsableItem usableItem = (UsableItem)item;
            usableItem.Use(this);

            if (usableItem.IsConsumable)
            {
                inventory.RemoveItem(usableItem);
                usableItem.Destroy();
            }
        }
    }
Пример #12
0
    private void InventoryRightClick(BaseItemSlot itemSlot)
    {
        SoundManager.Instance.PlaySFX(buttonClickSFX, 1);
        if (itemSlot.Item is EquippableItem)
        {
            Equip((EquippableItem)itemSlot.Item);
        }
        else if (itemSlot.Item is UsableItem)
        {
            UsableItem usableItem = (UsableItem)itemSlot.Item;
            usableItem.Use(this);

            if (usableItem.IsConsumable)
            {
                itemSlot.Amount--;
                usableItem.Destroy();
            }
        }
    }
Пример #13
0
    /// <summary>
    /// Uses Item action(s) of a selected item in the hotbar, if valid.
    /// </summary>
    public void UseItemActions()
    {
        GameItem selectedItem = GetSelectedItem();

        if (selectedItem == null)
        {
            return;
        }

        if (selectedItem is UsableItem)
        {
            UsableItem selectedUsable = (UsableItem)selectedItem;
            if (selectedUsable.ValidateUse(gameObject))
            {
                //Player selected to use the current item, and it is valid to be used
                selectedUsable.Use(gameObject);
            }
        }
    }
Пример #14
0
        protected override IEnumerable <Toil> MakeNewToils()
        {
            yield return(Toils_Reserve.Reserve(TargetIndex.A));

            yield return(Toils_Goto.GotoThing(TargetIndex.A, PathEndMode.ClosestTouch).FailOnDespawnedNullOrForbidden(TargetIndex.A).FailOnSomeonePhysicallyInteracting(TargetIndex.A));

            yield return(Toils_General.Wait(500).WithProgressBarToilDelay(TargetIndex.A).FailOnDestroyedNullOrForbidden(TargetIndex.A));

            yield return(new Toil()
            {
                initAction = delegate
                {
                    UsableItem item = TargetA.Thing as UsableItem;

                    if (item != null)
                    {
                        item.Use();
                    }
                },
                defaultCompleteMode = ToilCompleteMode.Instant
            });
        }
Пример #15
0
 public void UseItem(int index)
 {
     // validate
     // note: checks durability only if it should be used (if max > 0)
     if (health.current > 0 &&
         0 <= index && index < slots.Count &&
         slots[index].amount > 0 &&
         slots[index].item.data is UsableItem)
     {
         // use item
         // note: we don't decrease amount / destroy in all cases because
         // some items may swap to other slots in .Use()
         UsableItem itemData = (UsableItem)slots[index].item.data;
         if (itemData.CanUse(this, index) == Usability.Usable)
         {
             // .Use might clear the slot, so we backup the Item first for the Rpc
             Item item = slots[index].item;
             itemData.Use(this, index);
             OnUsedItem(item);
         }
     }
 }
Пример #16
0
    // note: lookAt is available in PlayerLook, but we still pass the exact
    // uncompressed Vector3 here, because it needs to be PRECISE when shooting,
    // building structures, etc.
    public void UseItem(int index, Vector3 lookAt)
    {
        // validate
        if (0 <= index && index < slots.Count &&
            health.current > 0)
        {
            // use item at index, or hands
            // note: we don't decrease amount / destroy in all cases because
            // some items may swap to other slots in .Use()
            UsableItem itemData = GetUsableItemOrHands(index);
            if (itemData.CanUse(this, index, lookAt) == Usability.Usable)
            {
                // use it
                itemData.Use(this, index, lookAt);

                // reset usage time
                usageEndTime = Time.time + itemData.cooldown;

                // RpcUsedItem needs itemData, but we can't send that as Rpc
                // -> we could send the Item at slots[index], but .data is null
                //    for hands because hands actually live in '.hands' variable
                // -> we could create a new Item(itemData) and send, but it's
                //    kinda odd that it's different from slot
                // => only sending hash saves A LOT of bandwidth over time since
                //    this rpc is called very frequently (each weapon shot etc.)
                //    (we reuse Item's hash generation for simplicity)
                OnUsedItem(itemData, lookAt);
            }
            else
            {
                // CanUse is checked locally before calling this Cmd, so if we
                // get here then either our prediction is off (in which case we
                // really should show a message for easier debugging), or someone
                // tried to cheat, or there's some networking issue, etc.
                Debug.LogWarning("UseItem rejected for: " + name + " item=" + itemData.name + "@" + Time.time);
            }
        }
    }
Пример #17
0
    // Update is called once per frame
    void Update()
    {
        Vector2 input      = GetMovementInput();
        Vector2 mouseInput = GetMouseInput();
        float   rollInput  = GetRotationInput();
        float   vInput     = GetVerticalInput();

        Quaternion lookX    = Quaternion.AngleAxis(mouseInput.x, Vector3.up);
        Quaternion lookY    = Quaternion.AngleAxis(mouseInput.y, -Vector3.right);
        Quaternion lookRoll = Quaternion.AngleAxis(rollInput, -Vector3.forward);

        transform.localRotation = transform.localRotation * lookX * lookY * lookRoll;

        Vector3 move = (transform.forward * input.y) + (transform.right * input.x) + (transform.up * vInput);

        rb.velocity = move * Speed;

        GameObject objectInCrosshairs = GetObjectInCrosshairs();

        if (objectInCrosshairs != target)
        {
            if (target != null)
            {
                target.GetComponent <Outline>().enabled = false;
                target = null;
            }

            if (objectInCrosshairs != null)
            {
                objectInCrosshairs.GetComponent <Outline>().enabled = true;
                target = objectInCrosshairs;
            }
        }


        if (Input.GetMouseButtonDown(0))
        {
            if (heldItem == null)
            {
                if (objectInCrosshairs != null)
                {
                    HoldableItem holdable = objectInCrosshairs.GetComponent <HoldableItem>();
                    if (holdable)
                    {
                        holdable.PickUp(Hand);
                        heldItem           = holdable;
                        heldItem.OnThrown += OnDrop;
                        usableItem         = heldItem.GetComponent <UsableItem>();
                    }
                    else
                    {
                        UsableItem usable = objectInCrosshairs.GetComponent <UsableItem>();
                        if (usable)
                        {
                            usable.Use(gameObject, objectInCrosshairs);
                        }
                    }
                }
            }
            else
            {
                if (usableItem)
                {
                    usableItem.Use(gameObject, objectInCrosshairs);
                }
            }
        }

        if (heldItem != null && Input.GetMouseButtonDown(1))
        {
            heldItem.Drop(Hand);
            heldItem = null;
        }
    }