//ノード状態の評価 public override NodeStatus Evaluate() { if (m_conditionNode != null) { NodeStatus status = m_conditionNode.EvaluateCondition(m_nodeStatus); switch (status) { case NodeStatus.STATUS_SUCCESS: if (m_nodes[0] != m_preNode) { m_preNode.SetFailuer(); } m_nodeStatus = m_nodes[0].Evaluate(); m_preNode = m_nodes[0]; return(m_nodeStatus); case NodeStatus.STATUS_FAILURE: if (m_nodes[1] != m_preNode) { m_preNode.SetFailuer(); } m_nodeStatus = m_nodes[1].Evaluate(); m_preNode = m_nodes[1]; return(m_nodeStatus); case NodeStatus.STATUS_RUNNING: m_nodeStatus = m_preNode.Evaluate(); return(m_nodeStatus); } } //ここにくるのはおかしい return(NodeStatus.STATUS_FAILURE); }
public override void SetFailuer() { m_nodeStatus = NodeStatus.STATUS_FAILURE; BaseBTNode node = computeRunningNode(m_nodes); if (node != null) { node.SetFailuer(); } }
public override void SetFailuer() { m_preNode = null; foreach (BaseBTNode node in m_failuerNodes) { m_nodes.Add(node); //m_nodesにはないはず } m_failuerNodes.Clear(); m_nodeStatus = NodeStatus.STATUS_FAILURE; BaseBTNode childNode = computeRunningNode(m_nodes); if (childNode != null) { childNode.SetFailuer(); } }
public override void SetFailuer() { m_nodeStatus = NodeStatus.STATUS_FAILURE; m_node.SetFailuer(); }
public override NodeStatus Evaluate() { if (m_conditionNode != null) { NodeStatus status = m_conditionNode.EvaluateCondition(m_nodeStatus); switch (status) { case NodeStatus.STATUS_SUCCESS: if (m_firstSearch) { m_firstSearch = false; } if (m_nodes[0] != m_preNode) { m_preNode.SetFailuer(); } m_nodeStatus = m_nodes[0].Evaluate(); m_preNode = m_nodes[0]; if (m_nodeStatus != NodeStatus.STATUS_RUNNING) { m_firstSearch = true; } return(m_nodeStatus); case NodeStatus.STATUS_FAILURE: //前がToEnd実行完了のとき //前がNotToEnd実行中・NotToEnd実行完了のとき if ((m_firstSearch && m_preNode == m_nodes[0]) || (!m_firstSearch && m_preNode == m_nodes[1])) { m_firstSearch = false; if (m_nodes[1] != m_preNode) { m_preNode.SetFailuer(); } m_nodeStatus = m_nodes[1].Evaluate(); m_preNode = m_nodes[1]; return(m_nodeStatus); } else { //前がToEnd実行中のとき m_nodeStatus = m_nodes[0].Evaluate(); m_preNode = m_nodes[0]; if (m_nodeStatus != NodeStatus.STATUS_RUNNING) { m_firstSearch = true; } return(m_nodeStatus); } case NodeStatus.STATUS_RUNNING: m_nodeStatus = m_preNode.Evaluate(); if (m_nodeStatus != NodeStatus.STATUS_RUNNING && m_preNode == m_nodes[0]) { m_firstSearch = true; } return(m_nodeStatus); } } //ここにくるのはおかしい return(NodeStatus.STATUS_FAILURE); }