aboutsummaryrefslogtreecommitdiffstats
path: root/Assets/Scripts/Actors
diff options
context:
space:
mode:
Diffstat (limited to 'Assets/Scripts/Actors')
-rw-r--r--Assets/Scripts/Actors/Actor.cs55
-rw-r--r--Assets/Scripts/Actors/Enemy.cs43
-rw-r--r--Assets/Scripts/Actors/Player.cs13
3 files changed, 92 insertions, 19 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)
diff --git a/Assets/Scripts/Actors/Enemy.cs b/Assets/Scripts/Actors/Enemy.cs
index d7d699e..fb11e45 100644
--- a/Assets/Scripts/Actors/Enemy.cs
+++ b/Assets/Scripts/Actors/Enemy.cs
@@ -1,5 +1,6 @@
using UnityEngine;
using System.Collections;
+using UnityEngine.InputSystem;
namespace MontanaJohns.Actors
{
@@ -10,18 +11,31 @@ namespace MontanaJohns.Actors
protected float attackRate = 0.5f;
protected float nextAttackTime = 0f;
- bool playerSeen;
+ private bool playerSeen;
+ private PlayerInput playerInput;
+ private InputAction jump;
protected override void Awake()
{
base.Awake();
player = GameObject.FindGameObjectWithTag("Player");
+ playerInput = player.GetComponent<PlayerInput>();
+
+ jump = playerInput.currentActionMap.FindAction("Jump");
+ jump.started += context => Jump();
}
// Update is called once per frame
void Update()
{
- if(!playerSeen)
+ CheckHealth();
+ }
+
+ protected override void FixedUpdate()
+ {
+ // Temp override while missing falling logic/animations
+ //base.FixedUpdate();
+ if (!playerSeen)
{
if (Mathf.Abs(player.transform.position.x - transform.position.x) <= 50 && Mathf.Abs(player.transform.position.y - transform.position.y) <= 15)
playerSeen = true;
@@ -31,12 +45,6 @@ namespace MontanaJohns.Actors
MoveTowardsPlayer();
Attack();
}
- CheckHealth();
- }
-
- protected override void FixedUpdate()
- {
- // Temp override while missing falling logic/animations
}
void MoveTowardsPlayer()
@@ -59,6 +67,25 @@ namespace MontanaJohns.Actors
}
}
+ public override void Jump()
+ {
+ if (groundCheckPoint1 == null || groundCheckPoint2 == null) return;
+ if (Physics2D.OverlapCircle(groundCheckPoint1.position, 0.2f, groundLayers) || Physics2D.OverlapCircle(groundCheckPoint2.position, 0.2f, groundLayers))
+ {
+ jumpCount = stats.maxJumps;
+ hangCount = hangTime;
+ }
+ else
+ {
+ hangCount -= Time.deltaTime;
+ }
+ if (jumpCount > 0 && hangCount > 0f)
+ {
+ jumpCount--;
+ _rigidBody.AddForce(Vector2.up * stats.jumpForce);
+ }
+ }
+
private void OnCollisionEnter2D(Collision2D other)
{
if (other.gameObject.tag == "Projectile")
diff --git a/Assets/Scripts/Actors/Player.cs b/Assets/Scripts/Actors/Player.cs
index 8535a41..4adcfd9 100644
--- a/Assets/Scripts/Actors/Player.cs
+++ b/Assets/Scripts/Actors/Player.cs
@@ -32,7 +32,7 @@ namespace MontanaJohns.Actors
jump.started += context => Jump();
use.started += context => Use();
- attack.started += context => Fire();
+ //attack.started += context => Fire();
cancel.started += context => Cancel();
}
@@ -48,7 +48,13 @@ namespace MontanaJohns.Actors
protected void Update()
{
((IFollowable)this).Follow();
- if(isGrappling)
+ DeathCheck();
+ }
+
+ protected override void FixedUpdate()
+ {
+ base.FixedUpdate();
+ if (isGrappling)
{
base.Grapple(move.ReadValue<Vector2>().x, move.ReadValue<Vector2>().y, (Vector2)grapplePoint);
}
@@ -58,7 +64,6 @@ namespace MontanaJohns.Actors
if (isMoving && !_animator.GetBool("airborn") && !_audio.isPlaying("RunningOnGrass")) _audio.Play("RunningOnGrass");
else if (!isMoving || _animator.GetBool("airborn")) _audio.Stop("RunningOnGrass");
}
- DeathCheck();
}
protected void DeathCheck()
@@ -66,6 +71,8 @@ namespace MontanaJohns.Actors
if(health <= 0)
{
MainCamera.GetComponent<LevelController>().ResetLevel();
+ if (isGrappling)
+ Use();
ResetStats();
health = stats.maxHealth;
transform.position = spawnPoint;