// Update is called once per frame void Update() { // get player input for direction and which direction they are colliding inot the wall Vector2 input = new Vector2(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical")); int wallDirX = (controller.collisions.left) ? -1 : 1; // currently not sliding on wall bool wallSliding = false; // check if sliding on wall if ((controller.collisions.left || controller.collisions.right) && !controller.collisions.below && velocity.y < 0) { // currently colliding into wall wallSliding = true; // slide down wall slowly if (velocity.y < -wallSlideSpeedMax) { velocity.y = -wallSlideSpeedMax; } } // stop when hitting object from above or below if (controller.collisions.above || controller.collisions.below) { velocity.y = 0; } // player wants to move left if (Input.GetKey(moveLeft)) { // check if player can sprint if (playerTwoStamina.currentStamina > 0 && Input.GetKey(sprint) && playerTwoStamina.fiftyStamina) { // move player faster to sprint and decrease stamina input.x = -sprintSpeed; playerTwoStamina.decreaseStamina(); } // do not sprint else { // move player at normal speed input.x = -moveSpeed; // increase player stamina when not sprinting if (playerTwoStamina.currentStamina < playerTwoStamina.maxStamina) { playerTwoStamina.increaseStamina(); } } // face bullet to the left bulletRotation.eulerAngles = new Vector3(0, 0, 90); resetBulletDirection(); bulletLeft = true; // face sowrd to the left swordDirection = -1f; swordRotation.eulerAngles = new Vector3(0, 0, 90); // face player to the left greenPlayer.flipX = false; } // player want to move right else if (Input.GetKey(moveRight)) { // check if player can sprint if (playerTwoStamina.currentStamina > 0 && Input.GetKey(sprint) && playerTwoStamina.fiftyStamina) { // move player faster to sprint and decrease stamina input.x = sprintSpeed; playerTwoStamina.decreaseStamina(); } // do not sprint else { // move player at normal speed input.x = moveSpeed; // increase player stamina when not sprinting if (playerTwoStamina.currentStamina < playerTwoStamina.maxStamina) { playerTwoStamina.increaseStamina(); } } // face bullet to the right bulletRotation.eulerAngles = new Vector3(0, 0, -90); resetBulletDirection(); bulletRight = true; // face sword to the right swordDirection = 1f; swordRotation.eulerAngles = new Vector3(0, 0, 0); // face player to the right greenPlayer.flipX = true; } // player does not want to move else { // do not move player input.x = 0; // increase player stamina if (playerTwoStamina.currentStamina < playerTwoStamina.maxStamina) { playerTwoStamina.increaseStamina(); } } // player wants to shoot diaginally up and right if (Input.GetKey(shootTopRight) && Time.time > nextFire) { // face bullet up and right bulletRotation.eulerAngles = new Vector3(0, 0, -45); resetBulletDirection(); bulletTopRight = true; // create bullet Instantiate(bullet, transform.position, bulletRotation); // add cooldown to fire rate nextFire = Time.time + fireRate; } // player wants to shoot diaginally down and right else if (Input.GetKey(shootBottomRight) && Time.time > nextFire) { // face bullet down and right bulletRotation.eulerAngles = new Vector3(0, 0, -135); resetBulletDirection(); bulletBottomRight = true; // create bullet Instantiate(bullet, transform.position, bulletRotation); // add cooldown to fire rate nextFire = Time.time + fireRate; } // player wants to shoot diaginally up and left else if (Input.GetKey(shootTopLeft) && Time.time > nextFire) { // face bullet up and left bulletRotation.eulerAngles = new Vector3(0, 0, 45); resetBulletDirection(); bulletTopLeft = true; // create bullet Instantiate(bullet, transform.position, bulletRotation); // add cooldown to fire rate nextFire = Time.time + fireRate; } // player wants to shoot diaginally down and left else if (Input.GetKey(shootBottomLeft) && Time.time > nextFire) { // face bullet down and left bulletRotation.eulerAngles = new Vector3(0, 0, 135); resetBulletDirection(); bulletBottomLeft = true; // create bullet Instantiate(bullet, transform.position, bulletRotation); // add cooldown to fire rate nextFire = Time.time + fireRate; } // player wants to jump if (Input.GetKey(jump)) { // check if sliding on wall if (wallSliding) { // player jumps to same wall they are sliding on if (wallDirX == input.x) { velocity.x = -wallDirX * wallJumpClimb.x; velocity.y = wallJumpClimb.y; } // player jumps off wall else if (input.x == 0) { velocity.x = -wallDirX * wallJumpOff.x; velocity.y = wallJumpOff.y; } // player jumps off wall and goes in opposite direction of wall else { velocity.x = -wallDirX * wallLeap.x; velocity.y = wallLeap.y; } } // be able to jump when on ground if (controller.collisions.below) { velocity.y = jumpVelocity; } } // player wants to shoot forward if (Input.GetKey(shoot) && Time.time > nextFire) { // create bullet Instantiate(bullet, transform.position, bulletRotation); // add cooldown to fire rate nextFire = Time.time + fireRate; } // player wants to use sword if (Input.GetKey(useSword) && Time.time > nextFire) { // create sword Instantiate(sword, new Vector3(transform.position.x + swordDirection, transform.position.y, transform.position.z), swordRotation); // add cooldown to fire rate nextFire = Time.time + fireRate; } // move player float targetVelocityX = input.x * moveSpeed * Time.deltaTime; velocity.x = Mathf.SmoothDamp(velocity.x, targetVelocityX, ref velocityXSmoothing, (controller.collisions.below) ? accelerationTimeGrounded : accelationTimeAirborne); velocity.y += gravity * Time.deltaTime; controller.Move(velocity * Time.deltaTime); }