Example #1
0
    // Update is called once per frame
    void Update()
    {
        target.text = "";
        if (interactablesInRange.Count == 0)
        {
            return;
        }

        float            minDistance = float.MaxValue;
        BaseInteractable closest     = null;

        foreach (BaseInteractable interactable in interactablesInRange)
        {
            var center      = interactable.center != null ? interactable.center.position : interactable.transform.position;
            var relativePos = this.transform.InverseTransformPoint(center);
            if (relativePos.z < 0)
            {
                continue;
            }

            float angle = Vector3.Angle(Vector3.forward, relativePos.normalized);
            this.debug = angle;

            if (angle > maxInteractAngle)
            {
                continue;
            }

            if (angle < minDistance)
            {
                minDistance = angle;
                closest     = interactable;
            }
        }
        if (closest == null)
        {
            return;
        }

        target.text = closest.gameObject.name;

        if (!Input.GetButtonDown("Interact"))
        {
            return;
        }

        closest.Interact(inventory, miniGameManager);
    }
Example #2
0
    void Update()
    {
        if (FindClosestInteractable(out var foundInteractable))
        {
            if (foundInteractable != _currentBaseInteractable)
            {
                SwitchToNewInteractable(foundInteractable);
            }
        }
        else
        {
            if (_currentBaseInteractable != null)
            {
                SwitchToNewInteractable(null);
            }
        }

        if (Input.GetKeyDown(KeyCode.Space) && _currentBaseInteractable != null)
        {
            _currentBaseInteractable.Interact();
        }
    }