void FixedUpdate() { state.Reset(); CalculateRayOrigins(); velocity.y += Parameters.gravity.y * Time.deltaTime; if (velocity.y < 0 && Mathf.Abs(velocity.y) > Parameters.maxGravityMagnitude) { velocity.y = -Parameters.maxGravityMagnitude; } Vector2 deltaMovement = velocity * Time.deltaTime; ApplyGravity(ref deltaMovement); // SnapToSlope(ref deltaMovement); HandleVerticalMovement(ref deltaMovement); if (Mathf.Abs(deltaMovement.x) > 0.0001f) { HandleHorizontalMovement(ref deltaMovement); } transform.Translate(deltaMovement); if (Time.deltaTime != 0) { velocity = deltaMovement / Time.deltaTime; } if (state.isMovingUpSlope) { velocity.y = 0f; } HandlePendingIntents(); }
public void Move(Vector2 moveAmount) { UpdateRaycastOrigins(); state.Reset(); HorizontalCollisions(ref moveAmount); VerticalCollisions(ref moveAmount); transform.Translate(moveAmount); }
private void handleMovement(Vector2 deltaMovement) { //Here is where the magic happens. Through many raycasts our object is capable of movement. _ControllerState.Reset(); if (Mathf.Abs(deltaMovement.y) > .02f) { moveVertically(ref deltaMovement.y); } else { deltaMovement.y = 0f; } if (Mathf.Abs(deltaMovement.x) > .02f) { moveHorizontally(ref deltaMovement.x); } else { deltaMovement.x = 0f; } }
void FixedUpdate() { bool log = false; bool wasGrounded = state.IsGrounded; bool wasClimbing = state.IsClimbing; bool wasWallJumping = state.IsWallJumping; state.Reset(); CalculateRayOrigins(); if (!wasClimbing) { ApplyGravity(); } Vector2 deltaMovement = Velocity * Time.deltaTime; bool isGoingUpSlope = false; if (wasGrounded && _velocity.y < 0) { if (log) { Debug.Log(" BEGIN > HandleVerticalSlope: " + deltaMovement.y.ToString()); } HandleDownSlope(ref deltaMovement); if (log) { Debug.Log(" BEGIN > HandleVerticalSlope: " + deltaMovement.y.ToString()); } } if (Mathf.Abs(deltaMovement.x) > 0.0001f) { if (log) { Debug.Log(" BEGIN > HandleHorizontalMovement: " + deltaMovement.y.ToString()); } isGoingUpSlope = HandleHorizontalMovement(ref deltaMovement, wasClimbing); if (log) { Debug.Log(" END > HandleHorizontalMovement: " + deltaMovement.y.ToString()); } } if (log) { Debug.Log(" BEGIN > HandleVerticalMovement: " + deltaMovement.y.ToString()); } HandleVerticalMovement(ref deltaMovement); if (log) { Debug.Log(" END > HandleVerticalMovement: " + deltaMovement.y.ToString()); } HandleClimbing(ref deltaMovement); transform.Translate(deltaMovement); if (Time.deltaTime > 0) { _velocity = deltaMovement / Time.deltaTime; } if (state.IsClimbing || isGoingUpSlope) { _velocity.y = 0; } if (wasClimbing && !state.IsClimbing && _velocity.y > 0) { state.IsWallJumping = true; } if (wasWallJumping && !state.IsGrounded && !state.IsClimbing) { state.IsWallJumping = true; } Debug.Log("isGrounded: " + state.IsGrounded); Debug.Log("IsDownSlope: " + state.IsMovingDownSlope); Debug.Log("IsUpSlope: " + state.IsMovingUpSlope); Debug.Log("Slope angle: " + state.SlopeAngle.ToString()); }
void FixedUpdate() { state.Reset(); CalculateRayOrigins(); velocity.y += Parameters.gravity.y * Time.deltaTime; if (Mathf.Abs(velocity.y) > Parameters.maxGravityMagnitude) { if (velocity.y > 0) { velocity.y = Parameters.maxGravityMagnitude; } else { velocity.y = -Parameters.maxGravityMagnitude; } } Vector2 deltaMovement = velocity * Time.deltaTime; ApplyGravity(ref deltaMovement); // SnapToSlope(ref deltaMovement); HandleVerticalMovement(ref deltaMovement); // if (Mathf.Abs(deltaMovement.x) > 0.0001f) // { HandleHorizontalMovement(ref deltaMovement); // } transform.Translate(deltaMovement); if (Time.deltaTime != 0) { velocity = deltaMovement / Time.deltaTime; } if (state.isMovingUpSlope) { velocity.y = 0f; } if (!maxJumpHeightAchieved && !IsGrounded() && velocity.y < 0) { maxJumpHeightAchieved = true; } if (!IsGrounded() && (state.isCollidingRight || state.isCollidingLeft)) { wallJumpTimer = Parameters.wallJumpLeeway; } if (wallJumpTimer > 0f) { wallJumpTimer -= Time.deltaTime; } if (disabledMovementTimer > 0f) { disabledMovementTimer -= Time.deltaTime; } }