diff --git a/Assets/Scripts/PlayerController.cs b/Assets/Scripts/PlayerController.cs index c1c62d6..1310f31 100644 --- a/Assets/Scripts/PlayerController.cs +++ b/Assets/Scripts/PlayerController.cs @@ -116,223 +116,227 @@ public class PlayerMovement : MonoBehaviour FreezeControl(); } else{ - - if(isFrozen) - { - Data.gravityStrength = tempGrav; - Data.fallGravityMult = tempFall; - isFrozen = false; - } - - unlockedTrumpet = stateController.unlockedTrumpet; - #region TIMERS - LastOnGroundTime -= Time.deltaTime; - LastOnWallTime -= Time.deltaTime; - LastOnWallRightTime -= Time.deltaTime; - LastOnWallLeftTime -= Time.deltaTime; - - LastPressedJumpTime -= Time.deltaTime; - #endregion - - #region INPUT HANDLER - - if (_moveInput.x != 0) - CheckDirectionToFace(_moveInput.x > 0); - #endregion - - // if (!IsJumping) - // { - // print("not jumping"); - // } - // else - // { - // print("jumping, " + RB.velocity.y); - // } - - #region COLLISION CHECKS - if (!IsJumping) - { - //Ground Check - if (IsGrounded()) //checks if set box overlaps with ground + + if(isFrozen) { - LastOnGroundTime = Data.coyoteTime; //if so sets the lastGrounded to coyoteTime - if (unlockedTrumpet) { - trumpet = 2; - gameUI.ToggleTrumpet(true); - } else { - trumpet = -1; - } - wasGrappling = false; - isRegFalling = false; - } else { - // print("not jumping"); - if(!_isJumpFalling && !isRegFalling) { - if(unlockedTrumpet) { - trumpet = 1; + Data.gravityStrength = tempGrav; + Data.fallGravityMult = tempFall; + isFrozen = false; + } + + unlockedTrumpet = stateController.unlockedTrumpet; + #region TIMERS + LastOnGroundTime -= Time.deltaTime; + LastOnWallTime -= Time.deltaTime; + LastOnWallRightTime -= Time.deltaTime; + LastOnWallLeftTime -= Time.deltaTime; + + LastPressedJumpTime -= Time.deltaTime; + #endregion + + #region INPUT HANDLER + + if (_moveInput.x != 0) + CheckDirectionToFace(_moveInput.x > 0); + #endregion + + // if (!IsJumping) + // { + // print("not jumping"); + // } + // else + // { + // print("jumping, " + RB.velocity.y); + // } + + #region COLLISION CHECKS + if (!IsJumping) + { + //Ground Check + if (IsGrounded()) //checks if set box overlaps with ground + { + LastOnGroundTime = Data.coyoteTime; //if so sets the lastGrounded to coyoteTime + if (unlockedTrumpet) { + trumpet = 2; gameUI.ToggleTrumpet(true); } else { trumpet = -1; } - isRegFalling = true; + wasGrappling = false; + isRegFalling = false; + } else { + // print("not jumping"); + if(!_isJumpFalling && !isRegFalling) { + if(unlockedTrumpet) { + trumpet = 1; + gameUI.ToggleTrumpet(true); + } else { + trumpet = -1; + } + isRegFalling = true; + } + } + + //Right Wall Check + if (((Physics2D.OverlapBox(this.transform.position, _wallCheckSize, 0, _groundLayer) && IsFacingRight) + || (Physics2D.OverlapBox(this.transform.position, _wallCheckSize, 0, _groundLayer) && !IsFacingRight)) && !IsWallJumping) + LastOnWallRightTime = Data.coyoteTime; + + //Right Wall Check + if (((Physics2D.OverlapBox(this.transform.position, _wallCheckSize, 0, _groundLayer) && !IsFacingRight) + || (Physics2D.OverlapBox(this.transform.position, _wallCheckSize, 0, _groundLayer) && IsFacingRight)) && !IsWallJumping) + LastOnWallLeftTime = Data.coyoteTime; + + //Two checks needed for both left and right walls since whenever the play turns the wall checkPoints swap sides + LastOnWallTime = Mathf.Max(LastOnWallLeftTime, LastOnWallRightTime); + } + #endregion + + #region JUMP CHECKS + if (IsJumping && RB.velocity.y <= 0) + { + IsJumping = false; + // print("isJumping " + IsJumping); + + if (!IsWallJumping) + _isJumpFalling = true; + } + + if (IsWallJumping && Time.time - _wallJumpStartTime > Data.wallJumpTime) + { + IsWallJumping = false; + } + + if (LastOnGroundTime > 0 && !IsJumping && !IsWallJumping) + { + _isJumpCut = false; + + if (!IsJumping) + _isJumpFalling = false; + } + + //Jump + if (CanJump() && LastPressedJumpTime > 0) + { + IsJumping = true; + IsWallJumping = false; + _isJumpCut = false; + _isJumpFalling = false; + Jump(); + + if (!IsGrounded() && in_range && trumpet > 0) + { + gameObject.transform.Find("Trumpet").GetComponent().Play(); + enemy.GetComponent().DefeatEnemy(); + enemy = null; + in_range = false; + } + else if (!IsGrounded() && !in_range && trumpet > 0) + { + trumpet -= 1; + } + // check if double jump, play sound + if (trumpet == 0) { + gameObject.transform.Find("Trumpet").GetComponent().Play(); } } - //Right Wall Check - if (((Physics2D.OverlapBox(this.transform.position, _wallCheckSize, 0, _groundLayer) && IsFacingRight) - || (Physics2D.OverlapBox(this.transform.position, _wallCheckSize, 0, _groundLayer) && !IsFacingRight)) && !IsWallJumping) - LastOnWallRightTime = Data.coyoteTime; - - //Right Wall Check - if (((Physics2D.OverlapBox(this.transform.position, _wallCheckSize, 0, _groundLayer) && !IsFacingRight) - || (Physics2D.OverlapBox(this.transform.position, _wallCheckSize, 0, _groundLayer) && IsFacingRight)) && !IsWallJumping) - LastOnWallLeftTime = Data.coyoteTime; - - //Two checks needed for both left and right walls since whenever the play turns the wall checkPoints swap sides - LastOnWallTime = Mathf.Max(LastOnWallLeftTime, LastOnWallRightTime); - } - #endregion - - #region JUMP CHECKS - if (IsJumping && RB.velocity.y <= 0) - { - IsJumping = false; - // print("isJumping " + IsJumping); - - if (!IsWallJumping) - _isJumpFalling = true; - } - - if (IsWallJumping && Time.time - _wallJumpStartTime > Data.wallJumpTime) - { - IsWallJumping = false; - } - - if (LastOnGroundTime > 0 && !IsJumping && !IsWallJumping) - { - _isJumpCut = false; - - if (!IsJumping) - _isJumpFalling = false; - } - - //Jump - if (CanJump() && LastPressedJumpTime > 0) - { - IsJumping = true; - IsWallJumping = false; - _isJumpCut = false; - _isJumpFalling = false; - Jump(); - - if (!IsGrounded() && in_range && trumpet > 0) - { - gameObject.transform.Find("Trumpet").GetComponent().Play(); - enemy.GetComponent().DefeatEnemy(); - enemy = null; - in_range = false; + // stop sound if needed + if (soundPlaying && (isRegFalling || IsJumping || _isJumpFalling)) { + print("footsteps stop"); + audioSource.Stop(); + soundPlaying = false; } - else if (!IsGrounded() && !in_range && trumpet > 0) - { - trumpet -= 1; + + //WALL JUMP + // else if (CanWallJump() && LastPressedJumpTime > 0) + // { + // IsWallJumping = true; + // IsJumping = false; + // _isJumpCut = false; + // _isJumpFalling = false; + // _wallJumpStartTime = Time.time; + // _lastWallJumpDir = (LastOnWallRightTime > 0) ? -1 : 1; + // + // WallJump(_lastWallJumpDir); + // } + #endregion + + #region GRAPPLE CHECKS + // set wasGrappling to true if the player starts grappling + if (grapplingRope.isGrappling) { + wasGrappling = true; } - // check if double jump, play sound + #endregion + + + #region SLIDE CHECKS + if (CanSlide() && ((LastOnWallLeftTime > 0 && _moveInput.x < 0) || (LastOnWallRightTime > 0 && _moveInput.x > 0))) + IsSliding = true; + else + IsSliding = false; + #endregion + + #region GRAVITY + //Higher gravity if we've released the jump input or are falling + if (IsSliding) + { + SetGravityScale(0); + } + else if (RB.velocity.y < 0 && _moveInput.y < 0) + { + //Much higher gravity if holding down + SetGravityScale(Data.gravityScale * Data.fastFallGravityMult); + //Caps maximum fall speed, so when falling over large distances we don't accelerate to insanely high speeds + RB.velocity = new Vector2(RB.velocity.x, Mathf.Max(RB.velocity.y, -Data.maxFastFallSpeed)); + } + else if (_isJumpCut) + { + //Higher gravity if jump button released + SetGravityScale(Data.gravityScale * Data.jumpCutGravityMult); + RB.velocity = new Vector2(RB.velocity.x, Mathf.Max(RB.velocity.y, -Data.maxFallSpeed)); + } + else if ((IsJumping || IsWallJumping || _isJumpFalling) && Mathf.Abs(RB.velocity.y) < Data.jumpHangTimeThreshold) + { + SetGravityScale(Data.gravityScale * Data.jumpHangGravityMult); + } + else if (RB.velocity.y < 0) + { + //Higher gravity if falling + SetGravityScale(Data.gravityScale * Data.fallGravityMult); + //Caps maximum fall speed, so when falling over large distances we don't accelerate to insanely high speeds + RB.velocity = new Vector2(RB.velocity.x, Mathf.Max(RB.velocity.y, -Data.maxFallSpeed)); + } + else + { + //Default gravity if standing on a platform or moving upwards + SetGravityScale(Data.gravityScale); + } + #endregion + + #region SOUND CHECKS + if (!IsJumping && !_isJumpFalling && !isRegFalling && _moveInput.x != 0) { + if (!soundPlaying) { + // print("footsteps PLAY"); + audioSource.Play(); + soundPlaying = true; + } + } else if (soundPlaying && audioSource.clip.name == "footsteps") { + // print("footsteps stop"); + audioSource.Stop(); + soundPlaying = false; + } + #endregion + + #region UPDATE UI if (trumpet == 0) { - gameObject.transform.Find("Trumpet").GetComponent().Play(); + gameUI.ToggleTrumpet(false); } - } - - // stop sound if needed - if (soundPlaying && (isRegFalling || IsJumping || _isJumpFalling)) { - print("footsteps stop"); - audioSource.Stop(); - soundPlaying = false; - } - - //WALL JUMP - // else if (CanWallJump() && LastPressedJumpTime > 0) - // { - // IsWallJumping = true; - // IsJumping = false; - // _isJumpCut = false; - // _isJumpFalling = false; - // _wallJumpStartTime = Time.time; - // _lastWallJumpDir = (LastOnWallRightTime > 0) ? -1 : 1; - // - // WallJump(_lastWallJumpDir); - // } - #endregion - - #region GRAPPLE CHECKS - // set wasGrappling to true if the player starts grappling - if (grapplingRope.isGrappling) { - wasGrappling = true; - } - #endregion - - - #region SLIDE CHECKS - if (CanSlide() && ((LastOnWallLeftTime > 0 && _moveInput.x < 0) || (LastOnWallRightTime > 0 && _moveInput.x > 0))) - IsSliding = true; - else - IsSliding = false; - #endregion - - #region GRAVITY - //Higher gravity if we've released the jump input or are falling - if (IsSliding) - { - SetGravityScale(0); - } - else if (RB.velocity.y < 0 && _moveInput.y < 0) - { - //Much higher gravity if holding down - SetGravityScale(Data.gravityScale * Data.fastFallGravityMult); - //Caps maximum fall speed, so when falling over large distances we don't accelerate to insanely high speeds - RB.velocity = new Vector2(RB.velocity.x, Mathf.Max(RB.velocity.y, -Data.maxFastFallSpeed)); - } - else if (_isJumpCut) - { - //Higher gravity if jump button released - SetGravityScale(Data.gravityScale * Data.jumpCutGravityMult); - RB.velocity = new Vector2(RB.velocity.x, Mathf.Max(RB.velocity.y, -Data.maxFallSpeed)); - } - else if ((IsJumping || IsWallJumping || _isJumpFalling) && Mathf.Abs(RB.velocity.y) < Data.jumpHangTimeThreshold) - { - SetGravityScale(Data.gravityScale * Data.jumpHangGravityMult); - } - else if (RB.velocity.y < 0) - { - //Higher gravity if falling - SetGravityScale(Data.gravityScale * Data.fallGravityMult); - //Caps maximum fall speed, so when falling over large distances we don't accelerate to insanely high speeds - RB.velocity = new Vector2(RB.velocity.x, Mathf.Max(RB.velocity.y, -Data.maxFallSpeed)); - } - else - { - //Default gravity if standing on a platform or moving upwards - SetGravityScale(Data.gravityScale); - } - #endregion - - #region SOUND CHECKS - if (!IsJumping && !_isJumpFalling && !isRegFalling && _moveInput.x != 0) { - if (!soundPlaying) { - // print("footsteps PLAY"); - audioSource.Play(); - soundPlaying = true; + if (isDashing) + { + gameUI.ToggleClarinet(false); } - } else if (soundPlaying && audioSource.clip.name == "footsteps") { - // print("footsteps stop"); - audioSource.Stop(); - soundPlaying = false; - } - #endregion - - #region UPDATE UI - if (trumpet == 0) { - gameUI.ToggleTrumpet(false); - } - #endregion + #endregion } } @@ -390,6 +394,7 @@ public class PlayerMovement : MonoBehaviour #region RUN METHODS private void Run(float lerpAmount) { + if(!isDashing){ //Calculate the direction we want to move in and our desired velocity float targetSpeed = _moveInput.x * Data.runMaxSpeed; //We can reduce are control using Lerp() this smooths changes to are direction and speed @@ -443,6 +448,7 @@ public class PlayerMovement : MonoBehaviour * RB.velocity = new Vector2(RB.velocity.x + (Time.fixedDeltaTime * speedDif * accelRate) / RB.mass, RB.velocity.y); * Time.fixedDeltaTime is by default in Unity 0.02 seconds equal to 50 FixedUpdate() calls per second */ + } } private void Turn() @@ -459,6 +465,7 @@ public class PlayerMovement : MonoBehaviour #region JUMP METHODS private void Jump() { + if(!isDashing){ //Ensures we can't call Jump multiple times from one press LastPressedJumpTime = 0; LastOnGroundTime = 0; @@ -473,6 +480,7 @@ public class PlayerMovement : MonoBehaviour RB.AddForce(Vector2.up * force, ForceMode2D.Impulse); #endregion + } } private void WallJump(int dir)