Esempio n. 1
0
        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();
        }