character collider issues - WIP
This commit is contained in:
+63
-40
@@ -17,10 +17,9 @@ public abstract class Character : MonoBehaviour
|
||||
|
||||
|
||||
private Rigidbody2D _body;
|
||||
//private BoxCollider2D _boxCollider;
|
||||
private CapsuleCollider2D _boxCollider;
|
||||
private CapsuleCollider2D _capsuleCollider;
|
||||
protected bool _isOnBridge;
|
||||
protected bool _isOnLadder;
|
||||
protected bool _isOnLadder = false;
|
||||
protected bool _isFalling;
|
||||
protected bool _facingRight = true;
|
||||
|
||||
@@ -28,11 +27,11 @@ public abstract class Character : MonoBehaviour
|
||||
protected bool isAllowVertical = true;
|
||||
protected bool isAllowRight = true;
|
||||
protected bool isAllowLeft = true;
|
||||
float v_movement = 0;
|
||||
|
||||
private void Start()
|
||||
{
|
||||
_body = GetComponent<Rigidbody2D>();
|
||||
_boxCollider = GetComponent<CapsuleCollider2D>();
|
||||
_capsuleCollider = GetComponent<CapsuleCollider2D>();
|
||||
}
|
||||
|
||||
protected void MoveTo(float inputHorizontal, float inputVertical)
|
||||
@@ -41,8 +40,8 @@ public abstract class Character : MonoBehaviour
|
||||
|
||||
_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);
|
||||
@@ -52,8 +51,8 @@ public abstract class Character : MonoBehaviour
|
||||
|
||||
isAllowVertical = false;
|
||||
_isFalling = false;
|
||||
|
||||
float h_movement = inputHorizontal;
|
||||
|
||||
if (h_movement > 0 && !_facingRight || h_movement < 0 && _facingRight)
|
||||
{
|
||||
FlipCharacter();
|
||||
@@ -61,25 +60,30 @@ public abstract class Character : MonoBehaviour
|
||||
|
||||
SetWalkingAnimation(h_movement != 0);
|
||||
|
||||
var upperElement = GetMapElement(Vector2.up);
|
||||
_isOnLadder = mapElement == MapElementType.Ladder || upperElement == MapElementType.Ladder;
|
||||
//_isOnLadder = mapElement == MapElementType.Ladder && leftCheck == MapElementType.Ladder && rightCheck== MapElementType.Ladder;
|
||||
|
||||
if (_isOnLadder)
|
||||
if (mapElement == MapElementType.Ladder || (leftCheck == MapElementType.Ladder && rightCheck == MapElementType.Ladder))
|
||||
{
|
||||
float v_movement = inputVertical;
|
||||
print($"On ladder v_speed {v_movement}");
|
||||
isAllowVertical = true;
|
||||
_isOnLadder = true;
|
||||
|
||||
//if (v_movement != 0)
|
||||
//{
|
||||
//if (v_movement > 0 && mapElement != MapElementType.Ladder)
|
||||
//{
|
||||
// v_movement = 0;
|
||||
//}
|
||||
|
||||
float v_movement = inputVertical;
|
||||
if (v_movement > 0 && upperElement != MapElementType.Ladder)
|
||||
{
|
||||
v_movement = 0;
|
||||
}
|
||||
|
||||
SetClimbingAnimation(v_movement != 0);
|
||||
SetClimbingAnimation(v_movement != 0);
|
||||
//}
|
||||
_body.velocity = new Vector2(h_movement * MovementSpeed, v_movement * MovementSpeed);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
print("On ground");
|
||||
_body.velocity = new Vector2(h_movement * MovementSpeed, _body.velocity.y);
|
||||
}
|
||||
}
|
||||
@@ -88,28 +92,7 @@ public abstract class Character : MonoBehaviour
|
||||
_isFalling = true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private MapElementType GetMapElement(Vector2 direction)
|
||||
{
|
||||
var raycastHit = Physics2D.BoxCast(_boxCollider.bounds.center, _boxCollider.bounds.size, 0f, direction, 0.01f, _mapLayer);
|
||||
if (raycastHit)
|
||||
{
|
||||
var mapElement = raycastHit.transform.GetComponent<MapElement>();
|
||||
if (mapElement == null || !mapElement.IsEnabled)
|
||||
{
|
||||
return MapElementType.Empty;
|
||||
}
|
||||
return mapElement.ElementSO.ElementType;
|
||||
}
|
||||
return MapElementType.Empty;
|
||||
}
|
||||
|
||||
protected abstract void SetWalkingAnimation(bool isWalking);
|
||||
protected abstract void SetClimbingAnimation(bool isClimbing);
|
||||
|
||||
private void FixedUpdate()
|
||||
{
|
||||
if (_isOnLadder || _isOnBridge)
|
||||
{
|
||||
_body.gravityScale = 0;
|
||||
@@ -123,14 +106,54 @@ public abstract class Character : MonoBehaviour
|
||||
_body.velocity = new Vector2(0, _body.velocity.y);
|
||||
SetWalkingAnimation(false);
|
||||
|
||||
if (GetMapElement(Vector2.down) == MapElementType.Ladder)
|
||||
if (mapElement == MapElementType.Ladder)
|
||||
{
|
||||
_body.velocity = Vector2.zero;
|
||||
_isOnLadder = true;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private MapElementType GetMapElement(Vector2 direction)
|
||||
{
|
||||
Vector2 rayStartPoint;
|
||||
if (direction==Vector2.down)
|
||||
rayStartPoint = new Vector2(_capsuleCollider.bounds.center.x + direction.x / 2, _capsuleCollider.bounds.min.y -0.1f);
|
||||
else
|
||||
rayStartPoint = new Vector2(_capsuleCollider.bounds.center.x + direction.x / 2, _capsuleCollider.bounds.min.y );
|
||||
var boundsSize = new Vector2(_capsuleCollider.bounds.size.x - 0.05f, 0.1f);
|
||||
|
||||
var raycastHit = Physics2D.BoxCast(rayStartPoint, boundsSize, 0f, direction, 1f, _mapLayer);
|
||||
MapElementType returnValue;
|
||||
Color color = Color.red;
|
||||
if (raycastHit)
|
||||
{
|
||||
var mapElement = raycastHit.transform.GetComponent<MapElement>();
|
||||
if (!mapElement.IsEnabled)
|
||||
{
|
||||
color = Color.white;
|
||||
returnValue = MapElementType.Empty;
|
||||
}
|
||||
else
|
||||
{
|
||||
color = Color.green;
|
||||
returnValue = mapElement.ElementSO.ElementType;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
returnValue = MapElementType.Empty;
|
||||
}
|
||||
Debug.DrawRay(rayStartPoint, direction, color);
|
||||
return returnValue;
|
||||
}
|
||||
|
||||
protected abstract void SetWalkingAnimation(bool isWalking);
|
||||
protected abstract void SetClimbingAnimation(bool isClimbing);
|
||||
|
||||
|
||||
|
||||
private void FlipCharacter()
|
||||
{
|
||||
Vector3 currentScale = gameObject.transform.localScale;
|
||||
|
||||
Reference in New Issue
Block a user