void OnGUI() { Event e = Event.current; mousePos = e.mousePosition; DrawBackground(); if (data.n == null) { data.n = new List <BaseNode>(); Vector2 pos = new Vector2(10, position.height / 2 - 30); MessageNode o = ScriptableObject.CreateInstance <MessageNode>(); o.init(pos, 180, "START"); AssetDatabase.AddObjectToAsset(o, data); //AssetDatabase.CreateAsset(o, path + o.id + ".asset"); } switch (e.button) { case 0: { if (e.type == EventType.MouseDown && makeTransitionMode) { if (GetWinClicked()) { if (!data.n[selectedIndex].Equals(selectedIndex)) { BaseNode n = data.n[selectedIndex]; n.SetInput((BaseNode)selectedNode, mousePos); if (GetWinClicked() && n.rootNode != null) { n.rootNode.SetAttributeNode(lastTRect, (BaseNode)n); } makeTransitionMode = false; selectedNode = null; } } else { makeTransitionMode = false; selectedNode = null; } e.Use(); } } break; case 1: { if (e.type == EventType.MouseDown && !makeTransitionMode) { GenericMenu menu = new GenericMenu(); if (!GetWinClicked()) { menu.AddItem(new GUIContent("Main Menu"), false, ContextCallback, "mainmenuNode"); menu.AddItem(new GUIContent("Single Player"), false, ContextCallback, "singleplayerNode"); menu.AddItem(new GUIContent("Quit Confirm"), false, ContextCallback, "quitconfirmNode"); } else { selectedNode = data.n[selectedIndex]; lastTRect = selectedNode.ClickedOnRect(new Vector2(mousePos.x, mousePos.y)); if (lastTRect != selectedNode.winRect || selectedNode.type == BaseNode.nodeType.Message) { menu.AddItem(new GUIContent("Make Transition"), false, ContextCallback, "makeTransition"); } if (selectedIndex != 0) { menu.AddItem(new GUIContent("Delete Node"), false, ContextCallback, "deleteNode"); } } menu.ShowAsContext(); e.Use(); } } break; case 2: { if (e.type == EventType.mouseDown) { initMousePos = e.mousePosition; } else if (e.type == EventType.mouseDrag) { Vector2 deltaMousePos = e.mousePosition - initMousePos; for (int i = 0; i < data.n.Count; i++) { if (data.n[i] != null) { data.n[i].winRect.x += deltaMousePos.x; data.n[i].winRect.y += deltaMousePos.y; } } initMousePos = e.mousePosition; Repaint(); } } break; } if (selectedNode != null && makeTransitionMode) { Rect mouseRect = new Rect(e.mousePosition.x, e.mousePosition.y, 10, 10); DrawNodeCurve(lastTRect, mouseRect, connectionColors[0]); } BeginWindows(); for (int i = 0; i < data.n.Count; i++) { BaseNode w = data.n[i]; if (w != null) { string title = (w.type == BaseNode.nodeType.Message) ? "" : w.winTitle; data.n[i].winRect = GUI.Window(i, w.winRect, DrawNodeWindow, title); } } EndWindows(); foreach (BaseNode n in data.n) { if (n != null) { n.DrawCurves(); } } Repaint(); }