private IEnumerator ReleaseObstacle() { if (m_IsGrabbing) { m_IsGrabbing = false; if (m_GrabbedObstacleJoin != null) { AudioManager.Instance.StopLoopingSFX(m_SFXHoldGrab); m_GrabbedObstacleHandle.OnReleased(); m_GrabbedObstacleHandle = null; Destroy(m_GrabbedObstacleJoin.gameObject); m_GrabbedObstacleJoin = null; yield return(null); m_GoalHeight = RELEASED_OFFSET; StopCoroutine("RaiseHand"); StartCoroutine("RaiseHand"); } m_Asset.spriteId = m_Asset.GetSpriteIdByName(m_HandEmptyAssetName); } }
private void OnTriggerEnter(Collider other) { ObstacleHandle handle = other.GetComponent <ObstacleHandle>(); if (m_HoveringObstacleHandle == null && handle != null) { if (!m_IsGrabbing) { m_Asset.spriteId = m_Asset.GetSpriteIdByName(m_HandReadyAssetName); } m_HoveringObstacleHandle = handle; } }
private void OnTriggerExit(Collider other) { ObstacleHandle handle = other.GetComponent <ObstacleHandle>(); if (handle != null && handle == m_HoveringObstacleHandle) { if (!m_IsGrabbing) { m_Asset.spriteId = m_Asset.GetSpriteIdByName(m_HandEmptyAssetName); } m_HoveringObstacleHandle = null; } }
private void GrabObstacle() { m_Asset.spriteId = m_Asset.GetSpriteIdByName(m_HandGrabbedAssetName); if (m_IsGrabbing) { return; } m_IsGrabbing = true; if (m_HoveringObstacleHandle != null && !m_HoveringObstacleHandle.IsGrabbed && m_GrabbedObstacleJoin == null) { AudioManager.Instance.PlaySFX(m_SFXGrab); AudioManager.Instance.PlayLoopingSFX(m_SFXHoldGrab, 0.4f); // Find hit point. Vector3 handHitPosition = transform.position - (CameraController.Instance.m_HandCamera.transform.TransformDirection(Vector3.forward) * 2000.0f); RaycastHit[] hits = Physics.SphereCastAll(handHitPosition, (collider as CapsuleCollider).radius, CameraController.Instance.m_HandCamera.transform.TransformDirection(Vector3.forward)); Vector3 hitPoint = transform.position; bool isHit = false; if (hits.Length > 0) { foreach (RaycastHit hit in hits) { Obstacle obstacle = hit.collider.gameObject.GetComponent <Obstacle>(); if (obstacle != null) { hitPoint = hit.point; isHit = true; break; } } } if (isHit) { m_GrabbedObstacleHandle = m_HoveringObstacleHandle; m_GrabbedObstacleHandle.OnGrabbed(); GameObject joint = new GameObject("Join"); joint.transform.position = hitPoint; joint.transform.parent = transform; GameUtils.FindAssociatedLevel(transform).m_Malisse.RevertWalkableCollider(m_HoveringObstacleHandle.m_Obstacle.collider); m_GrabbedObstacleJoin = joint.AddComponent <HingeJoint>(); m_GrabbedObstacleJoin.rigidbody.useGravity = false; m_GrabbedObstacleJoin.rigidbody.constraints = RigidbodyConstraints.FreezePosition | RigidbodyConstraints.FreezeRotation; m_GrabbedObstacleJoin.connectedBody = m_HoveringObstacleHandle.m_Obstacle.rigidbody; // Move hand. m_GoalHeight = GRABBED_OFFSET; StopCoroutine("RaiseHand"); StartCoroutine("RaiseHand"); } } else { AudioManager.Instance.PlaySFX(m_SFXCantGrab); } }
private void OnTriggerEnter(Collider other) { ObstacleHandle handle = other.GetComponent<ObstacleHandle>(); if (m_GrabbedObstacleHandle == null && handle != null) { m_Asset.spriteId = m_Asset.GetSpriteIdByName(m_HandReadyAssetName); m_GrabbedObstacleHandle = handle; } }
private void OnTriggerExit(Collider other) { ObstacleHandle handle = other.GetComponent<ObstacleHandle>(); if (handle != null && handle == m_GrabbedObstacleHandle) { m_Asset.spriteId = m_Asset.GetSpriteIdByName(m_HandEmptyAssetName); m_GrabbedObstacleHandle = null; } }
private void GrabObstacle() { m_Asset.spriteId = m_Asset.GetSpriteIdByName(m_HandGrabbedAssetName); if (m_IsGrabbing) { return; } m_IsGrabbing = true; if (m_HoveringObstacleHandle != null && !m_HoveringObstacleHandle.IsGrabbed && m_GrabbedObstacleJoin == null) { AudioManager.Instance.PlaySFX(m_SFXGrab); AudioManager.Instance.PlayLoopingSFX(m_SFXHoldGrab, 0.4f); // Find hit point. Vector3 handHitPosition = transform.position - (CameraController.Instance.m_HandCamera.transform.TransformDirection(Vector3.forward) * 2000.0f); RaycastHit[] hits = Physics.SphereCastAll(handHitPosition, (collider as CapsuleCollider).radius, CameraController.Instance.m_HandCamera.transform.TransformDirection(Vector3.forward)); Vector3 hitPoint = transform.position; bool isHit = false; if (hits.Length > 0) { foreach (RaycastHit hit in hits) { Obstacle obstacle = hit.collider.gameObject.GetComponent<Obstacle>(); if (obstacle != null) { hitPoint = hit.point; isHit = true; break; } } } if (isHit) { m_GrabbedObstacleHandle = m_HoveringObstacleHandle; m_GrabbedObstacleHandle.OnGrabbed(); GameObject joint = new GameObject("Join"); joint.transform.position = hitPoint; joint.transform.parent = transform; GameUtils.FindAssociatedLevel(transform).m_Malisse.RevertWalkableCollider(m_HoveringObstacleHandle.m_Obstacle.collider); m_GrabbedObstacleJoin = joint.AddComponent<HingeJoint>(); m_GrabbedObstacleJoin.rigidbody.useGravity = false; m_GrabbedObstacleJoin.rigidbody.constraints = RigidbodyConstraints.FreezePosition | RigidbodyConstraints.FreezeRotation; m_GrabbedObstacleJoin.connectedBody = m_HoveringObstacleHandle.m_Obstacle.rigidbody; // Move hand. m_GoalHeight = GRABBED_OFFSET; StopCoroutine("RaiseHand"); StartCoroutine("RaiseHand"); } } else { AudioManager.Instance.PlaySFX(m_SFXCantGrab); } }
private IEnumerator ReleaseObstacle() { if (m_IsGrabbing) { m_IsGrabbing = false; if (m_GrabbedObstacleJoin != null) { AudioManager.Instance.StopLoopingSFX(m_SFXHoldGrab); m_GrabbedObstacleHandle.OnReleased(); m_GrabbedObstacleHandle = null; Destroy(m_GrabbedObstacleJoin.gameObject); m_GrabbedObstacleJoin = null; yield return null; m_GoalHeight = RELEASED_OFFSET; StopCoroutine("RaiseHand"); StartCoroutine("RaiseHand"); } m_Asset.spriteId = m_Asset.GetSpriteIdByName(m_HandEmptyAssetName); } }