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