Esempio n. 1
0
    private void SetOnStairsColliders(StairsController stairsController)
    {
        playerStatusVariables.isClimbingStairs = true;
        PhysicsHelpers.IgnoreCollision(capsuleCollider2D, stairsController.adjacentCollider, true);
        stairsController.adjacentCollider.gameObject.layer = LayerMask.NameToLayer("Ground Ignore");
        PhysicsHelpers.IgnoreLayerCollision(rigidbody2D.gameObject.layer, LayerMask.NameToLayer("Stairs Ground"),
                                            false);

        playerCollisionHandler.SetLayerForCollisions(new[] { "Ground", "Stairs Ground" });
    }
Esempio n. 2
0
    public void SetStairs(StairsController stairs)
    {
        currentStairs = stairs;

        float stepDx = 0, stepDy = 0;
        float currentStep = 0;

        if (stairs != null)
        {
            switch (stairs.ascendingDirection)
            {
            case PlayerOrientation.Up:
            case PlayerOrientation.Down:
                break;

            case PlayerOrientation.Left:
                currentStep = (stairs.bounds.max.x - transform.position.x) / (stairs.bounds.max.x - stairs.bounds.min.x);
                stepDy      = stairs.bounds.size.y / stairs.steps;
                if (playerOrientation == PlayerOrientation.Right)
                {
                    stepDy = -stepDy;
                }
                break;

            case PlayerOrientation.Right:
                currentStep = (transform.position.x - stairs.bounds.min.x) / (stairs.bounds.max.x - stairs.bounds.min.x);
                stepDy      = stairs.bounds.size.y / stairs.steps;
                if (playerOrientation == PlayerOrientation.Left)
                {
                    stepDy = -stepDy;
                }
                break;
            }

            currentStep = (int)(currentStep * stairs.steps);
        }

        if (lastStep != currentStep)
        {
            lastStep = (int)currentStep;
            Vector3 newPosition = transform.position;
            newPosition.x     += stepDx;
            newPosition.y     += stepDy;
            transform.position = newPosition;
        }
    }
    public void SetStairs(StairsController stairs)
    {
        currentStairs = stairs;

        float stepDx = 0, stepDy = 0;
        float currentStep = 0;

        if(stairs != null)
        {
            switch(stairs.ascendingDirection)
            {
                case PlayerOrientation.Up:
                case PlayerOrientation.Down:
                    break;

                case PlayerOrientation.Left:
                    currentStep = (stairs.bounds.max.x - transform.position.x) / (stairs.bounds.max.x - stairs.bounds.min.x);
                    stepDy = stairs.bounds.size.y / stairs.steps;
                    if(playerOrientation == PlayerOrientation.Right)
                    {
                        stepDy = -stepDy;
                    }
                    break;

                case PlayerOrientation.Right:
                    currentStep = (transform.position.x - stairs.bounds.min.x) / (stairs.bounds.max.x - stairs.bounds.min.x);
                    stepDy = stairs.bounds.size.y / stairs.steps;
                    if(playerOrientation == PlayerOrientation.Left)
                    {
                        stepDy = -stepDy;
                    }
                    break;
            }

            currentStep = (int) (currentStep * stairs.steps);
        }

        if(lastStep != currentStep)
        {
            lastStep = (int) currentStep;
            Vector3 newPosition = transform.position;
            newPosition.x += stepDx;
            newPosition.y += stepDy;
            transform.position = newPosition;
        }
    }