Example #1
0
    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);
        }
    }
Example #2
0
    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;
        }
    }
Example #3
0
    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;
        }
    }
Example #4
0
    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);
        }
    }
Example #5
0
 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;
     }
 }
Example #6
0
 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;
     }
 }
Example #7
0
    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);
        }
    }
Example #8
0
    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);
        }
    }