Exemple #1
0
    private void Update()
    {
        if (nearbyObjects.Count < 1)
        {
            HideTipCanvas();
        }
        else if (nearbyObjects.Count > 1 && previousPlayerPosition != player.transform.position)
        {
            closestObject = FindNearestObject();
        }

        if (Input.GetMouseButtonDown(0) && pickUpAndDropReady && nearbyObjects.Count > 0)
        {
            PickUpObject(FindNearestObject());
        }

        previousPlayerPosition = player.transform.position;

        if (tipCanvas_LeftClick.activeSelf)
        {
            tipCanvas_LeftClick.transform.LookAt(playerCamera.transform);
            if (closestObject != null)
            {
                // Hämtar objektes egna inställning för positionen av vänsterklick-tipset. Om ingen inställning hittas anges ett default värde.
                ItemAndTip_Positioning pos = closestObject.GetComponent <ItemAndTip_Positioning>() ?? null;
                tipCanvas_LeftClick.transform.position = closestObject.transform.position + ((pos != null) ? pos.GetTipPosition() : new Vector3(0f, 1f, 0f));
            }
            else
            {
                tipCanvas_LeftClick.SetActive(false);
            }
        }
    }
Exemple #2
0
    private bool PickUpObject(GameObject objectToPickUp)
    {
        if (objectToPickUp != null)
        {
            DropObject(true);
            currentlyHoldingObject = objectToPickUp;

            objectToPickUp.tag = "Untagged";
            nearbyObjects.Remove(objectToPickUp);
            closestObject = FindNearestObject();

            Rigidbody rb = objectToPickUp.GetComponent <Rigidbody>();
            rb.constraints = RigidbodyConstraints.FreezeAll;

            foreach (var item in currentlyHoldingObject.GetComponents <Collider>())
            {
                item.enabled = false;
            }

            Transform t = objectToPickUp.transform;
            ItemAndTip_Positioning pos = t.gameObject.GetComponent <ItemAndTip_Positioning>() ?? null;
            t.SetParent(player.transform);
            StartCoroutine(LerpObject(t, pos));

            ToggleGlitterEffect(t, false);
            return(true);
        }
        return(false);
    }
Exemple #3
0
    IEnumerator LerpObject(Transform t, ItemAndTip_Positioning pos)
    {
        pickUpAndDropReady = false;
        bool lerping = true;

        Vector3 endPosition;
        Vector3 endRotation = Quaternion.identity.eulerAngles;

        if (pos != null)
        {
            endPosition = pos.GetItemPosition();
            if (pos.GetItemRotation() != Vector3.zero)
            {
                endRotation = pos.GetItemRotation();
            }
            if (pos.GetPlaceObjectInHand())
            {
                t.SetParent(rightHand);
            }
        }
        else
        {
            endPosition = new Vector3(0, defaultItemDistanceFromPlayer_Y, defaultItemDistanceFromPlayer_Z);
        }

        Vector3 startPosition = t.localPosition;
        Vector3 startRotation = t.localRotation.eulerAngles;

        float time = 0.0f;
        float fracJourney;

        while (lerping)
        {
            yield return(new WaitForEndOfFrame());

            fracJourney     = Mathf.Clamp01(time / pickUpSpeed);
            t.localPosition = Vector3.Lerp(startPosition, endPosition, fracJourney);
            //t.localRotation = Quaternion.Lerp(startRotation, new Quaternion(endRotation.x, endRotation.y, endRotation.z, 0), fracJourney);
            //t.localEulerAngles = Vector3.Lerp(startRotation, endRotation, fracJourney);
            t.localEulerAngles = new Vector3(
                Mathf.LerpAngle(startRotation.x, endRotation.x, fracJourney),
                Mathf.LerpAngle(startRotation.y, endRotation.y, fracJourney),
                Mathf.LerpAngle(startRotation.z, endRotation.z, fracJourney));

            time += Time.deltaTime;
            if (fracJourney > 0.99f)
            {
                lerping = false;
            }
        }
        pickUpAndDropReady = true;
    }