diff --git a/Assets/Scripts/Character.cs b/Assets/Scripts/Character.cs index 9ad7b76..cbfa018 100644 --- a/Assets/Scripts/Character.cs +++ b/Assets/Scripts/Character.cs @@ -73,15 +73,17 @@ public abstract class Character : MonoBehaviour if (_isOnLadder) { - float ladderCenterDistance = Mathf.Abs(transform.position.x - block.transform.position.x); + float ladderXCenterDistance = Mathf.Abs(transform.position.x - block.transform.position.x); float v_movement = inputVertical; - isAllowVertical = ladderCenterDistance < 0.3f; - - - SetClimbingAnimation(v_movement != 0); - _body.velocity = new Vector2(h_movement * _movementSpeed, v_movement * _movementSpeed); + + isAllowVertical = (ladderXCenterDistance < 0.3f) || (CanClimbUp() && v_movement>0); + if (isAllowVertical) + { + SetClimbingAnimation(v_movement != 0); + _body.velocity = new Vector2(h_movement * _movementSpeed, v_movement * _movementSpeed); + } } else { @@ -120,16 +122,24 @@ public abstract class Character : MonoBehaviour private void Death() { OnDeath(); - } + private bool CanClimbUp() + { + var rayCastHit = Physics2D.Raycast(_capsuleCollider.bounds.center, Vector2.down, _capsuleCollider.size.y / 2,_mapLayer); + if(rayCastHit) + if(rayCastHit.collider.transform.GetComponent().ElementSO.ElementType==MapElementType.Ladder) + { + return true; + } + return false; + } private MapElement GetMapElement() { - var playerBounds = _capsuleCollider.bounds.center; - var collider = BoxCast(playerBounds, _cellSize, 0f, Vector3.forward, .01f, _mapLayer); + var collider = BoxCast(_capsuleCollider.bounds.center, _cellSize, 0f, Vector3.forward, .01f, _mapLayer); Color color = Color.red; MapElement mapElement = null; if (collider.Length > 0)