Пример #1
0
    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);
    }
Пример #3
0
    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;
        }
    }
Пример #4
0
    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());
    }
Пример #5
0
    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;
        }
    }