void SelectPlan() { var activeGameObject = Selection.activeGameObject; if (EditorApplication.isPlayingOrWillChangePlaymode) { if (!activeGameObject) { activeGameObject = FindPlannerObject(); } if (activeGameObject) { if (!GetPlanExecutor(activeGameObject, out var executor)) { activeGameObject = FindPlannerObject(); GetPlanExecutor(activeGameObject, out executor); } if (executor != null) { m_PlanExecutor = executor; m_Visualizer = new PlanVisualizer(m_PlanExecutor); } } } else { m_Visualizer = null; m_PlanExecutor = null; } }
void DrawInspector(Rect inspectorArea, IPlanVisualizer visualizer) { EditorGUI.DrawRect(inspectorArea, s_InspectorBackground); inspectorArea.x += s_BorderSize; inspectorArea.width -= s_BorderSize * 2; inspectorArea.y += s_BorderSize; inspectorArea.height -= s_BorderSize * 2; GUILayout.BeginArea(inspectorArea); GUILayout.BeginVertical(); if (m_GraphOnlyRenderer.SelectedNode != null) { var node = m_GraphOnlyRenderer.SelectedNode; using (var scrollView = new EditorGUILayout.ScrollViewScope(m_ScrollPos)) { m_ScrollPos = scrollView.scrollPosition; if (node is BaseNode baseNode && !baseNode.ExpansionNode) { baseNode.DrawInspector(visualizer); } } } else { GUILayout.Label("Click on a node\nto display its details."); } GUILayout.FlexibleSpace(); GUILayout.EndVertical(); GUILayout.EndArea(); }
public override void DrawInspector(IPlanVisualizer visualizer) { if (m_Plan.TryGetStateInfo(StateKey, out var stateInfo)) { base.DrawInspector(visualizer); EditorGUILayout.LabelField("Estimated Total Reward", $"{stateInfo.CumulativeRewardEstimate}", EditorStyles.whiteLabel); EditorGUILayout.LabelField("Subplan Is Complete", $"{stateInfo.SubplanIsComplete}", EditorStyles.whiteLabel); if (m_Plan.TryGetOptimalAction(StateKey, out var optimalActionKey)) { EditorGUILayout.LabelField("Best Action", m_PlanExecutor.GetActionName(optimalActionKey), EditorStyles.whiteLabel); } if (string.IsNullOrEmpty(m_CachedStateString)) { m_CachedStateString = m_Plan.GetStateData(StateKey)?.ToString(); } if (string.IsNullOrEmpty(m_CachedStateString)) // State may no longer exist but be selected as an override. { return; } if (!m_RootState || active) { s_ActionsGUIFoldout = EditorStyleHelper.DrawSubHeader(new GUIContent("Actions"), s_ActionsGUIFoldout); if (s_ActionsGUIFoldout) { using (new EditorGUI.IndentLevelScope()) { m_Plan.GetActions(StateKey, s_Actions); SortSuccessorActions(s_Actions, ref s_Successors, out _, out _); for (var i = 0; i < s_Successors.Count; i++) { var successor = s_Successors[i]; var actionKey = successor.ActionKey; if (m_Plan.TryGetActionInfo(StateKey, actionKey, out var actionInfo)) { var rect = EditorGUILayout.BeginHorizontal(); var stateActionKey = (StateKey, actionKey); bool toggle = i < visualizer.MaxChildrenNodes || visualizer.ForcedExpandedNodes.Contains(stateActionKey); if (i < visualizer.MaxChildrenNodes) { GUI.enabled = false; } EditorGUI.BeginChangeCheck(); toggle = GUI.Toggle(rect, toggle, string.Empty); if (EditorGUI.EndChangeCheck()) { if (toggle) { visualizer.ForcedExpandedNodes.Add(stateActionKey); } else { visualizer.ForcedExpandedNodes.Remove(stateActionKey); } } GUI.enabled = true; EditorGUILayout.LabelField(new GUIContent(m_PlanExecutor.GetActionName(actionKey)), new GUIContent($"{actionInfo.CumulativeRewardEstimate.Average:0.000}", $"{actionInfo.CumulativeRewardEstimate}"), EditorStyles.whiteLabel); EditorGUILayout.EndHorizontal(); using (new EditorGUI.IndentLevelScope()) { var parameters = m_PlanExecutor.GetActionParametersInfo(StateKey, actionKey); foreach (var param in parameters) { EditorGUILayout.LabelField(new GUIContent(param.ParameterName), new GUIContent(param.TraitObjectName, $"Object: {param.TraitObjectId}"), EditorStyles.whiteMiniLabel); } } } } } } } EditorGUILayout.Space(); s_StateGUIFoldout = EditorStyleHelper.DrawSubHeader(new GUIContent("State information"), s_StateGUIFoldout); var displayString = m_CachedStateString; if (s_StateGUIFoldout) { using (new EditorGUI.IndentLevelScope()) { EditorGUI.BeginChangeCheck(); s_StateFilter = EditorGUILayout.DelayedTextField(s_StateFilter); if (EditorGUI.EndChangeCheck()) { m_CachedFilterString = string.Empty; } if (!string.IsNullOrEmpty(s_StateFilter)) { if (string.IsNullOrEmpty(m_CachedFilterString)) { var stateStringSplit = m_CachedStateString.Split('\n'); var linesToInclude = new SortedSet <int>(); var lastEmptyLine = 0; for (var i = 0; i < stateStringSplit.Length; i++) { var stateStringLine = stateStringSplit[i]; if (string.IsNullOrWhiteSpace(stateStringLine)) { lastEmptyLine = i; } else if (stateStringLine.IndexOf(s_StateFilter, StringComparison.OrdinalIgnoreCase) >= 0) { var nextEmptyLine = i; while (!string.IsNullOrWhiteSpace(stateStringSplit[nextEmptyLine])) { nextEmptyLine++; if (nextEmptyLine == stateStringSplit.Length - 1) { break; } } for (var j = lastEmptyLine; j < nextEmptyLine; j++) { linesToInclude.Add(j); } } } var sb = new StringBuilder(); foreach (var line in linesToInclude) { sb.AppendLine(stateStringSplit[line]); } m_CachedFilterString = sb.ToString(); } displayString = m_CachedFilterString; } EditorGUILayout.LabelField(displayString, EditorStyleHelper.inspectorStyleLabel); } } if (GUILayout.Button("Copy State", EditorStyles.miniButton)) { displayString.CopyToClipboard(); } } }
public virtual void DrawInspector(IPlanVisualizer visualizer) { GUILayout.Label(Label, EditorStyles.whiteLargeLabel); EditorGUILayout.Space(); }
public void Draw(IGraphLayout graphLayout, Rect totalDrawingArea, GraphSettings graphSettings, IPlanVisualizer visualizer) { var drawingArea = new Rect(totalDrawingArea); if (graphSettings.showInspector) { var inspectorArea = new Rect(totalDrawingArea) { width = Mathf.Max(s_InspectorFixedWidth, drawingArea.width * 0.25f) + s_BorderSize * 2 }; inspectorArea.x = drawingArea.xMax - inspectorArea.width; drawingArea.width -= inspectorArea.width; DrawInspector(inspectorArea, visualizer); } m_GraphOnlySettings.maximumNormalizedNodeSize = graphSettings.maximumNormalizedNodeSize; m_GraphOnlySettings.maximumNodeSizeInPixels = graphSettings.maximumNodeSizeInPixels; m_GraphOnlySettings.aspectRatio = graphSettings.aspectRatio; m_GraphOnlyRenderer.Draw(graphLayout, drawingArea, m_GraphOnlySettings); }