diff --git a/Assets/Scripts/Character.cs b/Assets/Scripts/Character.cs index 73356e7..23337e2 100644 --- a/Assets/Scripts/Character.cs +++ b/Assets/Scripts/Character.cs @@ -37,55 +37,56 @@ public abstract class Character : MonoBehaviour protected void MoveTo(float inputHorizontal, float inputVertical) { - var mapElement = GetMapElement(Vector2.down); + var mapElement = GetMapElement(Vector2.down); -_isOnBridge = mapElement == MapElementType.Bridge && !_isFalling; + _isOnBridge = mapElement == MapElementType.Bridge && !_isFalling; -if (mapElement == MapElementType.Wall || _isOnLadder || _isOnBridge || mapElement == MapElementType.BreakableWall) -{ - var leftCheck = GetMapElement(Vector2.left); - var rightCheck = GetMapElement(Vector2.right); - - isAllowLeft = !(leftCheck == MapElementType.Wall || leftCheck == MapElementType.BreakableWall); - isAllowRight = !(rightCheck == MapElementType.Wall || rightCheck == MapElementType.BreakableWall); - - isAllowVertical = false; - _isFalling = false; - - float h_movement =inputHorizontal; - if (h_movement > 0 && !_facingRight || h_movement < 0 && _facingRight) - { - FlipCharacter(); - } - - SetWalkingAnimation(h_movement != 0); - - var upperElement = GetMapElement(Vector2.up); - _isOnLadder = mapElement == MapElementType.Ladder || upperElement == MapElementType.Ladder; - - if (_isOnLadder) - { - isAllowVertical = true; - _isOnLadder = true; - - float v_movement = inputVertical; - if (v_movement > 0 && upperElement != MapElementType.Ladder) + if (mapElement == MapElementType.Wall || _isOnLadder + || _isOnBridge || mapElement == MapElementType.BreakableWall) { - v_movement = 0; - } + var leftCheck = GetMapElement(Vector2.left); + var rightCheck = GetMapElement(Vector2.right); - SetClimbingAnimation(v_movement != 0); - _body.velocity = new Vector2(h_movement * MovementSpeed, v_movement * MovementSpeed); - } - else - { - _body.velocity = new Vector2(h_movement * MovementSpeed, _body.velocity.y); - } -} -else -{ - _isFalling = true; -} + isAllowLeft = !(leftCheck == MapElementType.Wall || leftCheck == MapElementType.BreakableWall); + isAllowRight = !(rightCheck == MapElementType.Wall || rightCheck == MapElementType.BreakableWall); + + isAllowVertical = false; + _isFalling = false; + + float h_movement = inputHorizontal; + if (h_movement > 0 && !_facingRight || h_movement < 0 && _facingRight) + { + FlipCharacter(); + } + + SetWalkingAnimation(h_movement != 0); + + var upperElement = GetMapElement(Vector2.up); + _isOnLadder = mapElement == MapElementType.Ladder || upperElement == MapElementType.Ladder; + + if (_isOnLadder) + { + isAllowVertical = true; + _isOnLadder = true; + + float v_movement = inputVertical; + if (v_movement > 0 && upperElement != MapElementType.Ladder) + { + v_movement = 0; + } + + SetClimbingAnimation(v_movement != 0); + _body.velocity = new Vector2(h_movement * MovementSpeed, v_movement * MovementSpeed); + } + else + { + _body.velocity = new Vector2(h_movement * MovementSpeed, _body.velocity.y); + } + } + else + { + _isFalling = true; + } } @@ -95,7 +96,7 @@ else if (raycastHit) { var mapElement = raycastHit.transform.GetComponent(); - if (mapElement == null) + if (mapElement == null || !mapElement.IsEnabled) { return MapElementType.Empty; } diff --git a/Assets/Scripts/MapElements/BreakableWall.cs b/Assets/Scripts/MapElements/BreakableWall.cs index ea916fb..e6f5f4f 100644 --- a/Assets/Scripts/MapElements/BreakableWall.cs +++ b/Assets/Scripts/MapElements/BreakableWall.cs @@ -21,6 +21,7 @@ public class BreakableWall : MapElement public override void Hit() { + IsEnabled = false; _boxCollider.isTrigger=true; _spriteRenderer.enabled = false; @@ -43,7 +44,7 @@ public class BreakableWall : MapElement { print("Character is dead"); } - + IsEnabled = true; _boxCollider.isTrigger = false; _spriteRenderer.enabled = true; _needRespawn = false; diff --git a/Assets/Scripts/MapElements/MapElement.cs b/Assets/Scripts/MapElements/MapElement.cs index 9246b53..1a4be52 100644 --- a/Assets/Scripts/MapElements/MapElement.cs +++ b/Assets/Scripts/MapElements/MapElement.cs @@ -5,6 +5,8 @@ public class MapElement : MonoBehaviour, IMapElement [SerializeField] private MapElementSO _elementSO; public MapElementSO ElementSO => _elementSO; + public bool IsEnabled { get; set; } = true; + public virtual void Hit() {