Ejemplo n.º 1
0
    void DoWallRun(Vector3 norVector, IRunnableWall runWall, bool isReset)
    {
        Vector3 stickVector;

        if (CheckWallRunRequirement() && !isReset)
        {
            if (rb.useGravity == true)
            {
                rb.useGravity = runWall.DisableGravity();
                isWallRun     = true;
            }

            stickVector = -norVector * (wallRunForce / wallRunStickForceDivider) * Time.deltaTime;
            ApplyExternalForce(stickVector);
            //pnSign = signAngle / Mathf.Abs(signAngle);
            //Debug.Log("Stick Vector : " + stickVector);
            //lookAroundObject.wallRunCamera(povNegSign);
            wallCinemachine.wallRunCamera(CheckWallSide());
        }
        else if (isReset)
        {
            rb.useGravity = runWall.EnableGravity();
            //lookAroundObject.wallRunCameraReset(pnSign);
            wallCinemachine.wallRunCameraReset();
            isWallRun      = false;
            isResetWallRun = false;
        }
        else//This is required
        {
            rb.useGravity = runWall.EnableGravity();
            wallCinemachine.wallRunCameraReset();
            isWallRun = false;
        }
    }
Ejemplo n.º 2
0
    private void OnCollisionEnter(Collision collision)//One time event
    {
        IRunnableWall runnableWall = collision.gameObject.GetComponent <IRunnableWall>();

        if (runnableWall != null && CheckWallRunRequirement())
        {
            isWallRun = true;
        }
    }
Ejemplo n.º 3
0
    private void OnCollisionExit(Collision collision)
    {
        IRunnableWall runnableWall = collision.gameObject.GetComponent <IRunnableWall>();

        if (runnableWall != null && isWallRun)
        {
            isResetWallRun = true;
            DoWallRun(normalVector, runnableWall, isResetWallRun);
            //rb.useGravity = runnableWall.EnableGravity();
            //lookAroundObject.wallRunCameraReset(pnSign);
            //isWallRun = false;
            isTouchingWall = false;
        }
        else if (runnableWall != null)
        {
            isTouchingWall = false;
        }
    }
Ejemplo n.º 4
0
    private void OnCollisionStay(Collision collision)//Dynamic event
    {
        IRunnableWall runnableWall = collision.gameObject.GetComponent <IRunnableWall>();

        //Debug.Log("Player Speed min is 7: " + rb.velocity.z);
        //Debug.Log("Can Wall run ?  : " + CheckWallRunRequirement(setBuffer));
        if (runnableWall != null)//First prior check it is runnable wall
        {
            signAngle    = Vector3.SignedAngle(Vector3.up, collision.contacts[0].normal, collision.contacts[0].point);
            normalVector = collision.contacts[0].normal;
            //Debug.Log("Can Wall run : " + CheckWallRunRequirement());
            if (Math.Abs(signAngle) > minWallAngle && Math.Abs(signAngle) < maxWallAngle)//Second prior check the wall angle is qualifiied or not
            {
                //Do all wall run and wall jump
                isTouchingWall = true;
                //pnSign = signAngle / Mathf.Abs(signAngle);
                DoWallRun(normalVector, runnableWall, isResetWallRun);
            }
        }
    }