Пример #1
0
    public override void ResolvePendencies()
    {
        if (apostleStatusVariables.isOnAir)
        {
            if (lastFramePositionWhileFalling >= rigidbody2D.position.y && rigidbody2D.velocity.y < 0)
            {
                distanceWhileFalling += lastFramePositionWhileFalling - rigidbody2D.position.y;
            }

            if (apostleStatusVariables.canJump &&
                (rigidbody2D.velocity.y < 0 || MathHelpers.Approximately(rigidbody2D.velocity.y, 0, float.Epsilon)))
            {
                if (distanceWhileFalling >= minimumFallingDistanceForDamage)
                {
                    apostle.TakeDamage(minimumDamageForFalling * distanceWhileFalling /
                                       minimumFallingDistanceForDamage);
                }
                distanceWhileFalling           = 0;
                apostleStatusVariables.isOnAir = false;
                apostleController.RevokeControl(0.1f, true, ControlTypeToRevoke.AllMovement, monoBehaviour);
            }

            lastFramePositionWhileFalling = rigidbody2D.position.y;
        }
        else
        {
            lastFramePositionWhileFalling = 0;
        }

        if (!MathHelpers.Approximately(rigidbody2D.velocity.y, 0, float.Epsilon) &&
            MathHelpers.Approximately(apostleController.VerticalMovement, 0, float.Epsilon) &&
            apostleStatusVariables.isClimbingLadder)
        {
            PhysicsHelpers.ResetVelocityY(rigidbody2D);
        }

        if (!apostleStatusVariables.isClimbingStairs)
        {
//            PhysicsHelpers.IgnoreLayerCollision(rigidbody2D.gameObject.layer, LayerMask.NameToLayer("Stairs Ground"),
//                true);
            apostleCollisionHandler.SetLayerForCollisions(new[] { "Ground", "Ground Ignore" });

            var leftRayCollider  = apostleCollisionHandler.CastLeftwardRay(LayerMask.GetMask("Stairs Ground")).collider;
            var rightRayCollider =
                apostleCollisionHandler.CastRightwardRay(LayerMask.GetMask("Stairs Ground")).collider;

            if (leftRayCollider != null && !Physics2D.GetIgnoreCollision(capsuleCollider2D, leftRayCollider))
            {
                PhysicsHelpers.IgnoreCollision(capsuleCollider2D, leftRayCollider, true);
            }
            else if (rightRayCollider && !Physics2D.GetIgnoreCollision(capsuleCollider2D, rightRayCollider))
            {
                PhysicsHelpers.IgnoreCollision(capsuleCollider2D, rightRayCollider, true);
            }
        }
    }
Пример #2
0
    public override void ResolvePendencies()
    {
        if (playerStatusVariables.isOnAir)
        {
            if (lastFramePositionWhileFalling >= rigidbody2D.position.y && rigidbody2D.velocity.y < 0)
            {
                distanceWhileFalling += lastFramePositionWhileFalling - rigidbody2D.position.y;
            }

            if (playerStatusVariables.canJump &&
                (rigidbody2D.velocity.y < 0 || MathHelpers.Approximately(rigidbody2D.velocity.y, 0, float.Epsilon)))
            {
                if (distanceWhileFalling >= minimumFallingDistanceForDamage)
                {
                    player.TakeDamage(minimumDamageForFalling * distanceWhileFalling / minimumFallingDistanceForDamage);
                }
                distanceWhileFalling          = 0;
                playerStatusVariables.isOnAir = false;
                playerController.RevokeControl(0.1f, true, ControlTypeToRevoke.AllMovement, monoBehaviour);
            }

            lastFramePositionWhileFalling = rigidbody2D.position.y;
        }
        else
        {
            lastFramePositionWhileFalling = 0;
        }

        if (!MathHelpers.Approximately(rigidbody2D.velocity.y, 0, float.Epsilon) &&
            MathHelpers.Approximately(playerController.VerticalMovement, 0, float.Epsilon) &&
            playerStatusVariables.isClimbingLadder)
        {
            PhysicsHelpers.ResetVelocityY(rigidbody2D);
        }

        if (!playerStatusVariables.isClimbingStairs)
        {
            PhysicsHelpers.IgnoreLayerCollision(rigidbody2D.gameObject.layer, LayerMask.NameToLayer("Stairs Ground"),
                                                true);
            playerCollisionHandler.SetLayerForCollisions(new[] { "Ground", "Ground Ignore" });
        }
    }