diff options
Diffstat (limited to 'Assets/Scripts/Actors')
-rw-r--r-- | Assets/Scripts/Actors/Actor.cs | 55 | ||||
-rw-r--r-- | Assets/Scripts/Actors/Enemy.cs | 43 | ||||
-rw-r--r-- | Assets/Scripts/Actors/Player.cs | 13 |
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; |