private void LogPlanEnd(Agent a, Task root) { #if !BEHAVIAC_RELEASE if (Config.IsLoggingOrSocketing) { string agentClassName = a.GetClassTypeName(); string agentInstanceName = a.GetName(); agentClassName = agentClassName.Replace(".", "::"); agentInstanceName = agentInstanceName.Replace(".", "::"); string ni = BehaviorTask.GetTickInfo(a, root, null); string buffer = string.Format("[plan_end]{0}#{1} {2}\n", agentClassName, agentInstanceName, ni); LogManager.Log(buffer); } #endif }
//property public static void Log(Agent pAgent, string typeName, string varName, string value) { #if !BEHAVIAC_RELEASE if (Config.IsLoggingOrSocketing) { //BEHAVIAC_PROFILE("LogManager.LogVar"); if (!System.Object.ReferenceEquals(pAgent, null) && pAgent.IsMasked()) { string agentClassName = pAgent.GetClassTypeName(); string agentInstanceName = pAgent.GetName(); agentClassName = agentClassName.Replace(".", "::"); agentInstanceName = agentInstanceName.Replace(".", "::"); //[property]WorldState.World WorldState.time.276854364 //[property]Ship.Ship_1 GameObject.HP.100 //[property]Ship.Ship_1 GameObject.age.0 //[property]Ship.Ship_1 GameObject.speed.0.000000 string buffer; bool bIsPar = Utils.IsParVar(varName); if (bIsPar) { string tn = typeName; //filter out "signed " tn.Replace("signed ", ""); buffer = string.Format("[property]{0}#{1} {2} {3}->{4}\n", agentClassName, agentInstanceName, tn, varName, value); } else { buffer = string.Format("[property]{0}#{1} {2}->{3}\n", agentClassName, agentInstanceName, varName, value); } Output(pAgent, buffer); SocketUtils.SendText(buffer); } } #endif }
private void LogPlanBegin(Agent a, Task root) { #if !BEHAVIAC_RELEASE if (Config.IsLoggingOrSocketing) { string agentClassName = a.GetClassTypeName(); string agentInstanceName = a.GetName(); agentClassName = agentClassName.Replace(".", "::"); agentInstanceName = agentInstanceName.Replace(".", "::"); string ni = BehaviorTask.GetTickInfo(a, root, "plan"); int count = Workspace.Instance.GetActionCount(ni) + 1; string buffer = string.Format("[plan_begin]{0}#{1} {2} {3}\n", agentClassName, agentInstanceName, ni, count); LogManager.Log(buffer); a.Variables.Log(a, true); } #endif }
public EBTStatus exec(Agent pAgent, EBTStatus childStatus) { #if !BEHAVIAC_RELEASE Debug.Check(this.m_node == null || this.m_node.IsValid(pAgent, this), string.Format("Agent In BT:{0} while the Agent used for: {1}", this.m_node.GetAgentType(), pAgent.GetClassTypeName())); #endif//#if !BEHAVIAC_RELEASE bool bEnterResult = false; if (this.m_status == EBTStatus.BT_RUNNING) { bEnterResult = true; } else { //reset it to invalid when it was success/failure this.m_status = EBTStatus.BT_INVALID; bEnterResult = this.onenter_action(pAgent); } if (bEnterResult) { #if !BEHAVIAC_RELEASE if (Config.IsLoggingOrSocketing) { string btStr = BehaviorTask.GetTickInfo(pAgent, this, "update"); //empty btStr is for internal BehaviorTreeTask if (!string.IsNullOrEmpty(btStr)) { LogManager.Instance.Log(pAgent, btStr, EActionResult.EAR_none, LogMode.ELM_tick); } } #endif bool bValid = this.CheckParentUpdatePreconditions(pAgent); if (bValid) { this.m_status = this.update_current(pAgent, childStatus); } else { this.m_status = EBTStatus.BT_FAILURE; if (this.GetCurrentTask() != null) { this.update_current(pAgent, EBTStatus.BT_FAILURE); } } if (this.m_status != EBTStatus.BT_RUNNING) { //clear it this.onexit_action(pAgent, this.m_status); //this node is possibly ticked by its parent or by the topBranch who records it as currrent node //so, we can't here reset the topBranch's current node } else { BranchTask tree = this.GetTopManageBranchTask(); if (tree != null) { tree.SetCurrentTask(this); } } } else { this.m_status = EBTStatus.BT_FAILURE; } return(this.m_status); }
//action public void Log(Agent pAgent, string btMsg, EActionResult actionResult, LogMode mode) { #if !BEHAVIAC_RELEASE if (Config.IsLoggingOrSocketing) { //BEHAVIAC_PROFILE("LogManager.Instance.LogAction"); if (!System.Object.ReferenceEquals(pAgent, null) && pAgent.IsMasked()) { if (!string.IsNullOrEmpty(btMsg)) { string agentClassName = pAgent.GetClassTypeName(); agentClassName = agentClassName.Replace(".", "::"); string agentName = agentClassName; agentName += "#"; agentName += pAgent.GetName(); string actionResultStr = ""; if (actionResult == EActionResult.EAR_success) { actionResultStr = "success"; } else if (actionResult == EActionResult.EAR_failure) { actionResultStr = "failure"; } else if (actionResult == EActionResult.EAR_all) { actionResultStr = "all"; } else { //although actionResult can be EAR_none or EAR_all, but, as this is the real result of an action //it can only be success or failure //when it is EAR_none, it is for update if (actionResult == behaviac.EActionResult.EAR_none && mode == behaviac.LogMode.ELM_tick) { actionResultStr = "running"; } else { actionResultStr = "none"; } } if (mode == LogMode.ELM_continue) { //[continue]Ship.Ship_1 ships\suicide.xml.BehaviorTreeTask[0]:enter [all/success/failure] [1] int count = Workspace.Instance.GetActionCount(btMsg); Debug.Check(count > 0); string buffer = string.Format("[continue]{0} {1} [{2}] [{3}]\n", agentName, btMsg, actionResultStr, count); Output(pAgent, buffer); } else if (mode == LogMode.ELM_breaked) { //[breaked]Ship.Ship_1 ships\suicide.xml.BehaviorTreeTask[0]:enter [all/success/failure] [1] int count = Workspace.Instance.GetActionCount(btMsg); Debug.Check(count > 0); string buffer = string.Format("[breaked]{0} {1} [{2}] [{3}]\n", agentName, btMsg, actionResultStr, count); Output(pAgent, buffer); } else if (mode == LogMode.ELM_tick) { //[tick]Ship.Ship_1 ships\suicide.xml.BehaviorTreeTask[0]:enter [all/success/failure] [1] //[tick]Ship.Ship_1 ships\suicide.xml.BehaviorTreeTask[0]:update [1] //[tick]Ship.Ship_1 ships\suicide.xml.Selector[1]:enter [all/success/failure] [1] //[tick]Ship.Ship_1 ships\suicide.xml.Selector[1]:update [1] int count = Workspace.Instance.UpdateActionCount(btMsg); string buffer = string.Format("[tick]{0} {1} [{2}] [{3}]\n", agentName, btMsg, actionResultStr, count); Output(pAgent, buffer); } else if (mode == LogMode.ELM_jump) { string buffer = string.Format("[jump]{0} {1}\n", agentName, btMsg); Output(pAgent, buffer); } else if (mode == LogMode.ELM_return) { string buffer = string.Format("[return]{0} {1}\n", agentName, btMsg); Output(pAgent, buffer); } else { Debug.Check(false); } } } } #endif }
//property public void Log(Agent pAgent, string typeName, string varName, string value) { #if !BEHAVIAC_RELEASE if (Config.IsLoggingOrSocketing) { //BEHAVIAC_PROFILE("LogManager.Instance.LogVar"); if (!System.Object.ReferenceEquals(pAgent, null) && pAgent.IsMasked()) { string agentClassName = pAgent.GetClassTypeName(); string agentInstanceName = pAgent.GetName(); agentClassName = agentClassName.Replace(".", "::"); agentInstanceName = agentInstanceName.Replace(".", "::"); //[property]WorldState.World WorldState.time.276854364 //[property]Ship.Ship_1 GameObject.HP.100 //[property]Ship.Ship_1 GameObject.age.0 //[property]Ship.Ship_1 GameObject.speed.0.000000 string buffer; buffer = string.Format("[property]{0}#{1} {2}->{3}\n", agentClassName, agentInstanceName, varName, value); bool bOutput = true; if (pAgent.PlanningTop >= 0) { string agentFullName = string.Format("{0}#{1}", agentClassName, agentInstanceName); Dictionary <string, string> p = null; if (!_planningLoggedProperties.ContainsKey(agentFullName)) { p = new Dictionary <string, string>(); _planningLoggedProperties.Add(agentFullName, p); } else { p = _planningLoggedProperties[agentFullName]; } if (p.ContainsKey(varName)) { if (p[varName] == value) { bOutput = false; } else { p[varName] = value; } } else { p.Add(varName, value); } } if (bOutput) { Output(pAgent, buffer); } } } #endif }
public EBTStatus exec(Agent pAgent) { #if !BEHAVIAC_RELEASE Debug.Check(this.m_node == null || this.m_node.IsValid(pAgent, this), string.Format("Agent In BT:{0} while the Agent used for: {1}", this.m_node.GetAgentType(), pAgent.GetClassTypeName())); #endif//#if !BEHAVIAC_RELEASE bool bEnterResult = false; if (this.m_status == EBTStatus.BT_RUNNING) { bEnterResult = true; } else { //reset it to invalid when it was success/failure this.m_status = EBTStatus.BT_INVALID; bEnterResult = this.onenter_action(pAgent); //for continue ticking task, to set it as the cached current task bool bIsContinueTicking = this.isContinueTicking(); if (bIsContinueTicking) { BranchTask pBranch = this.GetParentBranch(); if (pBranch != null && pBranch != this) { //if 'this' is a tree, don't set it into it parent's current node Debug.Check(!(this is BehaviorTreeTask)); pBranch.SetCurrentTask(this); } } } if (bEnterResult) { #if !BEHAVIAC_RELEASE if (Config.IsLoggingOrSocketing) { string btStr = BehaviorTask.GetTickInfo(pAgent, this, "update"); //empty btStr is for internal BehaviorTreeTask if (!string.IsNullOrEmpty(btStr)) { LogManager.Log(pAgent, btStr, EActionResult.EAR_none, LogMode.ELM_tick); } } #endif EBTStatus returnStatus = this.GetReturnStatus(); if (returnStatus == EBTStatus.BT_INVALID) { this.m_status = this.update(pAgent, EBTStatus.BT_RUNNING); } else { this.m_status = returnStatus; } if (this.m_status != EBTStatus.BT_RUNNING) { //clear it bool bIsContinueTicking = this.isContinueTicking(); if (bIsContinueTicking) { BranchTask pBranch = this.GetParentBranch(); if (pBranch != null && pBranch != this) { //if 'this' is a tree, don't set it into it parent's current node Debug.Check(!(this is BehaviorTreeTask)); pBranch.SetCurrentTask(null); } } this.onexit_action(pAgent, this.m_status); //this node is possibly ticked by its parent or by the topBranch who records it as currrent node //so, we can't here reset the topBranch's current node } } else { this.m_status = EBTStatus.BT_FAILURE; } EBTStatus currentStatus = this.m_status; if (this.m_status != EBTStatus.BT_RUNNING && this.NeedRestart()) { //reset it to invalid when it needs restarting //don't need to reset the sub tree this.m_status = EBTStatus.BT_INVALID; this.SetReturnStatus(EBTStatus.BT_INVALID); } return(currentStatus); }