예제 #1
0
        int GetSlotIndex(int orderIndex)
        {
            List <NodeLinkSlot> childrenLink = compositeNode.childrenLink;

            if (0 <= orderIndex && orderIndex < _ChildNodeOrders.Count)
            {
                int branchID = _ChildNodeOrders[orderIndex].branchID;
                for (int i = 0, count = childrenLink.Count; i < count; i++)
                {
                    NodeLinkSlot slot = childrenLink[i];
                    if (slot.branchID == branchID)
                    {
                        return(i);
                    }
                }
            }

            return(-1);
        }
예제 #2
0
        public override int GetInterruptIndex(TreeNodeBase node)
        {
            _ChildNodeOrders.Clear();

            List <NodeLinkSlot> childrenLink = compositeNode.childrenLink;

            int childCount = childrenLink.Count;

            for (int childIndex = 0; childIndex < childCount; ++childIndex)
            {
                NodeLinkSlot slot   = childrenLink[childIndex];
                float        weight = 0.0f;

                NodeBranch branch = behaviourTree.nodeBranchies.GetFromID(slot.branchID);
                if (branch.childNodeID == node.nodeID)
                {
                    weight          = -1f;
                    branch.isActive = true;
                }
                else
                {
                    weight = Random.value;
                }

                Order order = new Order()
                {
                    branchID = slot.branchID,
                    weight   = weight,
                };

                _ChildNodeOrders.Add(order);
            }

            _ChildNodeOrders.Sort();

            _OrderIndex = 0;

            return(GetSlotIndex(_OrderIndex));
        }