示例#1
0
    private bool ProjectJump(ref int currentIterations, int maxIterations)
    {
        Character2DMovementState saveState = movement.ToState();

        bool safeJump = false;
        bool didJump  = false;

        Vector3 lastPosition = movement.transform.position;

        for (int i = currentIterations; i < maxIterations; i++)
        {
            if (movement.isGrounded)
            {
                if (didJump)
                {
                    safeJump = true;
                    break;
                }
                else
                {
                    //movement.BeginJump();
                }
            }

            if (!didJump)
            {
                //movement.BeginJump();
            }


            Move(1f);
            movement.UpdateMovement(projectionTimestep);

            Debug.DrawLine(lastPosition, movement.transform.position, Color.yellow, Time.deltaTime);
            lastPosition = transform.position;
        }


        movement.FromState(saveState);
        return(safeJump);
    }
示例#2
0
    private void ProjectMovement_v1(out bool doMove, out bool doJump)
    {
        saveState = movement.ToState();
        movement.disableRespawn = true;

        doMove = true;
        doJump = false;

        Vector3 lastPosition = movement.transform.position;

        for (int i = 0; i < projectionIterations; i++)
        {
            bool canJump     = movement.velocity.y <= 0f && movement.isGrounded;
            bool projectJump = false;

            if (canJump)
            {
                Vector3 lastJumpPosition          = movement.transform.position;
                Character2DMovementState jumpSave = movement.ToState();
                for (int j = 0; j < projectionIterations; j++)
                {
                    if (j == 0)
                    {
                        //movement.BeginJump();
                    }
                    else if (movement.velocity.y <= 0f && movement.isGrounded)
                    {
                        //movement.EndJump();
                        projectJump = true;
                        break;
                    }

                    //movement.Move(Vector2.right);
                    movement.UpdateMovement(projectionTimestep);

                    Debug.DrawLine(lastJumpPosition, movement.transform.position, Color.yellow, Time.deltaTime);
                    lastJumpPosition = movement.transform.position;
                }
                movement.FromState(jumpSave);
            }

            if (projectJump)
            {
                if (i == 0)
                {
                    doJump = true;
                    break;
                }
                else
                {
                    //movement.BeginJump();
                }
            }

            //movement.Move(Vector2.right);
            movement.UpdateMovement(projectionTimestep);

            Debug.DrawLine(lastPosition, movement.transform.position, Color.white, Time.deltaTime);
            lastPosition = transform.position;
        }

        movement.FromState(saveState);
        movement.disableRespawn = false;
    }