Exemple #1
0
    protected virtual void OnGUI()
    {
        bool hasClickedOnNode = false;

        int selectIndex = -1;

        Event e = Event.current;

        m_mousePos = e.mousePosition;

        for (int i = 0; i < m_nodes.Count; ++i)
        {
            if (m_nodes[i].nodeRect.Contains(m_mousePos))
            {
                selectIndex      = i;
                hasClickedOnNode = true;
                break;
            }
        }

        if (e.button == 1 && !canMakeTransition)
        {
            if (e.type == EventType.MouseDown)
            {
                GenerateGenericMenu(hasClickedOnNode);

                e.Use();
            }
        }
        else if (e.button == 0 && e.type == EventType.MouseDown && canMakeTransition)
        {
            if (hasClickedOnNode && !m_nodes[selectIndex].Equals(m_selectedNode))
            {
                m_nodes[selectIndex].SetInput(m_selectedNode, m_mousePos);
            }

            canMakeTransition = false;
            m_selectedNode    = null;

            e.Use();
        }
        else if (e.button == 0 && e.type == EventType.MouseDown && !canMakeTransition)
        {
            if (hasClickedOnNode)
            {
                BaseNode nodeToChange = m_nodes[selectIndex];

                if (nodeToChange != null)
                {
                    m_selectedNode    = nodeToChange;
                    canMakeTransition = m_selectedNode.CanMakeTransition();
                }
            }
        }

        if (canMakeTransition && m_selectedNode != null)
        {
            Rect mouseRect = new Rect(e.mousePosition.x, e.mousePosition.y, 10, 10);

            DrawNodeTransitionLine(m_selectedNode.nodeRect, mouseRect);

            Repaint();
        }

        foreach (BaseNode node in m_nodes)
        {
            node.DrawTransitions();
        }

        BeginWindows();

        for (int i = 0; i < m_nodes.Count; ++i)
        {
            // Definig background color for the node
            GUI.color = (m_nodes[i] == m_entryPoint) ? Color.green : new Color(193, 123, 193);

            m_nodes[i].nodeRect = GUI.Window(i, m_nodes[i].nodeRect, DrawNodeWindow, m_nodes[i].nodeName);
        }

        EndWindows();

        GUI.color = new Color(193, 123, 193);
        if (GUILayout.Button("Export StateMachine"))
        {
            ExportJSON();
        }
    }