void OnGUI() { mDoRepaint = false; if (!Generator) return; if (!Generator.IsInitialized) { Generator.Initialize(); } Modules = new List<CGModule>(Generator.Modules.ToArray()); mModuleCount = Modules.Count; // store count to be checked in window GUI if (!Application.isPlaying && !Generator.IsInitialized) Repaint(); DrawToolbar(); Canvas.SetClientRect(0, GUILayoutUtility.GetLastRect().yMax,0,mStatusbarHeight); // Scrollable Canvas if (Canvas.Scroll.isAnimating) GUI.BeginScrollView(Canvas.ClientRect, Canvas.Scroll.value, Canvas.CanvasRect); else Canvas.Scroll.value = GUI.BeginScrollView(Canvas.ClientRect, Canvas.Scroll.value,Canvas.CanvasRect); // render background DTGUI.PushColor(Color.black.SkinAwareColor(true)); GUI.Box(Canvas.ViewPort, ""); DTGUI.PopColor(); #if CURVY_DEBUG GUILayout.BeginArea(Canvas.ViewPort); GUILayout.Label("Canvas ClientRect: " + Canvas.ClientRect); GUILayout.Label("Canvas Rect: " + Canvas.CanvasRect); GUILayout.Label("Canvas Scroll: " + Canvas.Scroll); GUILayout.Label("Canvas ViewPort: " + Canvas.ViewPort); GUILayout.Label("Mouse: " + EV.mousePosition); GUILayout.Label("IsWindowDrag: " + Canvas.IsWindowDrag); GUILayout.Label("IsSelectionDrag: " + Canvas.IsSelectionRectDrag); GUILayout.Label("IsLinkDrag: " + Canvas.IsLinkDrag); GUILayout.Label("IsCanvasDrag: " + Canvas.IsCanvasDrag); GUILayout.Label("IsModuleDrag: " + Canvas.IsModuleDrag); GUILayout.Label("MouseOverModule: " + Canvas.MouseOverModule); GUILayout.Label("MouseOverCanvas: " + Canvas.IsMouseOverCanvas); GUILayout.Label("SelectedLink: " + Sel.SelectedLink); GUILayout.Label("Selected Module: " + Sel.SelectedModule); GUILayout.EndArea(); #endif if (CurvyProject.Instance.CGShowHelp) { var r = new Rect(Canvas.ViewPort); r.x = r.width - 210; r.y = 10; r.width = 200; r.height = 190; GUILayout.BeginArea(r,GUI.skin.box); GUI.Label(new Rect(10,5,200,20),"<i><b>General</b></i>", DTStyles.HtmlLabel); GUI.Label(new Rect(20,25,50,20),"<b>RMB</b>", DTStyles.HtmlLabel); GUI.Label(new Rect(70,25,150,20),"Context Menu", DTStyles.HtmlLabel); GUI.Label(new Rect(20, 40, 150, 40), "<b>MMB/\nSpace</b>", DTStyles.HtmlLabel); GUI.Label(new Rect(70, 40, 150, 20), "Drag Canvas", DTStyles.HtmlLabel); GUI.Label(new Rect(20, 70, 150, 20), "<b>Alt</b>", DTStyles.HtmlLabel); GUI.Label(new Rect(70, 70, 150, 20), "Hold to snap to grid", DTStyles.HtmlLabel); GUI.Label(new Rect(20, 85, 150, 20), "<b>Del</b>", DTStyles.HtmlLabel); GUI.Label(new Rect(70, 85, 150, 20), "Delete selection", DTStyles.HtmlLabel); GUI.Label(new Rect(10,110,200,20),"<i><b>Add Modules</b></i>", DTStyles.HtmlLabel); GUI.Label(new Rect(20,130,180,40),"Hold <b>Ctrl</b> while releasing a\nlink to create & connect", DTStyles.HtmlLabel); GUI.Label(new Rect(20, 160, 180, 40), "Drag & Drop splines to create\nPath module", DTStyles.HtmlLabel); GUILayout.EndArea(); } DrawLinks(); // Init and early catch some events Canvas.BeginGUI(); DrawModules(); Canvas.EndGUI(); // Draw Selection DTGUI.PushBackgroundColor(Color.white);//.SkinAwareColor()); foreach (var mod in Sel.SelectedModules) GUI.Box(mod.Properties.Dimensions.ScaleBy(2), "", CurvyStyles.RoundRectangle); DTGUI.PopBackgroundColor(); // Keep dragged Module in view and handle multiselection move if (Canvas.IsModuleDrag && !DTGUI.IsLayout) { Vector2 delta=EV.delta; deltaAccu += EV.delta; if (EV.alt) { delta = deltaAccu.Snap(CurvyProject.Instance.CGGraphSnapping); if (delta == deltaAccu) delta = Vector2.zero; } if (Sel.SelectedModules.Count > 1) { foreach (CGModule mod in Sel.SelectedModules) { mod.Properties.Dimensions.position += delta; } if (!EV.alt || delta!=Vector2.zero) deltaAccu = Vector2.zero; } var m = (Canvas.MouseOverModule) ? Canvas.MouseOverModule : Sel.SelectedModule; if (m) GUI.ScrollTowards(m.Properties.Dimensions, 0.8f); } // Linking in progress? if (Canvas.IsLinkDrag) { var linkstyle = (Canvas.LinkDragFrom.OnRequestModule != null) ? CurvyStyles.RequestLineTexture : CurvyStyles.LineTexture; Handles.DrawBezier(Canvas.LinkDragFrom.Origin, EV.mousePosition, Canvas.LinkDragFrom.Origin + new Vector2(40, 0), EV.mousePosition + new Vector2(-40, 0), Color.white, linkstyle, 2); } GUI.EndScrollView(true); // Selection if (Canvas.IsSelectionRectDrag) DrawSelectionRect(); // Statusbar DrawStatusbar(); // IPE SyncIPE(); mDoRepaint=mDoRepaint || Canvas.IsCanvasDrag || Canvas.IsLinkDrag || Canvas.IsSelectionRectDrag || EV.type==EventType.MouseMove || mShowDebug.isAnimating || Canvas.Scroll.isAnimating; // Disable Title edit mode? if (editTitleModule != null) { if ((EV.isKey && (EV.keyCode == KeyCode.Escape || EV.keyCode == KeyCode.Return)) || Sel.SelectedModule != editTitleModule ) { editTitleModule = null; //GUI.FocusControl(""); mDoRepaint = true; } } if (mDoRepaint) Repaint(); }