示例#1
0
    public DecisionTreeStatus Tick(long TickTime, T context)
    {
        IEnumerable <IDecisionNode <T> > searchNodes = (m_CurrentRunningNode == null) ? m_nodes : m_nodes.SkipWhile(node => node != m_CurrentRunningNode);

        DecisionTreeStatus accumulator = DecisionTreeStatus.Failure;

        foreach (IDecisionNode <T> currentNode in searchNodes)
        {
            if (accumulator != DecisionTreeStatus.Success)
            {
                DecisionTreeStatus NodeDecisionResult = currentNode.Tick(TickTime, context);
                if (NodeDecisionResult == DecisionTreeStatus.Running)
                {
                    m_CurrentRunningNode = currentNode;
                }
                else
                {
                    m_CurrentRunningNode = null;
                }

                accumulator = NodeDecisionResult;
            }
        }

        return(accumulator);
    }
 private void IACombatStarts()
 {
     TreeContext        ctx  = new TreeContext();
     DecisionTreeStatus heal = m_IATree.Tick(m_currentTurn, ctx);
 }