This commit is contained in:
Vova
2023-07-01 11:08:57 +03:00
parent 4c1443787d
commit f674d0be26
3 changed files with 51 additions and 47 deletions
+47 -46
View File
@@ -37,55 +37,56 @@ public abstract class Character : MonoBehaviour
protected void MoveTo(float inputHorizontal, float inputVertical) 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) 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)
{ {
v_movement = 0; var leftCheck = GetMapElement(Vector2.left);
} var rightCheck = GetMapElement(Vector2.right);
SetClimbingAnimation(v_movement != 0); isAllowLeft = !(leftCheck == MapElementType.Wall || leftCheck == MapElementType.BreakableWall);
_body.velocity = new Vector2(h_movement * MovementSpeed, v_movement * MovementSpeed); isAllowRight = !(rightCheck == MapElementType.Wall || rightCheck == MapElementType.BreakableWall);
}
else isAllowVertical = false;
{ _isFalling = false;
_body.velocity = new Vector2(h_movement * MovementSpeed, _body.velocity.y);
} float h_movement = inputHorizontal;
} if (h_movement > 0 && !_facingRight || h_movement < 0 && _facingRight)
else {
{ FlipCharacter();
_isFalling = true; }
}
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) if (raycastHit)
{ {
var mapElement = raycastHit.transform.GetComponent<MapElement>(); var mapElement = raycastHit.transform.GetComponent<MapElement>();
if (mapElement == null) if (mapElement == null || !mapElement.IsEnabled)
{ {
return MapElementType.Empty; return MapElementType.Empty;
} }
+2 -1
View File
@@ -21,6 +21,7 @@ public class BreakableWall : MapElement
public override void Hit() public override void Hit()
{ {
IsEnabled = false;
_boxCollider.isTrigger=true; _boxCollider.isTrigger=true;
_spriteRenderer.enabled = false; _spriteRenderer.enabled = false;
@@ -43,7 +44,7 @@ public class BreakableWall : MapElement
{ {
print("Character is dead"); print("Character is dead");
} }
IsEnabled = true;
_boxCollider.isTrigger = false; _boxCollider.isTrigger = false;
_spriteRenderer.enabled = true; _spriteRenderer.enabled = true;
_needRespawn = false; _needRespawn = false;
+2
View File
@@ -5,6 +5,8 @@ public class MapElement : MonoBehaviour, IMapElement
[SerializeField] [SerializeField]
private MapElementSO _elementSO; private MapElementSO _elementSO;
public MapElementSO ElementSO => _elementSO; public MapElementSO ElementSO => _elementSO;
public bool IsEnabled { get; set; } = true;
public virtual void Hit() public virtual void Hit()
{ {