diff --git a/Assets/Scripts/Character.cs b/Assets/Scripts/Character.cs new file mode 100644 index 0000000..3195b82 --- /dev/null +++ b/Assets/Scripts/Character.cs @@ -0,0 +1,112 @@ +using UnityEngine; + +public class Character : MonoBehaviour +{ + [SerializeField] + private Animator animator; + [SerializeField] + private float MovementSpeed = 1.5f; + [SerializeField] + private LayerMask ladderLayer; + [SerializeField] + private LayerMask groundLayer; + [SerializeField] + private float distance; + private bool _isOnLadder; + private Rigidbody2D _body; + private BoxCollider2D _boxCollider; + private bool _isFall; + private bool _facingRight = true; + + private void Start() + { + _body = GetComponent(); + _boxCollider = GetComponent(); + } + + + private void Update() + { + float inputVertical = 0; + + var groundCheck = Physics2D.BoxCast(_boxCollider.bounds.center, _boxCollider.bounds.size, 0f, Vector2.down, .1f, groundLayer); + + if (groundCheck || _isOnLadder) + { + _isFall = false; + float inputHorizontal = Input.GetAxisRaw("Horizontal"); + if (inputHorizontal > 0 && !_facingRight) + { + FlipCharacter(); + } + if (inputHorizontal < 0 && _facingRight) + { + FlipCharacter(); + } + + animator.SetBool("Walk", inputHorizontal != 0); + + if (IsLadder(Vector2.down)) + { + _isOnLadder = true; + inputVertical = Input.GetAxisRaw("Vertical"); + + if (inputVertical > 0) + { + if (!IsLadder(Vector2.up)) + { + inputVertical = 0; + } + } + } + else + { + _isOnLadder = false; + } + _body.velocity = new Vector2(inputHorizontal * MovementSpeed, inputVertical * MovementSpeed); + } + else + { + _isFall = true; + } + } + + private RaycastHit2D IsLadder(Vector2 direction) + { + return Physics2D.BoxCast(_boxCollider.bounds.center, _boxCollider.bounds.size, 0f, direction, .1f, ladderLayer); + } + + + private void FixedUpdate() + { + if (_isOnLadder) + { + + _body.gravityScale = 0; + } + else + { + _body.gravityScale = 1; + } + if (_isFall) + { + if (IsLadder(Vector2.down)) + { + _isOnLadder = true; + } + _body.velocity = new Vector2(0, _body.velocity.y); + animator.SetBool("Walk", false); + } + } + + private void FlipCharacter() + { + Vector3 currentScale = gameObject.transform.localScale; + currentScale.x *= -1; + gameObject.transform.localScale = currentScale; + + _facingRight = !_facingRight; + } + + +} diff --git a/Assets/Scripts/Character.cs.meta b/Assets/Scripts/Character.cs.meta new file mode 100644 index 0000000..1e2648a --- /dev/null +++ b/Assets/Scripts/Character.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 02b165448a794b74992cf202965d79e4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Player.cs b/Assets/Scripts/Player.cs index 622d2d6..d48d373 100644 --- a/Assets/Scripts/Player.cs +++ b/Assets/Scripts/Player.cs @@ -1,32 +1,12 @@ using UnityEngine; -public class Player : MonoBehaviour +public class Player : Character { - [SerializeField] - private Animator animator; - [SerializeField] - private float MovementSpeed = 1.5f; - [SerializeField] - private LayerMask ladderLayer; - [SerializeField] - private LayerMask groundLayer; - [SerializeField] - private float distance; - private bool _isOnLadder; - private Rigidbody2D _body; - private BoxCollider2D _boxCollider; - private bool _isFall; - private bool _facingRight = true; + private int _totalCoins = 0; private bool _hasKey = false; - private void Start() - { - _body = GetComponent(); - _boxCollider = GetComponent(); - } - public void AddCoin() { _totalCoins++; @@ -48,90 +28,4 @@ public class Player : MonoBehaviour { return _hasKey; } - - - private void Update() - { - float inputVertical = 0; - - var groundCheck = Physics2D.BoxCast(_boxCollider.bounds.center, _boxCollider.bounds.size, 0f, Vector2.down, .1f, groundLayer); - - if (groundCheck || _isOnLadder) - { - _isFall = false; - float inputHorizontal = Input.GetAxisRaw("Horizontal"); - if (inputHorizontal > 0 && !_facingRight) - { - FlipCharacter(); - } - if (inputHorizontal < 0 && _facingRight) - { - FlipCharacter(); - } - - animator.SetBool("PlayerWalk", inputHorizontal != 0); - - if (IsLadder(Vector2.down)) - { - _isOnLadder = true; - inputVertical = Input.GetAxisRaw("Vertical"); - - if (inputVertical > 0) - { - if (!IsLadder(Vector2.up)) - { - inputVertical = 0; - } - } - } - else - { - _isOnLadder = false; - } - _body.velocity = new Vector2(inputHorizontal * MovementSpeed, inputVertical * MovementSpeed); - } - else - { - _isFall = true; - } - } - - private RaycastHit2D IsLadder(Vector2 direction) - { - return Physics2D.BoxCast(_boxCollider.bounds.center, _boxCollider.bounds.size, 0f, direction, .1f, ladderLayer); - } - - - private void FixedUpdate() - { - if (_isOnLadder) - { - - _body.gravityScale = 0; - } - else - { - _body.gravityScale = 1; - } - if (_isFall) - { - if (IsLadder(Vector2.down)) - { - _isOnLadder = true; - } - _body.velocity = new Vector2(0, _body.velocity.y); - animator.SetBool("PlayerWalk", false); - } - } - - private void FlipCharacter() - { - Vector3 currentScale = gameObject.transform.localScale; - currentScale.x *= -1; - gameObject.transform.localScale = currentScale; - - _facingRight = !_facingRight; - } - - }