コード例 #1
0
        public override ResultType Execute()
        {
            ++_executeCount;

            ResultType resultType = ResultType.Fail;

            for (int i = 0; i < nodeChildList.Count; ++i)
            {
                NodeBase nodeBase = nodeChildList[i];

                nodeBase.Preposition();
                resultType = nodeBase.Execute();
                nodeBase.Postposition(resultType);

                if (resultType == ResultType.Running)
                {
                    _runningNode |= (1 << i);
                }
            }

            if (_repeatCount == -1 || _executeCount < _repeatCount)
            {
                resultType = ResultType.Running;
            }
            else
            {
                resultType = ResultType.Success;
            }

            NodeNotify.NotifyExecute(EntityId, NodeId, resultType, Time.realtimeSinceStartup);

            return(resultType);
        }
コード例 #2
0
        public override ResultType Execute()
        {
            ResultType resultType = _iCondition.Condition();

            NodeNotify.NotifyExecute(EntityId, NodeId, resultType, Time.realtimeSinceStartup);
            return(resultType);
        }
コード例 #3
0
        public override ResultType Execute()
        {
            ResultType resultType = ResultType.Fail;

            for (int i = 0; i < nodeChildList.Count; ++i)
            {
                NodeBase nodeBase = nodeChildList[i];
                nodeBase.Preposition();
                resultType = nodeBase.Execute();
                nodeBase.Postposition(resultType);

                if (resultType == ResultType.Running)
                {
                    _runningNode |= (1 << i);
                }

                if (resultType == _desiredResult)
                {
                    return(ResultType.Success);
                }
            }

            NodeNotify.NotifyExecute(EntityId, NodeId, ResultType.Running, Time.realtimeSinceStartup);
            return(ResultType.Running);
        }
コード例 #4
0
        public void LoadFile(string fileName)
        {
            if (string.IsNullOrEmpty(fileName))
            {
                return;
            }

            BehaviorDataController.Instance.ConfigDataDic.Clear();

            BehaviorReadWrite readWrite        = new BehaviorReadWrite();
            BehaviorTreeData  behaviorTreeData = ReadFile(fileName, true);

            if (null == behaviorTreeData)
            {
                UnityEngine.Debug.LogError("file is null:" + fileName);
                return;
            }

            BehaviorDataController.Instance.PlayState = BehaviorPlayType.STOP;
            NodeNotify.SetPlayState((int)BehaviorPlayType.STOP);

            BehaviorDataController.Instance.SetBehaviorData(behaviorTreeData);

            BehaviorDataController.Instance.CurrentSelectId    = -1;
            BehaviorDataController.Instance.CurrentOpenSubTree = -1;

            BehaviorRunTime.Instance.Reset(behaviorTreeData);
        }
コード例 #5
0
 public void Reset(BehaviorTreeData behaviorTreeData, BehaviorTreeEntity behaviorTreeEntity)
 {
     BehaviorManager.Instance.BehaviorTreeData = behaviorTreeData;
     _behaviorTreeEntity = behaviorTreeEntity;
     BehaviorTreeEntity.CurrentDebugEntityId = _behaviorTreeEntity.EntityId;
     SetRunTimeDrawNode(behaviorTreeEntity);
     BehaviorManager.behaviorRuntimePlay(BehaviorPlayType.PLAY);
     NodeNotify.Clear();
 }
コード例 #6
0
        public override ResultType Execute()
        {
            NodeNotify.NotifyExecute(NodeId, Time.realtimeSinceStartup);

            NodeBase   nodeRoot   = nodeChildList[0];
            ResultType resultType = nodeRoot.Execute();

            return(_constResult);
        }
コード例 #7
0
 public void Reset(BehaviorTreeData behaviorTreeData, BehaviorTreeEntity behaviorTreeEntity)
 {
     BehaviorDataController.Instance.BehaviorTreeData = behaviorTreeData;
     _behaviorTreeEntity = behaviorTreeEntity;
     BehaviorTreeEntity.CurrentDebugEntityId = _behaviorTreeEntity.EntityId;
     SetRunTimeDrawNode(behaviorTreeEntity);
     BehaviorDataController.Instance.PlayState = BehaviorPlayType.PLAY;
     NodeNotify.Clear();
 }
コード例 #8
0
        public void Reset(BehaviorTreeData behaviorTreeData)
        {
            behaviorTreeData.nodeDic.Clear();
            for (int i = 0; i < behaviorTreeData.nodeList.Count; ++i)
            {
                NodeValue nodeValue = behaviorTreeData.nodeList[i];
                behaviorTreeData.nodeDic.Add(nodeValue.id, nodeValue);
            }

            _behaviorTreeEntity = new BehaviorTreeEntity(long.MaxValue, behaviorTreeData, LoadConfig);
            BehaviorTreeEntity.CurrentDebugEntityId = _behaviorTreeEntity.EntityId;
            SetRunTimeDrawNode(_behaviorTreeEntity);
            NodeNotify.Clear();
        }
コード例 #9
0
        public override ResultType Execute()
        {
            ResultType resultType = ResultType.Fail;

            int successCount = 0;
            int failCount    = 0;

            for (int i = 0; i < nodeChildList.Count; ++i)
            {
                NodeBase nodeBase = nodeChildList[i];

                nodeBase.Preposition();
                resultType = nodeBase.Execute();
                nodeBase.Postposition(resultType);

                if (resultType == ResultType.Fail)
                {
                    ++failCount;
                    continue;
                }

                if (resultType == ResultType.Success)
                {
                    ++successCount;
                    continue;
                }

                if (resultType == ResultType.Running)
                {
                    _runningNode |= (1 << i);
                    continue;
                }
            }

            if (successCount >= nodeChildList.Count)
            {
                resultType = ResultType.Success;
            }
            else if (failCount >= nodeChildList.Count)
            {
                resultType = ResultType.Fail;
            }
            else
            {
                resultType = ResultType.Running;
            }

            NodeNotify.NotifyExecute(EntityId, NodeId, (int)resultType, Time.realtimeSinceStartup);
            return(resultType);
        }
コード例 #10
0
        public override ResultType Execute()
        {
            NodeNotify.NotifyExecute(NodeId, Time.realtimeSinceStartup);

            NodeBase   nodeRoot   = nodeChildList[0];
            ResultType resultType = nodeRoot.Execute();

            if (resultType == _desiredResult)
            {
                return(ResultType.Fail);
            }

            Update();

            return(ResultType.Running);
        }
コード例 #11
0
        public override ResultType Execute()
        {
            _randomCount = 0;

            int index = -1;

            if (lastRunningNode != null)
            {
                index = lastRunningNode.NodeIndex;
            }
            lastRunningNode = null;

            ResultType resultType = ResultType.Fail;

            for (int i = 0; i < nodeChildList.Count; ++i)
            {
                if (index < 0)
                {
                    index = GetRandom();
                }
                NodeBase nodeBase = nodeChildList[index];
                index = -1;

                nodeBase.Preposition();
                resultType = nodeBase.Execute();
                nodeBase.Postposition(resultType);

                if (resultType == ResultType.Fail)
                {
                    break;
                }

                if (resultType == ResultType.Success)
                {
                    continue;
                }

                if (resultType == ResultType.Running)
                {
                    lastRunningNode = nodeBase;
                    break;
                }
            }

            NodeNotify.NotifyExecute(EntityId, NodeId, resultType, Time.realtimeSinceStartup);
            return(resultType);
        }
コード例 #12
0
ファイル: NodeRandom.cs プロジェクト: shimoop/BehaviorTree
        public override ResultType Execute()
        {
            NodeNotify.NotifyExecute(NodeId, Time.realtimeSinceStartup);

            List <int> randomList = GetRandom(nodeChildList.Count);

            int index = -1;

            if (lastRunningNode != null)
            {
                index = lastRunningNode.NodeIndex;
            }
            lastRunningNode = null;

            ResultType resultType = ResultType.Fail;

            while ((randomList.Count > 0))
            {
                if (index < 0)
                {
                    index = randomList[randomList.Count - 1];
                    randomList.RemoveAt(randomList.Count - 1);
                }
                NodeBase nodeRoot = nodeChildList[index];
                index = -1;

                resultType = nodeRoot.Execute();

                if (resultType == ResultType.Fail)
                {
                    continue;
                }

                if (resultType == ResultType.Success)
                {
                    break;
                }

                if (resultType == ResultType.Running)
                {
                    lastRunningNode = nodeRoot;
                    break;
                }
            }

            return(resultType);
        }
コード例 #13
0
        public void Reset(BehaviorTreeData behaviorTreeData)
        {
            behaviorTreeData.nodeDic.Clear();
            for (int i = 0; i < behaviorTreeData.nodeList.Count; ++i)
            {
                NodeValue nodeValue = behaviorTreeData.nodeList[i];
                int       index     = EnumNames.GetEnumIndex <NODE_TYPE>((NODE_TYPE)nodeValue.NodeType);
                nodeValue.nodeName = EnumNames.GetEnumName <NODE_TYPE>(index);
                behaviorTreeData.nodeDic.Add(nodeValue.id, nodeValue);
            }

            BehaviorAnalysis.GetInstance().SetLoadConfigEvent(LoadConfig);
            _behaviorTreeEntity = new BehaviorTreeEntity(long.MaxValue, behaviorTreeData);
            BehaviorTreeEntity.CurrentDebugEntityId = _behaviorTreeEntity.EntityId;
            SetRunTimeDrawNode(_behaviorTreeEntity);
            NodeNotify.Clear();
        }
コード例 #14
0
        public override ResultType Execute()
        {
            ResultType resultType = ResultType.Fail;

            if (!Application.isPlaying)
            {
                // 编辑器下预览用
                resultType = ResultType.Running;
            }
            else
            {
                resultType = iAction.DoAction();
            }

            NodeNotify.NotifyExecute(EntityId, NodeId, resultType, Time.realtimeSinceStartup);
            return(resultType);
        }
コード例 #15
0
        protected ResultType ExecuteNode(NodeBase nodeBase, bool isFirstNode)
        {
            ResultType resultType = ResultType.Fail;

            if (null != nodeBase)
            {
                nodeBase.Preposition();
                resultType = nodeBase.Execute();
                nodeBase.Postposition(resultType);
            }

            if (!isFirstNode && resultType == ResultType.Running)
            {
                lastRunningNode = nodeBase;
            }

            NodeNotify.NotifyExecute(EntityId, NodeId, (int)resultType, Time.realtimeSinceStartup);
            return(resultType);
        }
コード例 #16
0
        private ResultType ExecuteNode(NodeBase nodeBase)
        {
            ResultType resultType = ResultType.Fail;

            if (null != nodeBase)
            {
                nodeBase.Preposition();
                resultType = nodeBase.Execute();
                nodeBase.Postposition(resultType);
            }

            if (resultType == ResultType.Running)
            {
                lastRunningNode = nodeBase;
            }

            NodeNotify.NotifyExecute(EntityId, NodeId, resultType, Time.realtimeSinceStartup);
            return(resultType);
        }
コード例 #17
0
        public override ResultType Execute()
        {
            NodeNotify.NotifyExecute(NodeId, Time.realtimeSinceStartup);

            ResultType resultType = ResultType.Fail;

            NodeBase   nodeRoot = nodeChildList[0];
            ResultType type     = nodeRoot.Execute();

            if (type == ResultType.Fail)
            {
                resultType = ResultType.Success;
            }
            else
            {
                resultType = ResultType.Fail;
            }

            return(resultType);
        }
コード例 #18
0
        public override ResultType Execute()
        {
            NodeNotify.NotifyExecute(NodeId, Time.realtimeSinceStartup);

            NodeBase   nodeRoot   = nodeChildList[0];
            ResultType resultType = nodeRoot.Execute();

            ++_executeCount;

            if (_executeCount < _repeatCount)
            {
                resultType = ResultType.Running;
            }
            else
            {
                resultType = ResultType.Fail;
            }

            return(resultType);
        }
コード例 #19
0
        public override ResultType Execute()
        {
            ResultType resultType = ResultType.Fail;

            if (nodeChildList.Count <= 0)
            {
                return(ResultType.Fail);
            }

            NodeBase nodeBase = nodeChildList[0];

            nodeBase.Preposition();
            resultType = nodeBase.Execute();
            nodeBase.Postposition(resultType);
            if (resultType == ResultType.Running)
            {
                lastRunningNode = nodeBase;
            }

            NodeNotify.NotifyExecute(EntityId, NodeId, (int)resultType, Time.realtimeSinceStartup);
            return(resultType);
        }
コード例 #20
0
        /// <summary>
        /// 顺序节点依次执行子节点,只要节点返回Success,就继续执行后续节点,直到一个节点
        /// 返回 Fail 或者 Running,停止执行后续节点,向父节点返回 Fail 或者 Running,如果
        /// 所有节点都返回 Success,则向父节点返回 Success
        /// 和选择节点一样,如果一个节点返回 Running,则需要记录该节点,下次执行时直接从该
        /// 节点开始执行
        /// </summary>
        /// <returns></returns>
        public override ResultType Execute()
        {
            NodeNotify.NotifyExecute(NodeId, Time.realtimeSinceStartup);

            int index = 0;

            if (lastRunningNode != null)
            {
                index = lastRunningNode.NodeIndex;
            }
            lastRunningNode = null;

            ResultType resultType = ResultType.Fail;

            for (int i = index; i < nodeChildList.Count; ++i)
            {
                NodeBase nodeRoot = nodeChildList[i];
                resultType = nodeRoot.Execute();

                if (resultType == ResultType.Fail)
                {
                    break;
                }

                if (resultType == ResultType.Success)
                {
                    continue;
                }

                if (resultType == ResultType.Running)
                {
                    lastRunningNode = nodeRoot;
                    break;
                }
            }

            return(resultType);
        }
コード例 #21
0
ファイル: NodeParallel.cs プロジェクト: shimoop/BehaviorTree
        /// <summary>
        /// 并行节点同时执行所有节点,直到一个节点返回 Fail 或者全部节点都返回 Success
        /// 才向父节点返回 Fail 或者 Success,并终止执行其他节点
        /// 其他情况向父节点返回 Running
        /// </summary>
        /// <returns></returns>
        public override ResultType Execute()
        {
            NodeNotify.NotifyExecute(NodeId, Time.realtimeSinceStartup);

            ResultType resultType = ResultType.Fail;

            int successCount = 0;

            for (int i = 0; i < nodeChildList.Count; ++i)
            {
                NodeBase nodeRoot = nodeChildList[i];
                resultType = nodeRoot.Execute();

                if (resultType == ResultType.Fail)
                {
                    break;
                }

                if (resultType == ResultType.Success)
                {
                    ++successCount;
                    continue;
                }

                if (resultType == ResultType.Running)
                {
                    continue;
                }
            }

            if (resultType != ResultType.Fail)
            {
                resultType = (successCount >= nodeChildList.Count) ? ResultType.Success : ResultType.Running;
            }

            return(resultType);
        }
コード例 #22
0
ファイル: NodeAction.cs プロジェクト: 3356550151/BehaviorTree
 public override ResultType Execute()
 {
     NodeNotify.NotifyExecute(NodeId, Time.realtimeSinceStartup);
     return(iAction.DoAction());
 }