private void InspectObject(AgentType agentType, string agentName, string agentFullName, FrameStatePool.PlanningState nodeState) { Nodes.Node node = null; if (!string.IsNullOrEmpty(agentFullName)) { int frame = AgentDataPool.CurrentFrame > -1 ? AgentDataPool.CurrentFrame : 0; string behaviorFilename = FrameStatePool.GetBehaviorFilename(agentFullName, frame); List <string> transitionIds = FrameStatePool.GetHighlightTransitionIds(agentFullName, frame, behaviorFilename); List <string> highlightNodeIds = FrameStatePool.GetHighlightNodeIds(agentFullName, frame, behaviorFilename); List <string> updatedNodeIds = FrameStatePool.GetUpdatedNodeIds(agentFullName, frame, behaviorFilename); Dictionary <string, FrameStatePool.NodeProfileInfos.ProfileInfo> profileInfos = FrameStatePool.GetProfileInfos(frame, behaviorFilename); BehaviorNode behavior = UIUtilities.ShowBehaviorTree(agentFullName, frame, transitionIds, highlightNodeIds, updatedNodeIds, HighlightBreakPoint.Instance, profileInfos); node = behavior as Nodes.Node; } _agentType = agentType; _agentName = agentName; Hide(); setText(agentType, agentName); if (nodeState != null) { foreach (string agentFullName1 in nodeState._agents.Keys) { string[] tokens = agentFullName1.Split('#'); Debug.Check(tokens.Length == 2); string at = tokens[0]; string an = tokens[1]; AgentType agentType1 = Plugin.GetAgentType(at); ParametersDock dock = findParametersDock(agentType1, an); dock.InspectObject(agentType1, agentFullName1); dock.setProperty(nodeState, agentFullName1); } } else if (AgentDataPool.CurrentFrame > -1 && !string.IsNullOrEmpty(agentName)) { ParametersDock dock = findParametersDock(agentType, agentName); dock.InspectObject(agentType, agentFullName); List <AgentDataPool.ValueMark> valueSet = AgentDataPool.GetValidValues(agentType, agentFullName, AgentDataPool.CurrentFrame); foreach (AgentDataPool.ValueMark value in valueSet) { dock.setProperty(null, value.Name, value.Value); } } lostAnyFocus(); Show(); }
private static void updateUI(int frame) { if (_timelineDock != null) { if (MessageQueue.IsConnected) { HighlightBreakPoint breakPoint = HighlightBreakPoint.Instance; string agentName = Plugin.DebugAgentInstance; if (breakPoint != null || agentName == Plugin.DebugAgentInstance) { List <string> transitionIds = null; List <string> highlightNodeIds = null; List <string> updatedNodeIds = null; Dictionary <string, FrameStatePool.NodeProfileInfos.ProfileInfo> profileInfos = null; if (!string.IsNullOrEmpty(agentName)) { string behaviorFilename = FrameStatePool.GetBehaviorFilename(agentName, frame); if (!string.IsNullOrEmpty(behaviorFilename)) { transitionIds = FrameStatePool.GetHighlightTransitionIds(agentName, frame, behaviorFilename); highlightNodeIds = FrameStatePool.GetHighlightNodeIds(agentName, frame, behaviorFilename); updatedNodeIds = FrameStatePool.GetUpdatedNodeIds(agentName, frame, behaviorFilename); profileInfos = FrameStatePool.GetProfileInfos(frame, behaviorFilename); } } _timelineDock.updateHighlights(agentName, frame, transitionIds, highlightNodeIds, updatedNodeIds, breakPoint, profileInfos); if (breakPoint != null) { string prompt = string.Format("Break: {0}->{1}[{2}]:{3}", breakPoint.BehaviorFilename, breakPoint.NodeType, breakPoint.NodeId, breakPoint.ActionName); if (breakPoint.ActionResult == "success" || breakPoint.ActionResult == "failure") { prompt += string.Format(" [{0}]", breakPoint.ActionResult); } if (_timelineDock != null) { _timelineDock.setUpdateMode(UpdateModes.Break, prompt); } } } } } }
//return true if breaked private bool update(int frame) { int _agenttype_index = 0; int _agentinstance_index = 0; ConsoleDock.SetMesssages(frame); if (Plugin.EditMode == EditModes.Connect) { if (Plugin.UpdateMode == UpdateModes.Continue) { SetTotalFrame(frame); AgentDataPool.CurrentFrame = AgentDataPool.TotalFrames; } updateUI(frame); } lock (_lockObject) { if (_agenttype_index != -1 && _agentinstance_index != -1) { //update could be entered multiple times for a 'frame' if there are multiple breakpoints in 'frame' if (_agenttype_index == 0 && _agentinstance_index == 0) { AgentDataPool.CurrentFrame = frame; // Global //foreach (Plugin.InstanceName_t agentType in Plugin.InstanceNames) //{ // updateParameters(agentType.agentType_, agentType.agentType_.AgentTypeName, frame); //} } this._break_prompt = ""; // Agent while (_agenttype_index < Plugin.AgentTypes.Count) { AgentType agentType = Plugin.AgentTypes[_agenttype_index]; if (!agentType.IsInherited) { List <string> instances = AgentInstancePool.GetInstances(agentType.ToString()); while (_agentinstance_index < instances.Count) { string instance = instances[_agentinstance_index]; _agentinstance_index++; // Parameters updateParameters(agentType, instance, frame); if (Plugin.EditMode == EditModes.Analyze) { string agentName = string.Format("{0}#{1}", agentType, instance); string behaviorFilename = FrameStatePool.GetBehaviorFilename(agentName, frame); if (_lastBreakFrame != frame) { _lastBreakPointIndex = 0; } // Breakpoint List <FrameStatePool.FrameState.Action> actions = FrameStatePool.GetActions(agentName, frame, behaviorFilename); HighlightBreakPoint.Instance = checkBreakpoint(behaviorFilename, actions, ref _lastBreakPointIndex); if (HighlightBreakPoint.Instance != null || agentName == Plugin.DebugAgentInstance) { // Highlights List <string> transitionIds = FrameStatePool.GetHighlightTransitionIds(agentName, frame, behaviorFilename); List <string> highlightNodeIds = FrameStatePool.GetHighlightNodeIds(agentName, frame, behaviorFilename); List <string> updatedNodeIds = FrameStatePool.GetUpdatedNodeIds(agentName, frame, behaviorFilename); Dictionary <string, FrameStatePool.NodeProfileInfos.ProfileInfo> profileInfos = FrameStatePool.GetProfileInfos(frame, behaviorFilename); updateHighlights(agentName, frame, transitionIds, highlightNodeIds, updatedNodeIds, HighlightBreakPoint.Instance, profileInfos); } // Return if there is breakpoint breaked. if (HighlightBreakPoint.Instance != null) { _lastBreakFrame = frame; return(true); } } } } _agenttype_index++; _agentinstance_index = 0; } _agenttype_index = -1; _agentinstance_index = -1; //after checking breakpoints, to check applog _log_index = 0; } } lock (_lockObject) { if (_log_index != -1) { if (Plugin.EditMode == EditModes.Analyze) { bool bCheckLog = (this.comboBoxLogFilter.Text != ""); if (bCheckLog) { if (Plugin.EditMode == EditModes.Analyze) { Debug.Check(true); } else if (MessageQueue.IsConnected) { Debug.Check(true); } else { bCheckLog = false; } } if (bCheckLog) { List <string> logs = FrameStatePool.GetAppLog(frame, this.comboBoxLogFilter.Text); if (logs != null && _log_index < logs.Count) { this._break_prompt = logs[_log_index++]; return(true); } } } _log_index = -1; } } return(false); }