Ejemplo n.º 1
0
    void DashSlash(int dir)
    {
        if (dir == 0)
        {
            dir = _anim.Facing;
        }
        if (dir == 0)
        {
            return;
        }

        RaycastHit r;
        Vector3    origin = transform.position;

        float[] distlist = new float[5];
        float   dashDist = 4f;
        Vector3 dirVec   = new Vector3(dir, 0);
        int     gMask    = Layers.GetGroundMask(false);

        Physics.Raycast(origin + new Vector3(0, 0.8f, 0), dirVec, out r, dashDist, gMask);
        Debug.DrawRay(origin + new Vector3(0, 0.8f, 0), dashDist * dirVec, (Color.white));
        distlist[0] = r.distance;
        Physics.Raycast(origin + new Vector3(0, 0.5f, 0), dirVec, out r, dashDist, gMask);
        Debug.DrawRay(origin + new Vector3(0, 0.5f, 0), dashDist * dirVec, (Color.white));
        distlist[1] = r.distance;
        Physics.Raycast(origin + new Vector3(0, 0.2f, 0), dirVec, out r, dashDist, gMask);
        Debug.DrawRay(origin + new Vector3(0, 0.2f, 0), dashDist * dirVec, (Color.white));
        distlist[2] = r.distance;
        Physics.Raycast(origin + new Vector3(0, -0.15f, 0), dirVec, out r, dashDist, gMask);
        Debug.DrawRay(origin + new Vector3(0, -0.15f, 0), dashDist * dirVec, (Color.white));
        distlist[3] = r.distance;
        Physics.Raycast(origin + new Vector3(0, -0.45f, 0), dirVec, out r, dashDist, gMask);
        Debug.DrawRay(origin + new Vector3(0, -0.45f, 0), dashDist * dirVec, (Color.white));
        distlist[4] = r.distance;

        float shortest = dashDist;

        foreach (float f in distlist)
        {
            if (f == 0)
            {
                continue;
            }
            if (f < shortest)
            {
                shortest = f;
            }
        }
        shortest -= 0.5f;
        if (shortest < 0)
        {
            shortest = 0;
        }

        _anim.PlayDashSlashAnim(shortest * dir);
        Vector3 endpos = origin + (shortest * dirVec);

        transform.position  = endpos;
        _rigidbody.velocity = Vector3.zero;
        dashPauseTimer      = dashPauseDuration;
    }