Пример #1
0
    void OnSceneGUI()
    {
        targetPatrol = (RobotPatrol)target;

        for (int i = 0; i < targetPatrol.route.Count; ++i)
        {
            if (routeIndex == i)
            {
                this.UpdateListIndexViaHandle(ref targetPatrol.route, i, new PositionHandleDelegate(Handles.PositionHandle), targetPatrol.route[i], Quaternion.identity);
            }

            if (routeIndex == i)
            {
                if (xOffset != 0f || zOffset != 0f)
                {
                    Handles.color = new Color(0f, 0.75f, 0f, 0.25f);
                    Handles.SphereCap(0, targetPatrol.route[i] + new Vector3(xOffset, 0f, zOffset), Quaternion.identity, 0.35f);
                    Handles.ArrowCap(0, targetPatrol.route[i], Quaternion.LookRotation(offsetVector, Vector3.up), 1.5f);
                    Handles.DrawLine(targetPatrol.route[i], targetPatrol.route[i] + offsetVector);
                    Handles.ArrowCap(0, offsetVector + targetPatrol.route[i], Quaternion.LookRotation((i < targetPatrol.route.Count - 1 ? targetPatrol.route[i + 1] : targetPatrol.route[0]) - (offsetVector + targetPatrol.route[i]), Vector3.up), 1.5f);
                    Handles.DrawLine(targetPatrol.route[i] + offsetVector, i < targetPatrol.route.Count - 1 ? targetPatrol.route[i + 1] : targetPatrol.route[0]);
                }
                Handles.color = new Color(1f, 0f, 0f, 0.5f);
            }
            else
            {
                if (i == 0)
                {
                    Handles.color = new Color(0f, 1f, 1f, 0.5f);
                }
                else
                {
                    Handles.color = new Color(0f, 0f, 1f, 0.5f);
                }
            }

            if (Handles.Button(targetPatrol.route[i], Quaternion.identity, 0.35f, 0.42f, Handles.SphereCap))
            {
                routeIndex = i;
                Repaint();
            }

            Handles.color = new Color(0f, 0f, 1f, 0.5f);
            Handles.DrawLine(targetPatrol.route[i], i < targetPatrol.route.Count - 1 ? targetPatrol.route[i + 1] : targetPatrol.route[0]);
            Handles.ArrowCap(0, targetPatrol.route[i], Quaternion.LookRotation(((i < targetPatrol.route.Count - 1 ? targetPatrol.route[i + 1] : targetPatrol.route[0]) - targetPatrol.route[i]), Vector3.up), 1.5f);
        }

        // Draw search cone
        if (targetPatrol.visionEnabled)
        {
            Handles.color = new Color(1f, 1f, 0f, 0.5f);
            DrawViewCone();
        }
    }
Пример #2
0
 void Awake()
 {
     flipped  = false;
     robotRef = GetComponentInParent <RobotPatrol>();
 }
Пример #3
0
 private void Start()
 {
     patrolScript = GetComponentInParent <RobotPatrol>();
     anim         = GetComponentInParent <Animator>();
     healthSystem = GetComponent <EnemyRobotHealthSystem>();
 }
Пример #4
0
    public override void OnInspectorGUI()
    {
        base.OnInspectorGUI();

        targetPatrol = (RobotPatrol)target;

        EditorGUILayout.Space();
        EditorGUILayout.Space();
        EditorGUILayout.Space();

        EditorGUILayout.LabelField("Route Editor Options:", EditorStyles.boldLabel);

        EditorGUILayout.Space();

        EditorGUILayout.BeginHorizontal();

        EditorGUILayout.LabelField("Node Index: ");

        routeIndex = EditorGUILayout.IntField(routeIndex);

        EditorGUILayout.EndHorizontal();

        if (GUILayout.Button("Duplicate Node at Index"))
        {
            this.HandleCustomEditorMethod(DuplicateNodeAtIndex);
        }

        if (GUILayout.Button("Remove Node at Index"))
        {
            this.HandleCustomEditorMethod(RemoveNodeAtIndex);
        }

        if (GUILayout.Button("Insert Node Before Index"))
        {
            this.HandleCustomEditorMethod(InsertNodeBeforeIndex);
        }

        if (GUILayout.Button("Insert Node After Index"))
        {
            this.HandleCustomEditorMethod(InsertNodeAfterIndex);
        }

        EditorGUILayout.Space();

        EditorGUILayout.LabelField("Offset:");

        EditorGUILayout.BeginHorizontal();
        EditorGUILayout.LabelField("X: ");
        xOffset = EditorGUILayout.DelayedFloatField(xOffset);
        EditorGUILayout.EndHorizontal();

        EditorGUILayout.BeginHorizontal();
        EditorGUILayout.LabelField("Z: ");
        zOffset = EditorGUILayout.DelayedFloatField(zOffset);
        EditorGUILayout.EndHorizontal();

        EditorGUILayout.BeginHorizontal();
        EditorGUILayout.LabelField("\u03B8: ");
        thetaOffset = EditorGUILayout.DelayedFloatField(thetaOffset);
        EditorGUILayout.EndHorizontal();

        EditorGUILayout.BeginHorizontal();
        EditorGUILayout.LabelField("R: ");
        radiusOffset = EditorGUILayout.DelayedFloatField(radiusOffset);
        EditorGUILayout.EndHorizontal();

        if (GUILayout.Button("Insert Node at Offset"))
        {
            this.HandleCustomEditorMethod(InsertNodeAtOffset);
        }

        if (GUILayout.Button("Move Node to Offset"))
        {
            this.HandleCustomEditorMethod(MoveNodeToOffset);
        }

        EditorGUILayout.Space();

        if (GUILayout.Button("Insert Node at Robot Position"))
        {
            this.HandleCustomEditorMethod(CreateNodeAtRobotPosition);
        }

        EditorGUILayout.Space();

        EditorGUILayout.BeginHorizontal();

        EditorGUILayout.LabelField("N-gon Sides: ");
        nGonSides = EditorGUILayout.IntField(nGonSides);

        EditorGUILayout.EndHorizontal();

        EditorGUILayout.BeginHorizontal();

        EditorGUILayout.LabelField("N-gon Radius: ");
        nGonRadius = EditorGUILayout.FloatField(nGonRadius);

        EditorGUILayout.EndHorizontal();

        if (GUILayout.Button("Create Regular N-gon Path"))
        {
            this.HandleCustomEditorMethod(CreateNgonPath);
        }

        EditorGUILayout.Space();

        EditorGUILayout.LabelField("Other Actions: ", EditorStyles.boldLabel);

        EditorGUILayout.Space();

        if (GUILayout.Button("Snap Patrol Route to Y-Plane"))
        {
            this.HandleCustomEditorMethod(LockRouteToYPlane);
        }

        EditorGUILayout.Space();

        if (GUILayout.Button("Move Robot to First Position"))
        {
            this.HandleCustomEditorMethod(MoveRobotToFirstPosition);
        }

        if (GUILayout.Button("Test"))
        {
            Debug.LogFormat("(\u03B1: {0}, \u03B2: {1})", targetPatrol.targetTransform.position.GetAzimuth(targetPatrol.transform.position + targetPatrol.eyeOffset, targetPatrol.transform.up, targetPatrol.transform.forward), targetPatrol.targetTransform.position.GetElevation(targetPatrol.transform.position + targetPatrol.eyeOffset, targetPatrol.transform.up));
        }
    }