private bool tryUsingItem(UsableTarget target) { if (target.UseItem(itemToUse)) { bool itemRemoved = !inventory.HandleItemUse(itemToUse); cleanItemToUse(!itemRemoved); return(true); } return(false); }
private void usableTargetUse() { UsableTarget ut = targetedItem.GetComponent <UsableTarget>(); bool isReadable = targetedItem.GetComponent <TextViewer>(); if (isReadable) { targetedItem.GetComponent <TextViewer>().SetPlayerRigidbody(GetComponentInParent <RigidbodyFirstPersonController>()); } if (string.IsNullOrEmpty(itemToUse) || !tryUsingItem(ut)) { ut.Use(); } }
private string checkItems(UsableTarget targetObject) { string id; foreach (Item item in inventory.items) { id = item.ItemId; if (targetObject.CheckItemOnTrace(id)) { return(id); } } return(null); }
void LateUpdate() { bool distanceCondition = false; if (Physics.Raycast(transform.position, transform.forward, out hitInfo, 50f, raycastMask, QueryTriggerInteraction.Ignore)) { if (targetedItem != hitInfo.collider.gameObject) { checkAndCleanItem(); if (targetedItem && targetedItem.GetComponent <HighlightItem>()) { if (targetedItem.GetComponent <PuzzleElementPlaceholder>()) { targetedItem.GetComponent <PuzzleElementPlaceholder>().SetOutlineColour(HighlightColours.INACTIVE_COLOUR); } else { targetedItem.GetComponent <HighlightItem>().OutlineOff(); } } targetedItem = hitInfo.collider.gameObject; } bool isUsable = targetedItem.GetComponent <UsableTarget>(); bool isDraggable = !isUsable && (targetedItem.GetComponent <DraggableItem>()); bool isPickable = !isUsable && (targetedItem.GetComponent <Item>() || targetedItem.GetComponent <Item>()); bool isPuzzle = !isUsable && !isPickable && targetedItem.GetComponent <PuzzleElementPlaceholder>(); float requiredDistance = (isUsable ? targetedItem.GetComponent <UsableTarget>().UseDistance : (isDraggable ? targetedItem.GetComponent <DraggableItem>().UseDistance : (isPickable || isPuzzle ? itemPickupDistance : float.MaxValue))); float distance = Vector3.Distance(transform.position, targetedItem.transform.position); distanceCondition = distance <= requiredDistance; if (distanceCondition) { if (isUsable && string.IsNullOrEmpty(itemToUse)) { UsableTarget ut = targetedItem.GetComponent <UsableTarget>(); if (ut.UsesItems) { itemToUse = checkItems(ut); if (!string.IsNullOrEmpty(itemToUse)) { ut.SetOutlineColour(HighlightColours.ITEM_USE_COLOUR); inventory.HighlightItem(itemToUse, true); } } } if (isPuzzle && (pickedUpItem != null)) { DraggableItem di = pickedUpItem.GetComponent <DraggableItem>(); PuzzleElementPlaceholder pep = targetedItem.GetComponent <PuzzleElementPlaceholder>(); if (di.IsPuzzleElement) { puzzleElementMatching = pep.CheckElementOnTrace(di.PuzzleElementId); } pep.SetOutlineColour((puzzleElementMatching ? HighlightColours.ITEM_USE_COLOUR : HighlightColours.WRONG_ELEMENT_COLOUR)); } HighlightItem highlight = targetedItem.GetComponent <HighlightItem>(); if (highlight != null) { highlight.OutlineOn(); } } } else { checkAndCleanItem(); return; } if (Input.GetKeyDown(USE_KEY_CODE)) { handleUse(distanceCondition); } else if (Input.GetKeyUp(USE_KEY_CODE) && (pickedUpItem != null)) { handleDeactivate(); } else if (Input.GetKey(USE_KEY_CODE) && targetedItem.GetComponent <ConstantUsableTarget>() && distanceCondition) { usableTargetUse(); } }