private void DrawSelf() { string label = string.IsNullOrEmpty(m_node.Name) ? m_node.Title : m_node.Name; BTGraphNodeStyle nodeStyle = BTEditorStyle.GetNodeStyle(m_node); Vector2 nodeSize = BTEditorStyle.GetNodeSize(m_node); Rect position = new Rect(NodePositon + BTEditorCanvas.Current.Position, nodeSize); BehaviourNodeStatus status = BTEditorCanvas.Current.IsDebuging ? m_node.Status : BehaviourNodeStatus.None; EditorGUI.LabelField(position, label, nodeStyle.GetStyle(status, m_isSelected)); if (m_node.Breakpoint != Breakpoint.None) { Rect imgPosition; if (m_node is NodeGroup) { imgPosition = new Rect(position.x + 2, position.y + 2, 12, 12); } else { imgPosition = new Rect(position.x - 14, position.y + 2, 12, 12); } GUI.DrawTexture(imgPosition, BTEditorStyle.Breakpoint); } }
protected override BehaviourNodeStatus OnExecute(AIAgent agent) { BehaviourNodeStatus status = BehaviourNodeStatus.Success; if (m_child != null && m_repeatCount >= 0) { if (m_currentIteration <= m_repeatCount) { if (m_child.Status != BehaviourNodeStatus.None && m_child.Status != BehaviourNodeStatus.Running) { m_child.OnReset(); } status = m_child.Run(agent); if (status == BehaviourNodeStatus.Success) { m_currentIteration++; if (m_currentIteration <= m_repeatCount) { status = BehaviourNodeStatus.Running; } } } } return(status); }
public BehaviourNode() { m_breakpoint = Breakpoint.None; m_status = BehaviourNodeStatus.None; m_constraints = new List <Constraint>(); m_services = new List <Service>(); }
public BehaviourNodeStatus Run(AIAgent agent) { if (m_status != BehaviourNodeStatus.Running) { OnEnter(agent); foreach (var service in m_services) { service.OnEnter(agent); } #if UNITY_EDITOR if (agent.DebugMode) { if (m_breakpoint.Has(Breakpoint.OnEnter)) { Debug.Break(); } } #endif } if (CheckConstraints(agent)) { m_status = OnExecute(agent); foreach (var service in m_services) { service.OnExecute(agent); } } else { m_status = BehaviourNodeStatus.Failure; } if (m_status != BehaviourNodeStatus.Running) { OnExit(agent); foreach (var service in m_services) { service.OnExit(agent); } #if UNITY_EDITOR if (agent.DebugMode) { if ((m_status == BehaviourNodeStatus.Success && m_breakpoint.Has(Breakpoint.OnSuccess)) || (m_status == BehaviourNodeStatus.Failure && m_breakpoint.Has(Breakpoint.OnFailure)) || m_breakpoint.Has(Breakpoint.OnExit)) { Debug.Break(); } } #endif } return(m_status); }
protected override BehaviourNodeStatus OnExecute(AIAgent agent) { BehaviourNodeStatus status = BehaviourNodeStatus.Failure; if (m_child != null && m_numberOfExecutions < m_maxExecutions) { status = m_child.Run(agent); } return(status); }
protected override BehaviourNodeStatus OnExecute(AIAgent agent) { BehaviourNodeStatus status = BehaviourNodeStatus.Success; if (m_child != null) { status = m_child.Run(agent); if (status != BehaviourNodeStatus.Running) { status = BehaviourNodeStatus.Success; } } return(status); }
public GUIStyle GetStyle(BehaviourNodeStatus status, bool isSelected) { switch (status) { case BehaviourNodeStatus.Failure: return(!isSelected ? m_failNormalStyle : m_failSelectedStyle); case BehaviourNodeStatus.Running: return(!isSelected ? m_runninfNormalStyle : m_runningSelectedStyle); case BehaviourNodeStatus.Success: return(!isSelected ? m_successNormalStyle : m_successSelectedStyle); } return(!isSelected ? m_standardNormalStyle : m_standardSelectedStyle); }
public static Color GetTransitionColor(BehaviourNodeStatus status) { switch (status) { case BehaviourNodeStatus.Failure: return(Color.red); case BehaviourNodeStatus.Running: return(new Color32(229, 202, 76, 255)); case BehaviourNodeStatus.Success: return(Color.green); } return(Color.white); }
protected override BehaviourNodeStatus OnExecute(AIAgent agent) { BehaviourNodeStatus status = BehaviourNodeStatus.Success; while (m_currentChild < m_children.Count) { status = m_children[m_currentChild].Run(agent); if (status == BehaviourNodeStatus.Success) { m_currentChild++; } else { break; } } return(status); }
protected override BehaviourNodeStatus OnExecute(AIAgent agent) { BehaviourNodeStatus status = BehaviourNodeStatus.Success; if (m_child != null) { status = m_child.Run(agent); if (status == BehaviourNodeStatus.Success) { status = BehaviourNodeStatus.Failure; } else if (status == BehaviourNodeStatus.Failure) { status = BehaviourNodeStatus.Success; } } return(status); }
protected override BehaviourNodeStatus OnExecute(AIAgent agent) { BehaviourNodeStatus status = BehaviourNodeStatus.Success; if (m_child != null) { if (m_child.Status != BehaviourNodeStatus.None && m_child.Status != BehaviourNodeStatus.Running) { m_child.OnReset(); } status = m_child.Run(agent); if (status != BehaviourNodeStatus.Failure) { status = BehaviourNodeStatus.Running; } } return(status); }
private void DrawTransitions() { Vector2 nodeSize = BTEditorStyle.GetNodeSize(m_node); Rect position = new Rect(NodePositon + BTEditorCanvas.Current.Position, nodeSize); BTEditorTreeLayout treeLayout = BTEditorStyle.TreeLayout; foreach (var child in m_children) { Vector2 childNodeSize = BTEditorStyle.GetNodeSize(child.Node); Rect childPosition = new Rect(child.Node.Position + BTEditorCanvas.Current.Position, childNodeSize); BehaviourNodeStatus childStatus = BTEditorCanvas.Current.IsDebuging ? child.Node.Status : BehaviourNodeStatus.None; Color color = BTEditorStyle.GetTransitionColor(childStatus); Vector2 nodeCenter = position.center; Vector2 childCenter = childPosition.center; if (treeLayout == BTEditorTreeLayout.Vertical) { if (Mathf.Approximately(nodeCenter.y, childCenter.y) || Mathf.Approximately(nodeCenter.x, childCenter.x)) { BTEditorUtils.DrawLine(nodeCenter, childCenter, color); } else { BTEditorUtils.DrawLine(nodeCenter, nodeCenter + Vector2.up * (childCenter.y - nodeCenter.y) / 2, color); BTEditorUtils.DrawLine(nodeCenter + Vector2.up * (childCenter.y - nodeCenter.y) / 2, childCenter + Vector2.up * (nodeCenter.y - childCenter.y) / 2, color); BTEditorUtils.DrawLine(childCenter, childCenter + Vector2.up * (nodeCenter.y - childCenter.y) / 2, color); } } else if (treeLayout == BTEditorTreeLayout.Horizontal) { BTEditorUtils.DrawBezier(nodeCenter, childCenter, color); } else { BTEditorUtils.DrawLine(nodeCenter, childCenter, color); } } }
protected override BehaviourNodeStatus OnExecute(AIAgent agent) { BehaviourNodeStatus status = BehaviourNodeStatus.Success; int numberOfFailures = 0; int numberOfSuccesses = 0; int numberOfRunningChildren = 0; if (m_children.Count > 0) { for (int i = 0; i < m_children.Count; i++) { BehaviourNodeStatus childStatus = m_children[i].Status; if (childStatus == BehaviourNodeStatus.None || childStatus == BehaviourNodeStatus.Running) { childStatus = m_children[i].Run(agent); } if (childStatus == BehaviourNodeStatus.Success) { numberOfSuccesses++; } else if (childStatus == BehaviourNodeStatus.Failure) { numberOfFailures++; } else if (childStatus == BehaviourNodeStatus.Running) { numberOfRunningChildren++; } } if ((m_failOnAny && numberOfFailures > 0) || (m_succeedOnAny && numberOfSuccesses > 0)) { if (m_failOnTie) { if (m_failOnAny && numberOfFailures > 0) { status = BehaviourNodeStatus.Failure; } else if (m_succeedOnAny && numberOfSuccesses > 0) { status = BehaviourNodeStatus.Success; } } else { if (m_succeedOnAny && numberOfSuccesses > 0) { status = BehaviourNodeStatus.Success; } else if (m_failOnAny && numberOfFailures > 0) { status = BehaviourNodeStatus.Failure; } } } else { if (numberOfSuccesses == m_children.Count) { status = BehaviourNodeStatus.Success; } else if (numberOfFailures == m_children.Count) { status = BehaviourNodeStatus.Failure; } else { status = BehaviourNodeStatus.Running; } } } return(status); }
public virtual void OnReset() { m_status = BehaviourNodeStatus.None; }