コード例 #1
0
ファイル: DashController.cs プロジェクト: Blurpek/chasy
//wall jump + dash + jumpbutton = go left? xd

    public IEnumerator Dash(GetDirectionalInputDelegate GetDirectionalInput)
    {
        startDashTime = Time.time;

        // velocity.x = dashDistance / dashTime;
        animator.SetBool("dash", true);
        // yield return new WaitForSeconds(0.1);

        Vector2 oldVelocity = velocity;

        velocity.x = 0;
        velocity.y = 0;
        // RaycastHit2D raycastHit = Physics2D.Raycast(new Vector2(boxCollider.bounds.max.x, boxCollider.bounds.max.y), Vector2.right, dashDistance);

        yield return(new WaitForSeconds(dashReadingDirectionTime));

        dashDirection = GetDirectionalInput();

        Vector2 shift = Vector2.zero;

        if (dashDirection.x != 0 || dashDirection.y != 0)
        {
            float     skinWidth = 0.1f;
            Vector2[] verts     = new Vector2[4];
            verts[0] = transform.TransformPoint(boxCollider.offset + new Vector2(-boxCollider.size.x + skinWidth, boxCollider.size.y - skinWidth) * 0.5f);
            verts[1] = transform.TransformPoint(boxCollider.offset + new Vector2(boxCollider.size.x - skinWidth, boxCollider.size.y - skinWidth) * 0.5f);
            verts[2] = transform.TransformPoint(boxCollider.offset + new Vector2(boxCollider.size.x - skinWidth, -boxCollider.size.y + skinWidth) * 0.5f);
            verts[3] = transform.TransformPoint(boxCollider.offset + new Vector2(-boxCollider.size.x + skinWidth, -boxCollider.size.y + skinWidth) * 0.5f);

            if (dashDirection.x == 0)
            {
                shift = dashDirection.y == 1
                                          ? CalculateDashShift(verts[0], verts[1], 6, dashDirection, dashDistance, characterController.platformMask)
                                          : CalculateDashShift(verts[3], verts[2], 6, dashDirection, dashDistance, characterController.platformMask);
            }
            else if (dashDirection.y == 0)
            {
                shift = dashDirection.x == 1
                                          ? CalculateDashShift(verts[1], verts[2], 6, dashDirection, dashDistance, characterController.platformMask)
                                          : CalculateDashShift(verts[0], verts[3], 6, dashDirection, dashDistance, characterController.platformMask);
            }
            else
            {
                shift = dashDirection.x == dashDirection.y
                                        ? CalculateDashShift(verts[0], verts[2], 6, dashDirection, dashDistance, characterController.platformMask)
                                        : CalculateDashShift(verts[1], verts[3], 6, dashDirection, dashDistance, characterController.platformMask);
            }
        }


        velocity.x = shift.x / (dashTime - dashReadingDirectionTime);
        velocity.y = shift.y / (dashTime - dashReadingDirectionTime);

        yield return(new WaitForSeconds(dashTime - dashReadingDirectionTime));

        // Debug.Log(isDashing);

        // this.transform.position = new Vector2(this.transform.position.x, this.transform.position.y) + shift;

        // yield return new WaitForEndOfFrame();

        movementController.jumpStartTime = Time.time - movementController.jumpDuration / 2;

        if (characterController.isGrounded)
        {
            velocity.y = 0;
        }
        else if (dashDirection.y == 0)
        {
            movementController.jumpStartTime = Time.time - movementController.jumpDuration - movementController.floatDuration / 2;
            velocity.y = movementController.CalculateFloatingVelocity();
        }
        else if (dashDirection.y > 0)
        {
            movementController.jumpStartTime = Time.time - movementController.jumpDuration / 2;
            velocity.y = movementController.CalculateJumpingVelocity();
        }
        else
        {
            movementController.jumpStartTime = Time.time - movementController.jumpDuration - movementController.floatDuration;
            velocity.y = -movementController.jumpSpeed;
        }

        velocity.x = dashDirection.x * 6;

        animator.SetBool("dash", false);
        isDashing = false;
    }