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; } }
//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; }
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(); } }