Ejemplo n.º 1
0
    void OnSceneGUI()
    {
        // get the chosen game object
        NodeSystem t = target as NodeSystem;

        if (sv == null || sceneViewCam == null)
        {
            sv           = EditorWindow.GetWindow <SceneView>();
            sceneViewCam = sv.camera;
        }

        if (t == null || t.rootNode == null)
        {
            return;
        }

        Event current      = Event.current;
        int   controlID    = GUIUtility.GetControlID(t.GetHashCode(), FocusType.Passive);
        Node  nodeToSelect = NodeToSelect(t);

        if (Event.current.type == EventType.MouseDown && Event.current.button == 0)
        {
            if (nodeToSelect != null)
            {
                t.selectedNode = nodeToSelect;
                Event.current.Use();
            }
        }

        if (current.type == EventType.Layout)
        {
            if (nodeToSelect != null)
            {
                HandleUtility.AddDefaultControl(controlID);
            }
        }

        DrawLinesRecursively(t, t.rootNode);
        EditorGUI.BeginChangeCheck();
        Vector3 newPosition = t.transform.TransformPoint(t.selectedNode.pos);

        if (t.selectedNode != null)
        {
            newPosition = Handles.PositionHandle(t.transform.TransformPoint(t.selectedNode.pos), t.transform.rotation);
        }
        if (EditorGUI.EndChangeCheck())
        {
            Undo.RecordObject(t, "Change node position");
            t.selectedNode.pos = t.transform.InverseTransformPoint(newPosition);
        }
    }