Ejemplo n.º 1
0
		//Show the target blackboard window
		static Rect ShowBlackboardGUIPanel(Graph graph, Vector2 canvasMousePos){
			var blackboardPanel = default(Rect);
			if (graph.blackboard == null){
				return blackboardPanel;
			}

			blackboardPanel.xMin = screenWidth - NCPrefs.blackboardPanelWidth;
			blackboardPanel.yMin = 30;
			blackboardPanel.xMax = screenWidth - 20;
			blackboardPanel.height = blackboardPanelHeight;
			
			var resizeRect = Rect.MinMaxRect(blackboardPanel.xMin-2, blackboardPanel.yMin, blackboardPanel.xMin+2, blackboardPanel.yMax);
			EditorGUIUtility.AddCursorRect(resizeRect, MouseCursor.ResizeHorizontal);
			if (e.type == EventType.MouseDown && resizeRect.Contains(e.mousePosition)){isResizingBlackboardPanel = true; e.Use();}
			if (isResizingBlackboardPanel && e.type == EventType.Layout){ NCPrefs.blackboardPanelWidth -= e.delta.x; }
			if (e.rawType == EventType.MouseUp){ isResizingBlackboardPanel = false; }

			var headerRect = new Rect(blackboardPanel.x, blackboardPanel.y, blackboardPanel.width, 30);
			EditorGUIUtility.AddCursorRect(headerRect, MouseCursor.Link);
			if (GUI.Button(headerRect, string.Empty, CanvasStyles.button)){
				NCPrefs.showBlackboard = !NCPrefs.showBlackboard;
			}

			GUI.Box(blackboardPanel, string.Empty, CanvasStyles.windowShadow);
			var title = graph.blackboard == graph.localBlackboard? string.Format("Local {0} Variables", graph.GetType().Name) : "Variables";
			if (NCPrefs.showBlackboard){

				var viewRect = new Rect(blackboardPanel.x, blackboardPanel.y, blackboardPanel.width + 16, screenHeight - blackboardPanel.y - 30);
				var r = new Rect(blackboardPanel.x - 3, blackboardPanel.y, blackboardPanel.width, blackboardPanel.height);
				blackboardPanelScrollPos = GUI.BeginScrollView(viewRect, blackboardPanelScrollPos, r);

				GUILayout.BeginArea(blackboardPanel, title, CanvasStyles.editorPanel);
				GUILayout.Space(5);

				BlackboardEditor.ShowVariables(graph.blackboard, graph.blackboard == graph.localBlackboard? graph : graph.blackboard as Object );
				EditorUtils.EndOfInspector();
				if (e.type == EventType.Repaint){
					blackboardPanelHeight = GUILayoutUtility.GetLastRect().yMax + 5;
				}
				GUILayout.EndArea();
				GUI.EndScrollView();

			} else {

				blackboardPanelHeight = 55;
				GUILayout.BeginArea(blackboardPanel, title, CanvasStyles.editorPanel);
				GUI.color = new Color(1,1,1,0.2f);
				if (GUILayout.Button("...", CanvasStyles.button)){
					NCPrefs.showBlackboard = true;
				}
				GUILayout.EndArea();
				GUI.color = Color.white;
			}
			
			if (graph.canAcceptVariableDrops && BlackboardEditor.pickedVariable != null && BlackboardEditor.pickedVariableBlackboard == graph.blackboard){
				GUI.Label(new Rect(e.mousePosition.x + 15, e.mousePosition.y, 100, 18), "Drop Variable", CanvasStyles.label);
				if (e.type == EventType.MouseUp && !blackboardPanel.Contains(e.mousePosition)){
					graph.CallbackOnVariableDropInGraph(BlackboardEditor.pickedVariable, canvasMousePos);
					BlackboardEditor.ResetPick();
				}
			}

			return blackboardPanel;
		}
        //blackboard inspector panel
        static Rect ShowBlackboardGUIPanel(Graph graph, Vector2 canvasMousePos)
        {
            var blackboardPanel = default(Rect);

            if (graph.blackboard == null)
            {
                blackboardPanelHeight = 0;
                return(blackboardPanel);
            }

            GUI.BeginClip(canvasRect);

            var scrollWidth  = blackboardPanelNeedsScroller ? 16 : 0;
            var posX         = scrollWidth + 5;
            var posY         = PANELS_Y;
            var headerHeight = 30;

            blackboardPanel.x      = canvasRect.xMax - Prefs.blackboardPanelWidth - posX - canvasRect.x;
            blackboardPanel.y      = posY;
            blackboardPanel.width  = Prefs.blackboardPanelWidth;
            blackboardPanel.height = blackboardPanelHeight;

            var resizeRect = Rect.MinMaxRect(blackboardPanel.xMin - 2, blackboardPanel.yMin, blackboardPanel.xMin + 2, blackboardPanel.yMax);

            EditorGUIUtility.AddCursorRect(resizeRect, MouseCursor.ResizeHorizontal);
            if (e.type == EventType.MouseDown && resizeRect.Contains(e.mousePosition))
            {
                isResizingBlackboardPanel = true; e.Use();
            }
            if (isResizingBlackboardPanel && e.type == EventType.Layout)
            {
                Prefs.blackboardPanelWidth -= e.delta.x;
            }
            if (e.rawType == EventType.MouseUp)
            {
                isResizingBlackboardPanel = false;
            }

            var headerRect = new Rect(blackboardPanel.x, blackboardPanel.y, blackboardPanel.width, 30);

            EditorGUIUtility.AddCursorRect(headerRect, MouseCursor.Link);
            if (GUI.Button(headerRect, string.Empty, GUIStyle.none))
            {
                Prefs.showBlackboard = !Prefs.showBlackboard;
            }

            var groupRect = blackboardPanel.ExpandBy(0, 0, scrollWidth, 0);

            GUI.Box(groupRect, string.Empty, StyleSheet.windowShadow);
            GUI.Box(groupRect, "Blackboard Variables", StyleSheet.editorPanel);

            GUI.BeginGroup(groupRect);
            if (Prefs.showBlackboard)
            {
                var contentRect = Rect.MinMaxRect(2, headerHeight, blackboardPanel.width - 2, blackboardPanel.height);
                var position    = Rect.MinMaxRect(0, headerHeight, blackboardPanel.width + scrollWidth, Mathf.Min(blackboardPanel.height, canvasRect.height - posX) + scrollWidth);
                var viewRect    = Rect.MinMaxRect(0, headerHeight, blackboardPanel.width, blackboardPanel.height);
                blackboardPanelNeedsScroller = position.height < viewRect.height;
                blackboardPanelScrollPos     = GUI.BeginScrollView(position, blackboardPanelScrollPos, viewRect, false, false);
                GUILayout.BeginArea(contentRect);

                BlackboardEditor.ShowVariables(graph.blackboard, graph);
                EditorUtils.EndOfInspector();
                if (e.type == EventType.Repaint)
                {
                    blackboardPanelHeight = GUILayoutUtility.GetLastRect().yMax + headerHeight + 5;
                }

                GUILayout.EndArea();
                GUI.EndScrollView();
            }
            else
            {
                blackboardPanelHeight = 55;
                var contentRect = Rect.MinMaxRect(0, headerHeight, blackboardPanel.width, blackboardPanel.height);
                EditorGUIUtility.AddCursorRect(contentRect, MouseCursor.Link);
                if (GUI.Button(contentRect, "<b>...</b>", Styles.centerLabel))
                {
                    Prefs.showBlackboard = true;
                }
            }

            GUI.EndGroup();
            GUI.EndClip();

            blackboardPanel.x += canvasRect.x;
            blackboardPanel.y += canvasRect.y;

            if (graph.canAcceptVariableDrops && BlackboardEditor.pickedVariable != null && BlackboardEditor.pickedVariableBlackboard.IsPartOf(graph.blackboard))
            {
                GUI.Label(new Rect(e.mousePosition.x + 15, e.mousePosition.y, 100, 18), "Drop Variable", StyleSheet.labelOnCanvas);
                if (e.type == EventType.MouseUp && !blackboardPanel.Contains(e.mousePosition))
                {
                    graph.CallbackOnVariableDropInGraph(BlackboardEditor.pickedVariableBlackboard, BlackboardEditor.pickedVariable, canvasMousePos);
                    BlackboardEditor.ResetPick();
                }
            }

            return(blackboardPanel);
        }