protected override void ChangeLeverState(GameObject lever) { if (lever.name.StartsWith("Lever")) { Lever leverScript = lever.GetComponent <Lever>(); lever.GetComponent <AudioSource>().Play(); if (leverScript.active) { leverScript.DisactiveLever(); } else { leverScript.ActivateLever(); } } else { // It is a fake FakeLever leverScript = lever.GetComponent <FakeLever>(); if (leverScript.active) { leverScript.DisactiveLever(); } else { leverScript.ActivateLever(); } } }
void PickUp() { int sphereRadius = 5; Debug.Log("Trying to Pick Up"); //if (isHolding) //{ // Debug.Log("Im gonna drop it"); // DropIt(); //} Collider[] nearObjects = Physics.OverlapSphere(transform.position, sphereRadius); foreach (Collider obj in nearObjects) { Vector3 difference = (obj.transform.position - transform.position); switch (obj.gameObject.tag) { case "Pickable": { //Generating vector to make the dot product Vector3 frontPoint = transform.position + (transform.forward * 4.0f); Vector3 front = frontPoint - transform.position; //Generated the vector for the dot product if ((Vector3.Dot(difference, front) / front.sqrMagnitude) > .25f && (Vector3.Dot(difference, front) / front.sqrMagnitude) < 2.0f) { carryingObject = obj.gameObject; carryingObject.transform.SetParent(transform); beforeGrabRotation = transform.rotation; //carryingObject.GetComponent<Rigidbody>().useGravity = false; //we apply the same rotation our main object (Camera) has. //carryingObject.transform.localRotation = transform.rotation; isHolding = true; break; } } break; case "Key": { playerScript.hasKey = true; isHolding = true; carryingObject = obj.gameObject; carryingObject.transform.SetParent(transform); carryingObject.transform.localPosition = transform.forward; Instantiate(FloatingKeyText, transform.position, Quaternion.Euler(0, 45, 0), transform); carryingObject.tag = null; //Destroy(carryingObject); } break; case "Grabable": { isHolding = true; carryingObject = obj.gameObject; isGrabbing = true; transform.LookAt(carryingObject.transform); carryingObject.transform.SetParent(transform); carryingObject.transform.localPosition = transform.forward * 2; //carryingObject.transform.localPosition = transform.position + offset; playerScript.movState = CharControl.PLAYER_STATE.GRABING; } break; case "Door": { carryingObject = obj.gameObject; if (playerScript.hasKey) { carryingObject.GetComponent <Renderer>().enabled = false; carryingObject.GetComponent <BoxCollider>().enabled = false; } else { Instantiate(doorText, transform.position, Quaternion.Euler(0, 45, 0), transform); } } break; case "Interactable": { carryingObject = obj.gameObject; leverScript = carryingObject.GetComponent <Lever>(); leverScript.ActivateLever(); } break; } //if (obj.gameObject.tag == "Pickable" && obj.gameObject != carryingObject) //{ // //Generating vector to make the dot product // Vector3 frontPoint = transform.position + (transform.forward * 2.0f); // Vector3 front = frontPoint - transform.position; // //Generated the vector for the dot product // if ((Vector3.Dot(difference, front) / front.sqrMagnitude) > .25f && (Vector3.Dot(difference, front) / front.sqrMagnitude) < 2.0f) // { // carryingObject = obj.gameObject; // carryingObject.transform.SetParent(transform); // beforeGrabRotation = transform.rotation; // //carryingObject.GetComponent<Rigidbody>().useGravity = false; // //we apply the same rotation our main object (Camera) has. // //carryingObject.transform.localRotation = transform.rotation; // isHolding = true; // break; // } //} //else if (obj.gameObject.tag == "Key" && obj.gameObject != carryingObject) //{ // playerScript.hasKey = true; // carryingObject = obj.gameObject; // Instantiate(FloatingKeyText, transform.position, Quaternion.Euler(0, 45, 0), transform); // Destroy(carryingObject); //} //else if (obj.gameObject.tag == "Grabable" && obj.gameObject != carryingObject) //{ // isHolding = true; // carryingObject = obj.gameObject; // carryingObject.transform.SetParent(transform); // playerScript.movState = CharControl.PLAYER_STATE.GRABING; //} //else if (obj.gameObject.tag == "Grabable" && obj.gameObject != carryingObject) //{ // isHolding = true; // carryingObject = obj.gameObject; // carryingObject.transform.SetParent(transform); // playerScript.movState = CharControl.PLAYER_STATE.GRABING; //} } }
void OnInteraction(GameObject interactableObject) { //Vector3 front = frontPoint - transform.position; if (!m_isHolding) { if (m_GOInteractedObject) { switch (m_GOInteractedObject.tag) { case "Pickable": { Vector3 frontPoint = transform.position + transform.forward * 4; m_GOcarryingObject = m_GOInteractedObject; m_carryingObjectRB = m_GOcarryingObject.GetComponent <Rigidbody>(); m_GOcarryingObject.transform.SetParent(transform); m_GOcarryingObject.transform.position = frontPoint /*m_GOHand.transform.position*/; m_carryingObjectRB.freezeRotation = true; m_carryingObjectRB.constraints = RigidbodyConstraints.FreezePosition; Physics.IgnoreCollision(gameObject.GetComponent <Collider>(), m_GOcarryingObject.GetComponent <Collider>()); m_carryingObjectRB.useGravity = false; m_isHolding = true; //m_ract } break; case "Key": { Vector3 frontPoint = transform.position + transform.forward * smallItem; m_isHolding = true; m_playerScript.hasKey = true; m_GOcarryingObject = m_GOInteractedObject; m_carryingObjectRB = m_GOcarryingObject.GetComponent <Rigidbody>(); m_GOcarryingObject.transform.SetParent(transform); m_GOcarryingObject.transform.position = frontPoint; m_carryingObjectRB.freezeRotation = true; m_carryingObjectRB.constraints = RigidbodyConstraints.FreezePosition; m_carryingObjectRB.useGravity = false; m_playerScript.m_interactObject = null; Instantiate(m_GOFloatingKeyText, transform.position, Quaternion.Euler(0, 45, 0), transform); //Destroy(carryingObject); } break; case "Grabable": { m_isHolding = true; m_isGrabbing = true; m_GOcarryingObject = m_GOInteractedObject; Vector3 frontPoint = new Vector3(front.transform.position.x, m_GOcarryingObject.transform.position.y, front.transform.position.z); m_carryingObjectRB = m_GOcarryingObject.GetComponent <Rigidbody>(); //transform.LookAt(m_GOcarryingObject.transform); m_GOcarryingObject.transform.position = frontPoint; m_carryingObjectRB.freezeRotation = true; m_carryingObjectRB.constraints = RigidbodyConstraints.FreezePosition; m_carryingObjectRB.useGravity = false; m_playerScript.movState = CharControl.PLAYER_STATE.GRABING; m_GOcarryingObject.transform.SetParent(transform); Debug.Log("Im grabbing bb"); } break; case "Door": { Instantiate(m_GODoorText, transform.position, Quaternion.Euler(0, 45, 0), transform); } break; case "Interactable": { m_leverScript = m_GOInteractedObject.GetComponent <Lever>(); m_leverScript.ActivateLever(); } break; } } } else if (m_isHolding) { if (m_GOcarryingObject.tag == "Key") { if (m_GOInteractedObject) { if (m_GOInteractedObject.tag == "Door") { m_GOInteractedObject.GetComponent <Renderer>().enabled = false; m_GOInteractedObject.GetComponent <BoxCollider>().enabled = false; Destroy(m_GOcarryingObject); m_isHolding = false; } else { DropIt(); } } else { DropIt(); } } else { DropIt(); m_playerScript.movState = CharControl.PLAYER_STATE.WALKING; } } }