diff options
Diffstat (limited to 'Assets/Scripts/Actors/Actor.cs')
-rw-r--r-- | Assets/Scripts/Actors/Actor.cs | 55 |
1 files changed, 47 insertions, 8 deletions
diff --git a/Assets/Scripts/Actors/Actor.cs b/Assets/Scripts/Actors/Actor.cs index eb8185e..53ea50b 100644 --- a/Assets/Scripts/Actors/Actor.cs +++ b/Assets/Scripts/Actors/Actor.cs @@ -33,6 +33,7 @@ namespace MontanaJohns.Actors protected Vector2 acceleration; protected bool invuln; protected float hangCount; + protected float previousInput; public Stats stats; public int health; @@ -71,10 +72,32 @@ namespace MontanaJohns.Actors } } - public virtual void Move(float input) + public virtual void Move(float input, float maxSpeedModifier = 0f) { - var target = new Vector2(input * stats.speedMultiplier * 10, _rigidBody.velocity.y); - _rigidBody.velocity = Vector2.SmoothDamp(_rigidBody.velocity, target, ref acceleration, .05f); + + + var maxSpeed = stats.maxSpeed + maxSpeedModifier; + _rigidBody.AddForce(new Vector2(input * stats.speedMultiplier, 0), ForceMode2D.Impulse); + + if (!isGrappling) + { + if (input == 0 || input < 0 && previousInput > 0 || input > 0 && previousInput < 0) + { + var target = new Vector2(0, _rigidBody.velocity.y); + _rigidBody.velocity = Vector2.SmoothDamp(_rigidBody.velocity, target, ref acceleration, .05f); + } + } + + if (input < 0 && Mathf.Abs(_rigidBody.velocity.x) > maxSpeed) + _rigidBody.velocity = new Vector2(-maxSpeed, _rigidBody.velocity.y); + else if (input > 0 && Mathf.Abs(_rigidBody.velocity.x) > maxSpeed) + _rigidBody.velocity = new Vector2(maxSpeed, _rigidBody.velocity.y); + + if (IsGrounded() && input == 0) + _rigidBody.gravityScale = 0f; + else + _rigidBody.gravityScale = gravityScale; + _animator.SetBool("moving", Mathf.Abs(_rigidBody.velocity.x) > 1); isMoving = Mathf.Abs(_rigidBody.velocity.x) > 1; @@ -94,18 +117,34 @@ namespace MontanaJohns.Actors transform.GetChild(i).rotation = rot; } } + previousInput = input; + } + public virtual void MoveY(float inputX, float inputY, float doNotExceed, float maxSpeedModifier = 0f) + { + if(_rigidBody.position.y <= doNotExceed) + { + var maxSpeed = stats.maxSpeed + maxSpeedModifier; + _rigidBody.AddForce(new Vector2(0, inputY * stats.speedMultiplier), ForceMode2D.Impulse); + + if (inputY < 0 && Mathf.Abs(_rigidBody.velocity.y) > maxSpeed) + _rigidBody.velocity = new Vector2(_rigidBody.velocity.x, -maxSpeed); + else if (inputY > 0 && Mathf.Abs(_rigidBody.velocity.y) > maxSpeed) + _rigidBody.velocity = new Vector2(_rigidBody.velocity.x, maxSpeed); + } } - public virtual void MoveY(float input) + + public virtual bool IsGrounded() { - var target = new Vector2(_rigidBody.velocity.x, input * stats.speedMultiplier * 10); - _rigidBody.velocity = Vector2.SmoothDamp(_rigidBody.velocity, target, ref acceleration, .05f); + if (Physics2D.OverlapCircle(groundCheckPoint1.position, 0.2f, groundLayers) || Physics2D.OverlapCircle(groundCheckPoint2.position, 0.2f, groundLayers)) + return true; + return false; } public virtual void Jump() { if (isGrappling) Use(); - if(Physics2D.OverlapCircle(groundCheckPoint1.position, 0.2f, groundLayers) || Physics2D.OverlapCircle(groundCheckPoint2.position, 0.2f, groundLayers)) + if(IsGrounded()) { jumpCount = stats.maxJumps; hangCount = hangTime; @@ -161,7 +200,7 @@ namespace MontanaJohns.Actors public virtual void Grapple(float xInput, float yInput, Vector2 grapplePoint) { Move(xInput); - MoveY(yInput); + MoveY(xInput, yInput, grapplePoint.y); } public virtual void TakeDamage(int damage) |