Esempio n. 1
0
    private void gravity()
    {
        if (!drawRayVert(.22f, Vector2.down, downRayLen, downRaySpace))
        {
            airState = airborne.falling;
        }
        else
        {
            airState            = airborne.grounded;
            currentFallingSpeed = 0;
        }

        RaycastHit2D hit  = Physics2D.Raycast(transform.position, Vector2.down, 100f, rayLayer);
        RaycastHit2D hit2 = Physics2D.Raycast(new Vector3((transform.position.x - leftRaySpace / 2), transform.position.y, transform.position.z), Vector2.down, 100f, rayLayer);
        RaycastHit2D hit3 = Physics2D.Raycast(new Vector3((transform.position.x + rightRaySpace / 2), transform.position.y, transform.position.z), Vector2.down, 100f, rayLayer);
        RaycastHit2D hit4 = Physics2D.Raycast(new Vector3((transform.position.x - leftRaySpace / 4), transform.position.y, transform.position.z), Vector2.down, 100f, rayLayer);
        RaycastHit2D hit5 = Physics2D.Raycast(new Vector3((transform.position.x + rightRaySpace / 4), transform.position.y, transform.position.z), Vector2.down, 100f, rayLayer);

        Debug.DrawRay(transform.position, Vector2.down * 100f, Color.cyan);
        Debug.DrawRay(new Vector3((transform.position.x - leftRaySpace / 2), transform.position.y, transform.position.z), Vector2.down * 100f, Color.cyan);
        Debug.DrawRay(new Vector3((transform.position.x - leftRaySpace / 4), transform.position.y, transform.position.z), Vector2.down * 100f, Color.cyan);
        Debug.DrawRay(new Vector3((transform.position.x + rightRaySpace / 2), transform.position.y, transform.position.z), Vector2.down * 100f, Color.cyan);
        Debug.DrawRay(new Vector3((transform.position.x + rightRaySpace / 4), transform.position.y, transform.position.z), Vector2.down * 100f, Color.cyan);

        double leftDist       = Math.Round(hit2.distance, 2);
        double leftinnerDist  = Math.Round(hit4.distance, 2);
        double centerDist     = Math.Round(hit.distance, 2);
        double rightDist      = Math.Round(hit3.distance, 2);
        double rightinnerDist = Math.Round(hit5.distance, 2);

        if (hit.collider != null)
        {
            Debug.Log(leftDist.ToString() + " " + leftinnerDist.ToString() + "   " + centerDist.ToString() + "   " + rightinnerDist.ToString() + " " + rightDist.ToString() + "   " + currentFallingSpeed.ToString());
            if (-hit.distance >= currentFallingSpeed - gravForce && airState == airborne.falling)
            {
                //making sure my next gravity transform is valid
                Vector3 direction = new Vector3(transform.position.x, transform.position.y - hit.distance, transform.position.z);
                transform.position = direction;
            }
            else if (airState == airborne.falling)
            {
                //applying gravity
                Vector3 direction = new Vector3(transform.position.x, transform.position.y + currentFallingSpeed, transform.position.z);
                transform.position   = direction;
                currentFallingSpeed -= gravForce;
            }
            if (airState == airborne.grounded && hit.distance < .24f && (leftDist == centerDist && centerDist == rightDist && leftDist == leftinnerDist && rightDist == rightinnerDist))
            {
                //correcting distance from ground if incorrect
                Vector3 direction = new Vector3(transform.position.x, transform.position.y + (.25f - hit.distance), transform.position.z);
                transform.position = direction;
            }
            else if (airState == airborne.grounded && hit.distance > .26f && (leftDist == centerDist && centerDist == rightDist && leftDist == leftinnerDist && rightDist == rightinnerDist))
            {
                Vector3 direction = new Vector3(transform.position.x, transform.position.y - (hit.distance - .25f), transform.position.z);
                transform.position = direction;
            }
        }
    }
Esempio n. 2
0
 void Start()
 {
     airState = airborne.grounded;
     runState = runStates.idle;
 }