private void Grab() { if (Input.GetButtonDown(m_Input.GetGrab())) //For the love of god, refactor this { if (!m_PlayerState.IsHoldingObject) { m_ClosestObject = GetClosestObjectWithTag("ThrowableObject", 0.5f); if (m_ClosestObject != null) { Scr_ThrowableObject throwable = m_ClosestObject.GetComponent <Scr_ThrowableObject>(); if (!throwable.IsHeld()) { Debug.Log("Grabbed an object"); m_ClosestObject.GetComponent <Rigidbody>().constraints = RigidbodyConstraints.FreezeAll; m_ClosestObject.GetComponent <Rigidbody>().useGravity = false; m_ClosestObject.transform.parent = transform; m_ClosestObject.transform.forward = transform.forward; m_ClosestObject.transform.localPosition = throwable.GetHoldPosition(); m_ClosestObject.transform.localEulerAngles = throwable.GetHoldRotation(); m_PlayerState.IsHoldingObject = true; throwable.SetHold(true); m_AnimationController.Animate("IsHoldingItem", true); } else { m_ClosestObject = null; } } } } }
public void ReleaseHeldObject() { m_ClosestObject.GetComponent <Rigidbody>().constraints = RigidbodyConstraints.None; m_ClosestObject.GetComponent <Rigidbody>().useGravity = true; m_ClosestObject.transform.parent = null; m_PlayerState.IsHoldingObject = false; Scr_ThrowableObject throwable = m_ClosestObject.GetComponent <Scr_ThrowableObject>(); throwable.SetHold(false); m_ClosestObject = null; }
private void Throw() { if (Input.GetButtonDown(m_Input.GetThrow()) && m_PlayerState.IsHoldingObject) { Rigidbody rigidBody = m_ClosestObject.GetComponent <Rigidbody>(); rigidBody.constraints = RigidbodyConstraints.None; rigidBody.AddForce(transform.forward * m_ThrowingForce); rigidBody.useGravity = true; Scr_ThrowableObject throwable = m_ClosestObject.GetComponent <Scr_ThrowableObject>(); throwable.SetThrownBy(gameObject); throwable.SetHold(false); m_PlayerState.IsHoldingObject = false; m_ClosestObject.transform.parent = null; m_ClosestObject = null; m_AnimationController.Animate("Throw"); m_AnimationController.Animate("IsHoldingItem", false); } }