void MovePlayerOffStairs() { if (levelManager.playerController.GetStairState() == PlayerController.STAIR_STATE.on_stair) { if (Input.GetAxis("Horizontal") > 0.1f || (Input.GetAxis("Climb") > 0.1f && stairController.GetStairDirection() == StairController.STAIR_DIRECTION.up)) { MovePlayerOffStairs(1); } else if (Input.GetAxis("Horizontal") < -0.1f || Input.GetAxis("Climb") < -0.1f && (stairController.GetStairDirection() == StairController.STAIR_DIRECTION.down)) { MovePlayerOffStairs(-1); } } }
void MovePlayerToStairs(StairController stairController, GameObject triggerStep) { isMovingToStairs = true; isMovingOnStairs = false; playerPos = levelManager.playerController.player.transform.position; Vector2 targetPos = triggerStep.GetComponent <Collider2D>().bounds.center; if (stairController.GetStairDirection() == StairController.STAIR_DIRECTION.up) { // a staircase goes up if it moves from left(bottom) to right (top) if (triggerStep.transform.position == stairController.leftEndStep.transform.position) { // this means we're at the left(bottom) end of a staircase that goes up targetPos = DeterminePlayerTarget(triggerStep, 0.25f, 0.5f); } else { // we must be at the right(top) end of a staircase that goes up targetPos = DeterminePlayerTarget(triggerStep, -0.75f, 0.5f); } } else { // a staircase goes down if it moves from left(top) to right(bottom) if (triggerStep.transform.position == stairController.leftEndStep.transform.position) { // this means we're at the left(top) end of a staircase that goes down targetPos = DeterminePlayerTarget(triggerStep, 0.75f, 0.5f); } else { // we must be at the right(top) end of a staircase that goes up targetPos = DeterminePlayerTarget(triggerStep, -0.25f, 0.5f); } } FlipOnStairs(targetPos.x); player.GetComponent <PhysicsObject>().enabled = false; runAfterMoving = RunAfterMovingToStairs; StartCoroutine(MovePlayer(targetPos, transitionSpeed)); }
void OnTriggerStay2D(Collider2D other) { if (other.tag != "Stairs") { return; } stairController = other.GetComponentInParent <StairController>(); if (Input.GetAxis("Climb") != 0 && levelManager.playerController.GetStairState() != PlayerController.STAIR_STATE.on_stair && levelManager.playerController.GetJumpState() == PlayerController.JUMPING.grounded && hasLeftStairTrigger) { stairDirection = stairController.GetStairDirection(); hasLeftStairTrigger = false; player.GetComponent <Rigidbody2D>().gravityScale = 0; levelManager.playerController.SetStairState(PlayerController.STAIR_STATE.on_stair); levelManager.playerController.playerAnimator.SetBool("onStair", true); transitionPercent = 0f; MovePlayerToStairs(stairController, other.gameObject); } }