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); }
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; }