Ejemplo n.º 1
0
    private void OnEnable()
    {
        sb = (ShooterBehaviour)target;
        GetTools();

        if (sb.sensorSet != null)
        {
            vs = sb.sensorSet.sensorList.Find(x => x.GetType() == typeof(SensorVisual)) as SensorVisual;
            hr = sb.sensorSet.sensorList.Find(x => x.GetType() == typeof(SensorHearing)) as SensorHearing;
        }
    }
Ejemplo n.º 2
0
    public void ShowVisualSensorShapes(Transform head, SensorVisual vision)
    {
        vision.farViewDistance   = vision.farViewDistance < vision.highSenseEllipseH ? vision.highSenseEllipseH : vision.farViewDistance;
        vision.innerViewAngle    = vision.innerViewAngle > vision.outerViewAngle ? vision.outerViewAngle : vision.innerViewAngle;
        vision.highSenseEllipseH = vision.highSenseEllipseH < 3 ? 3 : vision.highSenseEllipseH;

        Vector3 glHeadUpDir   = head.transform.TransformDirection(-Vector3.right);
        Vector3 glHeadFwDir   = head.transform.TransformDirection(Vector3.up);
        Vector3 glHeadLeftDir = head.transform.TransformDirection(Vector3.forward);

        float a = vision.highSenseEllipseH / 2;
        float b = a * Mathf.Tan(vision.highSenseEllipseW / 2 * Mathf.Deg2Rad);
        float c = Mathf.Sqrt(a * a - b * b);

        Vector3 vPos   = head.position;
        Vector3 vDir   = head.TransformDirection(Vector3.up);
        Vector3 F1     = vPos + vDir * (a - vision.fBehindDistance - c);
        Vector3 F2     = vPos + vDir * (a - vision.fBehindDistance + c);
        Vector3 center = (F1 + F2) / 2;

        //Debug.DrawRay(F1, Vector3.up * .3f, Color.green);
        ////Handles.Label(F1, "F1");
        //Debug.DrawRay(F2, Vector3.up * .3f, Color.green);
        ////Handles.Label(F2, "F2");
        //Debug.DrawRay(vPos, Vector3.up * .3f, Color.green);
        //Handles.Label(vPos, "vPos");
        //Debug.DrawRay(center, Vector3.up * .3f, Color.white);

        // labels
        vision.textGuiStyle.fontSize         = vision.labelsFontSize;
        vision.textGuiStyle.normal.textColor = vision.labelsFontColor;
        if (vision.labelsFont)
        {
            if (!vision.textGuiStyle.font)
            {
                vision.textGuiStyle.font = vision.labelsFont;
            }
        }

        GUIContent content = new GUIContent("");

        if (Camera.current && (Vector3.Distance(Camera.current.transform.position, head.position) > vision.labelsDisableDistance))
        {
            vision.textGuiStyle.normal.textColor = new Color(0, 0, 0, 0);
        }
        content.text = "a:" + vision.iLevel_a;
        Handles.Label(center, content, vision.textGuiStyle);
        content.text = "b:" + vision.iLevel_b;
        if (vision.fBehindDistance > 0)
        {
            Handles.Label(head.position - vDir * vision.fBehindDistance / 2, content, vision.textGuiStyle);
        }

        Vector3 dirTemp = Quaternion.AngleAxis(-vision.innerViewAngle * 4 / 10, glHeadUpDir) * vDir;

        content.text = "c:" + vision.iLevel_cd;
        Handles.Label(head.position + dirTemp * (vision.nearViewDistance - 3), content, vision.textGuiStyle);
        dirTemp      = Quaternion.AngleAxis(vision.innerViewAngle * 4 / 10, glHeadUpDir) * vDir;
        content.text = "d:" + vision.iLevel_cd;
        Handles.Label(head.position + dirTemp * (vision.nearViewDistance - 3), content, vision.textGuiStyle);
        dirTemp      = Quaternion.AngleAxis(-vision.outerViewAngle * 4 / 10, glHeadUpDir) * vDir;
        content.text = "e:" + vision.iLevel_ef;
        Handles.Label(head.position + dirTemp * (vision.nearViewDistance - 3), content, vision.textGuiStyle);
        dirTemp      = Quaternion.AngleAxis(vision.outerViewAngle * 4 / 10, glHeadUpDir) * vDir;
        content.text = "f:" + vision.iLevel_ef;
        Handles.Label(head.position + dirTemp * (vision.nearViewDistance - 3), content, vision.textGuiStyle);
        dirTemp      = Quaternion.AngleAxis(-vision.outerViewAngle * 4 / 10, glHeadUpDir) * vDir;
        content.text = "g:" + vision.iLevel_gh;
        Handles.Label(head.position + dirTemp * (vision.farViewDistance - (vision.farViewDistance - vision.nearViewDistance) / 2), content, vision.textGuiStyle);
        dirTemp      = Quaternion.AngleAxis(vision.outerViewAngle * 4 / 10, glHeadUpDir) * vDir;
        content.text = "h:" + vision.iLevel_gh;
        Handles.Label(head.position + dirTemp * (vision.farViewDistance - (vision.farViewDistance - vision.nearViewDistance) / 2), content, vision.textGuiStyle);
        content.text = "i:" + vision.iLevel_i;
        Handles.Label(head.position + glHeadFwDir * ((vision.farViewDistance - (vision.farViewDistance - vision.nearViewDistance) / 2)), content, vision.textGuiStyle);

        DrawEllipse(center + vDir * a, center - vDir * a, b, head.forward); // high intensity ellipse

        Handles.color = vision.color1;
        Handles.DrawSolidArc(vPos, head.TransformDirection(-Vector3.right), vDir, vision.outerViewAngle / 2, vision.farViewDistance);
        Handles.DrawSolidArc(vPos, -head.TransformDirection(Vector3.left), vDir, vision.outerViewAngle / 2, vision.farViewDistance);

        Handles.color = vision.color2;
        Handles.DrawSolidArc(vPos, head.TransformDirection(-Vector3.right), vDir, vision.innerViewAngle / 2, vision.nearViewDistance);
        Handles.DrawSolidArc(vPos, -head.TransformDirection(-Vector3.right), vDir, vision.innerViewAngle / 2, vision.nearViewDistance);

        Handles.color = vision.color2;
        Handles.DrawSolidArc(vPos, head.TransformDirection(-Vector3.right), vDir, vision.outerViewAngle / 2, vision.nearViewDistance);
        Handles.DrawSolidArc(vPos, -head.TransformDirection(-Vector3.right), vDir, vision.outerViewAngle / 2, vision.nearViewDistance);

        Handles.color = vision.color2;
        Handles.DrawSolidArc(vPos, head.TransformDirection(-Vector3.right), vDir, vision.innerViewAngle / 2, vision.farViewDistance);
        Handles.DrawSolidArc(vPos, -head.TransformDirection(-Vector3.right), vDir, vision.innerViewAngle / 2, vision.farViewDistance);

        // vertical view angle
        Handles.color = vision.color3;
        Handles.DrawSolidArc(vPos, glHeadLeftDir, glHeadFwDir, vision.VerticalViewAngle / 2, vision.farViewDistance);
        Handles.DrawSolidArc(vPos, glHeadLeftDir, glHeadFwDir, -vision.VerticalViewAngle / 2, vision.farViewDistance);
        Handles.color = Color.gray;
        Handles.DrawDottedLine(vPos, vPos + vDir * (vision.farViewDistance - vision.fBehindDistance), 8);
    }