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 } }
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(); } }
public override bool Perform() { ((IBackPackBeing)performer).BackPack.Remove(item); item.Position = performer.Position.Clone(); notify(item.UseKind, item); item.Use(performer); return(true); }
public UsableItem Item; // TODO public void Use(Inventory user) { if (Item != null) { if (Item.Use(user)) { Item = null; } } }
private void UseRelicAbility(int index) { UsableItem item = relic.GetRelic(index); if (item == null) { return; } item.Use(player); }
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); }
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(); } } }
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); }
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(); } } }
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(); } } }
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(); } } }
/// <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); } } }
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 }); }
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); } } }
// 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); } } }
// 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; } }