Exemple #1
0
    public override void execute()
    {
        LIST(out List <DTreeNode> availableChildList);
        LIST(out List <float> oddsList);
        // 按子节点顺序查看子节点是否满足条件
        int count = mChildList.Count;

        for (int i = 0; i < count; ++i)
        {
            DTreeNode node = mChildList[i];
            // 找出可以执行的节点
            if (node.isActive() && node.condition())
            {
                availableChildList.Add(node);
                oddsList.Add(node.getRandomWeight());
            }
        }
        // 按照权重随机选择其中一个节点
        int index = randomHit(oddsList);

        if (inRange(index, 0, availableChildList.Count - 1, true))
        {
            availableChildList[index].execute();
        }
        UN_LIST(availableChildList);
        UN_LIST(oddsList);
    }
 public override void update(float elapsedTime)
 {
     base.update(elapsedTime);
     // 先更新所有节点
     foreach (var item in mNodeList)
     {
         if (!item.Value.mDeadNode)
         {
             item.Value.update(elapsedTime);
         }
     }
     if (mTimer.tickTimer(elapsedTime))
     {
         LIST(out List <DTreeNode> deadList);
         foreach (var item in mNodeList)
         {
             if (item.Value.mDeadNode)
             {
                 deadList.Add(item.Value);
             }
         }
         // 移除已经死亡的节点
         int count = deadList.Count;
         for (int i = 0; i < count; ++i)
         {
             clearNode(deadList[i]);
         }
         UN_LIST(deadList);
         // 从根节点开始遍历
         if (mRootNode != null && mRootNode.condition())
         {
             mRootNode.execute();
         }
     }
 }
 public override void update(float elapsedTime)
 {
     base.update(elapsedTime);
     // 先更新所有节点
     foreach (var item in mNodeList)
     {
         if (!item.Value.mDeadNode)
         {
             item.Value.update(elapsedTime);
         }
     }
     if (mTimer.tickTimer(elapsedTime))
     {
         List <DTreeNode> deadList = mListPool.newList(out deadList);
         foreach (var item in mNodeList)
         {
             if (item.Value.mDeadNode)
             {
                 deadList.Add(item.Value);
             }
         }
         // 移除已经死亡的节点
         foreach (var item in deadList)
         {
             clearNode(item);
         }
         mListPool.destroyList(deadList);
         // 从根节点开始遍历
         if (mRootNode != null && mRootNode.condition())
         {
             mRootNode.execute();
         }
     }
 }
    public override void execute()
    {
        // 按子节点顺序查看子节点是否满足条件
        int count = mChildList.Count;

        for (int i = 0; i < count; ++i)
        {
            DTreeNode node = mChildList[i];
            // 找到一个满足条件的子节点就不再继续遍历
            if (node.isActive() && node.condition())
            {
                node.execute();
                break;
            }
        }
    }