Пример #1
0
    public void PickUpObject()
    {
        //Finds all colliders in a certain radius
        Collider[]    objectsInRange    = Physics.OverlapSphere(transform.position, objectFindRadius);
        float         distanceToClosest = float.MaxValue;
        SlottedObject closestObject     = null;

        //Loops through to find the closest slotted object to the player
        foreach (Collider nearbyObj in objectsInRange)
        {
            //Casts to a slotted object to check if this collider is valid for distance checking
            SlottedObject slottedObj = nearbyObj.GetComponent <SlottedObject>();

            if (slottedObj == null || !slottedObj.enabled)
            {
                continue;
            }

            float distance = Vector3.Distance(followPos.transform.position, slottedObj.transform.position);

            //If this slotted obj is closer than the last one in the loop then the logic is updated accordingly
            if (distance < distanceToClosest)
            {
                closestObject     = slottedObj;
                distanceToClosest = distance;
            }
        }

        if (closestObject)
        {
            heldObj = closestObject;
        }
    }
Пример #2
0
    //Begins lerping (linear interpolating) the slotted object
    public void ReturnToSlot(SlottedObject slottedObject)
    {
        slottedObj      = slottedObject;
        lerping         = true;
        currentLerpTime = 0;
        slottedObject.transform.rotation = transform.rotation;
        slottedObject.GetComponent <Collider>().enabled = false;
        slottedObject.rigidbody.isKinematic             = true;

        occupied = true;
    }
Пример #3
0
    public void DropObject(bool manualDrop)
    {
        if (!heldObj)
        {
            return;
        }

        bool didScore = false;

        if (manualDrop)
        {
            Collider[] objectsInRange = Physics.OverlapSphere(transform.position, objectFindRadius);

            foreach (Collider nearbyObj in objectsInRange)
            {
                ObjectSlot objectSlot = nearbyObj.GetComponent <ObjectSlot>();

                if (objectSlot == null)
                {
                    continue;
                }

                //If the held item slot type is the same as this slot, and it has not been used yet, then put the held item into the slot
                if (objectSlot.slotType == heldObj.objectType && !objectSlot.occupied)
                {
                    heldObj.enabled = false;

                    objectSlot.ReturnToSlot(heldObj);

                    didScore = true;
                }
            }
        }

        heldObj = null;
        if (didScore)
        {
            gameManager.AddToScore();
        }
    }