public void SetData(BehaviorTreeData behaviorTreeData) { BehaviorAnalysis analysis = new BehaviorAnalysis(); _iconditionCheck = new ConditionCheck(); _rootNode = analysis.Analysis(behaviorTreeData, ref _iconditionCheck); }
public BehaviorTreeEntity(string content) { _iconditionCheck = new ConditionCheck(); BehaviorAnalysis analysis = new BehaviorAnalysis(); _rootNode = analysis.Analysis(content, _iconditionCheck, AddActionNode); }
public void SetData(string content) { BehaviorAnalysis analysis = new BehaviorAnalysis(); _iconditionCheck = new ConditionCheck(); _rootNode = analysis.Analysis(content, ref _iconditionCheck); }
private AbstractNode AnalysisNode(NodeValue nodeValue, IConditionCheck iConditionCheck) { AbstractNode nodeBase = BehaviorConfigNode.Instance.GetNode(nodeValue.identificationName); if (nodeValue.NodeType == (int)NODE_TYPE.CONDITION) // 条件节点 { NodeCondition condition = (NodeCondition)nodeBase; condition.SetData(nodeValue.parameterList, nodeValue.conditionGroupList); condition.SetConditionCheck(iConditionCheck); } else if (nodeValue.NodeType == (int)NODE_TYPE.ACTION) { NodeAction action = (NodeAction)nodeBase; action.SetParameters(nodeValue.parameterList); } else if (nodeValue.NodeType == (int)NODE_TYPE.IF_JUDEG_PARALLEL || nodeValue.NodeType == (int)NODE_TYPE.IF_JUDEG_SEQUENCE) { NodeIfJudge ifJudge = (NodeIfJudge)nodeBase; ifJudge.SetData(nodeValue.ifJudgeDataList); ifJudge.SetDefaultResult((ResultType)nodeValue.defaultResult); } else if (nodeValue.NodeType == (int)NODE_TYPE.DECORATOR_REPEAT) { NodeDecoratorRepeat repeat = (NodeDecoratorRepeat)nodeBase; repeat.SetRepeatCount(nodeValue.repeatTimes); } return(nodeBase); }
public NodeBase Analysis(long aiFunction, BehaviorTreeData data, IConditionCheck iConditionCheck, Action <int> InvalidSubTreeCallBack) { int entityId = NewEntityId; NodeBase rootNode = AnalysisTree(entityId, aiFunction, data, iConditionCheck, InvalidSubTreeCallBack); return(rootNode); }
public BehaviorTreeEntity(BehaviorTreeData data) { _iconditionCheck = new ConditionCheck(); BehaviorAnalysis analysis = new BehaviorAnalysis(); _rootNode = analysis.Analysis(data, _iconditionCheck, AddActionNode); }
public NodeCondition GetCondition(NodeValue nodeValue, IConditionCheck iConditionCheck) { NodeCondition condition = (NodeCondition)CustomNode.Instance.GetNode(nodeValue.identification); condition.SetData(nodeValue.parameterList, nodeValue.conditionGroupList); condition.SetConditionCheck(iConditionCheck); return(condition); }
public void Reset(SkillHsmConfigHSMTreeData HSMTreeData) { HSMAnalysis analysis = new HSMAnalysis(); _iconditionCheck = new ConditionCheck(); analysis.Analysis(HSMTreeData, _iconditionCheck, this, ref _hsmStateMachine); _hsmStateMachine.SetAutoTransitionState(true); }
private void Load() { TextAsset textAsset = Resources.Load <TextAsset>("Data/AbilityGeneric"); BehaviorAnalysis analysis = new BehaviorAnalysis(); iconditionCheck = new ConditionCheck(); _rootNode = analysis.Analysis(textAsset.text, ref iconditionCheck); int a = 0; }
public NodeBase Analysis(string content, ref IConditionCheck iConditionCheck) { BehaviorTreeData behaviorTreeData = JsonMapper.ToObject <BehaviorTreeData>(content); if (null == behaviorTreeData) { Debug.LogError("behaviorTreeData is null"); return(null); } return(Analysis(behaviorTreeData, ref iConditionCheck)); }
public BehaviorTreeEntity(long aiFunction, BehaviorTreeData data) { _iconditionCheck = new ConditionCheck(); //UnityEngine.Profiling.Profiler.BeginSample("Analysis"); _rootNode = BehaviorAnalysis.GetInstance().Analysis(aiFunction, data, _iconditionCheck, AddInvalidSubTree); //UnityEngine.Profiling.Profiler.EndSample(); if (null != _rootNode) { _entityId = _rootNode.EntityId; } }
public NodeCondition GetCondition(NodeValue nodeValue, IConditionCheck iConditionCheck) { UnityEngine.Profiling.Profiler.BeginSample("GetCondition1"); NodeCondition condition = (NodeCondition)CustomNode.Instance.GetNode(nodeValue.identificationName); UnityEngine.Profiling.Profiler.EndSample(); condition.SetData(nodeValue.parameterList, nodeValue.conditionGroupList); condition.SetConditionCheck(iConditionCheck); return(condition); }
public NodeBase Analysis(string content, IConditionCheck iConditionCheck, Action <NodeAction> ActionNodeCallBack) { BehaviorTreeData behaviorTreeData = JsonMapper.ToObject <BehaviorTreeData>(content); if (null == behaviorTreeData) { Debug.LogError("behaviorTreeData is null"); return(null); } iConditionCheck.AddParameter(behaviorTreeData.parameterList); return(Analysis(behaviorTreeData, iConditionCheck, ActionNodeCallBack)); }
public BehaviorTreeEntity(long aiFunction, BehaviorTreeData data, LoadConfigInfoEvent loadEvent) { _iconditionCheck = new ConditionCheck(); BehaviorAnalysis analysis = new BehaviorAnalysis(); analysis.SetLoadConfigEvent(loadEvent); UnityEngine.Profiling.Profiler.BeginSample("Analysis"); _rootNode = analysis.Analysis(aiFunction, data, _iconditionCheck, AddInvalidSubTree); UnityEngine.Profiling.Profiler.EndSample(); if (null != _rootNode) { _entityId = _rootNode.EntityId; } }
public NodeBase Analysis(long aiFunction, BehaviorTreeData data, IConditionCheck iConditionCheck, Action <int> InvalidSubTreeCallBack) { NodeBase rootNode = null; if (null == data || data.rootNodeId < 0) { //ProDebug.Logger.LogError("数据无效"); return(rootNode); } iConditionCheck.AddParameter(data.parameterList); int entityId = NewEntityId; rootNode = AnalysisNode(entityId, aiFunction, data, data.rootNodeId, iConditionCheck, InvalidSubTreeCallBack); return(rootNode); }
public void Init() { SkillHsmConfigHSMTreeData skillHsmData = SkillEventHandler.Instance.GetSkillHsmConfigData(_skill.SkillData.HandleFile); if (null == skillHsmData) { UnityEngine.Debug.LogError("SkillHsmData is null:" + _skill.weaponId + " " + _skill.SkillData.HandleFile); return; } _iconditionCheck = new ConditionCheck(); HSMAnalysis analysis = new HSMAnalysis(); analysis.Analysis(skillHsmData, _iconditionCheck, this, ref _hsmStateMachine); if (null != _hsmStateMachine) { _hsmStateMachine.SetAutoTransitionState(false); } Clear(); }
public void SetConditionCheck(IConditionCheck iConditionCheck) { _iconditionCheck = iConditionCheck; }
private NodeBase AnalysisNode(int entityId, long aiFunction, BehaviorTreeData data, int nodeId, IConditionCheck iConditionCheck, Action <int> InvalidSubTreeCallBack) { NodeValue nodeValue = null; if (!data.nodeDic.TryGetValue(nodeId, out nodeValue)) { return(null); } if (nodeValue.NodeType == (int)NODE_TYPE.SUB_TREE && nodeValue.subTreeValue > 0) { if ((aiFunction & nodeValue.subTreeValue) <= 0) { InvalidSubTreeCallBack?.Invoke(nodeValue.id); return(null); } } //UnityEngine.Profiling.Profiler.BeginSample("AnalysisNode CreateNode"); NodeBase nodeBase = AnalysisNode(nodeValue, iConditionCheck) as NodeBase; nodeBase.NodeId = nodeValue.id; nodeBase.EntityId = entityId; nodeBase.Priority = nodeValue.priority; //UnityEngine.Profiling.Profiler.EndSample(); if (nodeValue.NodeType == (int)NODE_TYPE.SUB_TREE && nodeValue.subTreeType == (int)SUB_TREE_TYPE.CONFIG) { BehaviorTreeData subTreeData = _loadConfigInfoEvent(nodeValue.subTreeConfig); if (null != subTreeData) { NodeBase subTreeNode = AnalysisTree(entityId, aiFunction, subTreeData, iConditionCheck, InvalidSubTreeCallBack); NodeComposite composite = (NodeComposite)(nodeBase); composite.AddNode(subTreeNode); } } //UnityEngine.Profiling.Profiler.BeginSample("AnalysisNode IsLeafNode"); if (!IsLeafNode(nodeValue.NodeType)) { NodeComposite composite = (NodeComposite)nodeBase; for (int i = 0; i < nodeValue.childNodeList.Count; ++i) { int childNodeId = nodeValue.childNodeList[i]; NodeBase childNode = AnalysisNode(entityId, aiFunction, data, childNodeId, iConditionCheck, InvalidSubTreeCallBack); if (null != childNode) { composite.AddNode(childNode); } } } //UnityEngine.Profiling.Profiler.EndSample(); return(nodeBase); }
private NodeBase AnalysisNode(NodeValue nodeValue, IConditionCheck iConditionCheck) { if (nodeValue.NodeType == (int)NODE_TYPE.CONDITION) // 条件节点 { return(GetCondition(nodeValue, iConditionCheck)); } if (nodeValue.NodeType == (int)NODE_TYPE.ACTION) // 行为节点 { return(GetAction(nodeValue)); } if (nodeValue.NodeType == (int)NODE_TYPE.SUB_TREE) // 子树 { return(GetSubTree()); } if (nodeValue.NodeType == (int)NODE_TYPE.SELECT) // 选择节点 { return(GetSelect()); } if (nodeValue.NodeType == (int)NODE_TYPE.SEQUENCE) // 顺序节点 { return(GetSequence()); } if (nodeValue.NodeType == (int)NODE_TYPE.PARALLEL) // 并行节点 { return(GetParallel()); } if (nodeValue.NodeType == (int)NODE_TYPE.PARALLEL_SELECT)// 并行选择节点 { return(GetParallelSelect()); } if (nodeValue.NodeType == (int)NODE_TYPE.PARALLEL_ALL) // 并行执行所有节点 { return(GetParallelAll()); } if (nodeValue.NodeType == (int)NODE_TYPE.IF_JUDEG) // 判断节点 { return(GetIfJudge(nodeValue)); } if (nodeValue.NodeType == (int)NODE_TYPE.RANDOM) // 随机节点 { return(GetRandom()); } if (nodeValue.NodeType == (int)NODE_TYPE.RANDOM_SEQUEUECE)// 随机顺序节点 { return(GetRandomSequence()); } if (nodeValue.NodeType == (int)NODE_TYPE.RANDOM_PRIORITY) // 随机权重节点 { return(GetRandomPriority()); } if (nodeValue.NodeType == (int)NODE_TYPE.DECORATOR_INVERTER) // 修饰节点_取反 { return(GetInverter()); } if (nodeValue.NodeType == (int)NODE_TYPE.DECORATOR_REPEAT) // 修饰节点_重复 { return(GetRepeat(nodeValue)); } if (nodeValue.NodeType == (int)NODE_TYPE.DECORATOR_RETURN_FAIL) // 修饰节点_返回Fail { return(GetReturenFail()); } if (nodeValue.NodeType == (int)NODE_TYPE.DECORATOR_RETURN_SUCCESS) // 修饰节点_返回Success { return(GetReturnSuccess()); } if (nodeValue.NodeType == (int)NODE_TYPE.DECORATOR_UNTIL_FAIL) // 修饰节点_直到Fail { return(GetUntilFail()); } if (nodeValue.NodeType == (int)NODE_TYPE.DECORATOR_UNTIL_SUCCESS) // 修饰节点_直到Success { return(GetUntilSuccess()); } return(null); }
public NodeBase Analysis(BehaviorTreeData data, IConditionCheck iConditionCheck, Action <NodeAction> ActionNodeCallBack) { NodeBase rootNode = null; if (null == data) { Debug.LogError("数据无效"); return(rootNode); } if (data.rootNodeId < 0) { Debug.LogError("没有跟节点"); return(rootNode); } iConditionCheck.AddParameter(data.parameterList); Dictionary <int, NodeBase> compositeDic = new Dictionary <int, NodeBase>(); Dictionary <int, NodeBase> allNodeDic = new Dictionary <int, NodeBase>(); Dictionary <int, List <int> > childDic = new Dictionary <int, List <int> >(); for (int i = 0; i < data.nodeList.Count; ++i) { NodeValue nodeValue = data.nodeList[i]; NodeBase nodeBase = AnalysisNode(nodeValue, iConditionCheck); nodeBase.NodeId = nodeValue.id; if (!IsLeafNode(nodeValue.NodeType)) { compositeDic[nodeValue.id] = nodeBase; childDic[nodeValue.id] = nodeValue.childNodeList; if (data.rootNodeId == nodeValue.id) { rootNode = nodeBase; } } if (null == nodeBase) { Debug.LogError("AllNODE:" + nodeValue.id + " " + (null != nodeBase)); } if (nodeValue.NodeType == (int)NODE_TYPE.ACTION && null != ActionNodeCallBack) { ActionNodeCallBack((NodeAction)nodeBase); } allNodeDic[nodeValue.id] = nodeBase; } foreach (var kv in compositeDic) { int id = kv.Key; NodeComposite composite = (NodeComposite)(kv.Value); List <int> childList = childDic[id]; for (int i = 0; i < childList.Count; ++i) { int nodeId = childList[i]; NodeBase childNode = allNodeDic[nodeId]; if (null == childNode) { Debug.LogError("null node :" + nodeId); continue; } composite.AddNode(childNode); } } return(rootNode); }
private NodeBase AnalysisNode(NodeValue nodeValue, IConditionCheck iConditionCheck) { NodeBase node = null; if (nodeValue.NodeType == (int)NODE_TYPE.SELECT) // 选择节点 { return(GetSelect(nodeValue)); } if (nodeValue.NodeType == (int)NODE_TYPE.SEQUENCE) // 顺序节点 { return(GetSequence(nodeValue)); } if (nodeValue.NodeType == (int)NODE_TYPE.RANDOM) // 随机节点 { return(GetRandom(nodeValue)); } if (nodeValue.NodeType == (int)NODE_TYPE.PARALLEL) // 并行节点 { return(GetParallel(nodeValue)); } if (nodeValue.NodeType == (int)NODE_TYPE.DECORATOR_INVERTER) // 修饰节点_取反 { return(GetInverter(nodeValue)); } if (nodeValue.NodeType == (int)NODE_TYPE.DECORATOR_REPEAT) // 修饰节点_重复 { return(GetRepeat(nodeValue)); } if (nodeValue.NodeType == (int)NODE_TYPE.DECORATOR_RETURN_FAIL) // 修饰节点_返回Fail { return(GetReturenFail(nodeValue)); } if (nodeValue.NodeType == (int)NODE_TYPE.DECORATOR_RETURN_SUCCESS) // 修饰节点_返回Success { return(GetReturnSuccess(nodeValue)); } if (nodeValue.NodeType == (int)NODE_TYPE.DECORATOR_UNTIL_FAIL) // 修饰节点_直到Fail { return(GetUntilFail(nodeValue)); } if (nodeValue.NodeType == (int)NODE_TYPE.DECORATOR_UNTIL_SUCCESS) // 修饰节点_直到Success { return(GetUntilSuccess(nodeValue)); } if (nodeValue.NodeType == (int)NODE_TYPE.CONDITION) // 条件节点 { return(GetCondition(nodeValue, iConditionCheck)); } if (nodeValue.NodeType == (int)NODE_TYPE.ACTION) // 行为节点 { return(GetAction(nodeValue)); } return(node); }