Esempio n. 1
0
 private bool tryUsingItem(UsableTarget target)
 {
     if (target.UseItem(itemToUse))
     {
         bool itemRemoved = !inventory.HandleItemUse(itemToUse);
         cleanItemToUse(!itemRemoved);
         return(true);
     }
     return(false);
 }
Esempio n. 2
0
    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();
        }
    }
Esempio n. 3
0
    private string checkItems(UsableTarget targetObject)
    {
        string id;

        foreach (Item item in inventory.items)
        {
            id = item.ItemId;
            if (targetObject.CheckItemOnTrace(id))
            {
                return(id);
            }
        }
        return(null);
    }
Esempio n. 4
0
    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();
        }
    }