Example #1
0
        private void Update()
        {
            // Don't fall through UI Buttons
            if (EventSystem.current.IsPointerOverGameObject())
            {
                return;
            }

            // Left Button
            if (Input.GetMouseButtonDown(0))
            {
                Ray        ray = m_camera.ScreenPointToRay(Input.mousePosition);
                RaycastHit hit;

                if (Physics.Raycast(ray, out hit))
                {
                    // Debug.Log("We hit " + hit.collider.name + " at " + hit.point);
                    Interactable interactable = hit.collider.gameObject.GetComponent <Interactable>();
                    if (interactable != null && interactable.Item != null)
                    {
                        if (m_itemBeingHeld == null)
                        {
                            if (interactable.IsTakeable())
                            {
                                m_deferredAction = ActionType.Take;
                            }
                            else if (interactable.IsUseable())
                            {
                                m_deferredAction = ActionType.Use;
                            }
                        }
                        else
                        {
                            bool isItemsUseableHere = interactable.CanBeUsedWith(m_itemBeingHeld);
                            if (isItemsUseableHere)
                            {
                                m_deferredAction = ActionType.Use;
                            }
                            else
                            {
                                return;
                            }
                        }

                        SetFocus(interactable);
                    }
                    else
                    {
                        m_motor.MoveToPoint(hit.point);
                        RemoveFocus();
                    }
                }
            }

            // Right Button
            if (Input.GetMouseButtonDown(1))
            {
                if (m_itemBeingHeld != null)
                {
                    ReleaseItem();
                    return;
                }

                Ray        ray = m_camera.ScreenPointToRay(Input.mousePosition);
                RaycastHit hit;

                if (Physics.Raycast(ray, out hit))
                {
                    // Debug.Log("We hit " + hit.collider.name + " at " + hit.point);
                    Interactable interactable = hit.collider.gameObject.GetComponent <Interactable>();
                    if (interactable == null)
                    {
                        m_motor.MoveToPoint(hit.point);
                        RemoveFocus();
                    }
                    else
                    {
                        LookAtItem(interactable.Item);
                    }
                }
            }
        }