public bool isGrounded() { if (rDown == null) { return(true); } return(rDown.isHit()); }
public float getValidMovementY(float orSmallerInput) { if (orSmallerInput > 0) { if (rUp == null) { Debug.Log("rUp is null"); return(orSmallerInput); } if (rUp.isHit()) { return(rUp.getAllowableSpeed()); } return(orSmallerInput); } if (rDown == null) { Debug.Log("rDown is null"); return(orSmallerInput); } if (rDown.isHit()) { return(rDown.getAllowableSpeed()); } return(orSmallerInput); }
RayCastResult doGetValidMovement(Vector2 normal, float speed, params Vector2[] origins) { float dir = Mathf.Sign(speed); foreach (Vector2 v in origins) { RayCastResult r1 = doTryRaycast(v, speed, dir, normal); if (r1.isHit()) { return(r1); } } return(RayCastResult.miss(speed)); }
public void FixedUpdate(SpeedProvider chrc) { if (layerMask < 0) { layerMask = 1 << LayerMask.NameToLayer("Ground"); if (layerMask < 0) { return; } } Vector2 c = chrc.getCenter(); float speedX = chrc.getSpeedX(); float speedY = chrc.getSpeedY(); Vector2 normalX = new Vector2(Mathf.Sign(speedX), 0); Vector2 normalY = new Vector2(0, Mathf.Sign(speedY)); if (chrc.isRightFacing()) { rUp = doGetValidMovement(normalY, speedY, getTopLeftPlusDelta(c), getTopMiddle(c), getTopRightMinusDelta(c)); rDown = doGetValidMovement(normalY, speedY, getBotLeftPlusDelta(c), getBotMiddle(c), getBotRightMinusDelta(c)); } else { rUp = doGetValidMovement(normalY, speedY, getTopRightMinusDelta(c), getTopMiddle(c), getTopLeftPlusDelta(c)); rDown = doGetValidMovement(normalY, speedY, getBotRightMinusDelta(c), getBotMiddle(c), getBotLeftPlusDelta(c)); } if (speedX > 0) { if (isGrounded()) { rX = doGetValidMovement(normalX, speedX, getTopRight(c), getRight(c), getLowRight(c)); } else { rX = doGetValidMovement(normalX, speedX, getTopRight(c), getRight(c), getBotRight(c)); } if (rX.isHit()) { rightBlocked = true; } else { rightBlocked = false; } } else { if (isGrounded()) { rX = doGetValidMovement(normalX, speedX, getTopLeft(c), getLeft(c), getLowLeft(c)); } else { rX = doGetValidMovement(normalX, speedX, getTopLeft(c), getLeft(c), getBotLeft(c)); } if (rX.isHit()) { leftBlocked = true; } else { leftBlocked = false; } } }