aboutsummaryrefslogtreecommitdiffstats
path: root/Assets/Scripts/Actors/Actor.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Assets/Scripts/Actors/Actor.cs')
-rw-r--r--Assets/Scripts/Actors/Actor.cs55
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)