public BTNode SetPrecondition(BTPrecondition _precondition) { if (precondition != _precondition) { precondition = _precondition; } return(this); }
private static BTPrecondition CreatePrecondition(ref BTPrecondition[] _nodePreconditions, PreconditionConfig[] _condConfigs, int _index) { int[] _childIndexs = _condConfigs[_index].mChildIndexs; //int _parentIndex = _condConfigs[_index].m_ParentIndex; if (_childIndexs != null && _childIndexs.Length != 0) { for (int i = 0; i < _childIndexs.Length; i++) { if (_nodePreconditions[_childIndexs[i]] == null) { _nodePreconditions[_childIndexs[i]] = CreatePrecondition(ref _nodePreconditions, _condConfigs, _childIndexs[i]); } } } BTPrecondition _precondition = null; if (_childIndexs != null && _childIndexs.Length > 0) { PreconditionType type = (PreconditionType)_condConfigs[_index].mType; BTPrecondition[] _childNodePreconditions = new BTPrecondition[_childIndexs.Length]; for (int i = 0; i < _childIndexs.Length; i++) { _childNodePreconditions[i] = _nodePreconditions[_childIndexs[i]]; } switch (type) { case PreconditionType.And: _precondition = new BTPreconditionAND(_childNodePreconditions); break; case PreconditionType.Or: _precondition = new BTPreconditionOR(_childNodePreconditions); break; case PreconditionType.Not: _precondition = new BTPreconditionNOT(_childNodePreconditions[0]); break; default: break; } } else { string typeName = _condConfigs[_index].mPreconditionName; if (PreconditionTypeDic.ContainsKey(typeName)) { Type type = PreconditionTypeDic[typeName]; _precondition = (BTPrecondition)type.GetConstructor(new Type[] { }).Invoke(new object[] { }); } } return(_precondition); }
private static BTPrecondition CreatePreconditionFromConfig(TreeNodeConfig _nodeConfig) { PreconditionConfig[] _condConfigs = _nodeConfig.mPreconditions; BTPrecondition[] _nodePreconditions = new BTPrecondition[_condConfigs.Length]; for (int i = 0; i < _nodePreconditions.Length; i++) { _nodePreconditions[i] = null; } for (int i = 0; i < _nodePreconditions.Length; i++) { if (_nodePreconditions[i] == null) { _nodePreconditions[i] = CreatePrecondition(ref _nodePreconditions, _condConfigs, i); } } return(_nodePreconditions[0]); }
private static void GetPreconditionConfigFromBtreeNode(BTPrecondition _precondition, ref PreconditionConfig[] _preconditionList, ref int _index, int _parentIndex = -1) { _preconditionList[_index] = new PreconditionConfig(); _preconditionList[_index].mParentIndex = _parentIndex; Type type = _precondition.GetType(); _preconditionList[_index].mPreconditionName = type.Name.Split('`')[0]; if (type.Equals(typeof(BTPreconditionAND))) { _preconditionList[_index].mType = (int)PreconditionType.And; BTPrecondition[] _childPreconditon = ((BTPreconditionAND)_precondition).GetChildPrecondition(); _preconditionList[_index].mChildIndexs = new int[_childPreconditon.Length]; int parentIndex = _index; for (int i = 0; i < _childPreconditon.Length; i++) { _index = _index + 1; _preconditionList[parentIndex].mChildIndexs[i] = _index; GetPreconditionConfigFromBtreeNode(_childPreconditon[i], ref _preconditionList, ref _index, parentIndex); } } else if (type.Equals(typeof(BTPreconditionOR))) { _preconditionList[_index].mType = (int)PreconditionType.Or; BTPrecondition[] _childPreconditon = ((BTPreconditionOR)_precondition).GetChildPrecondition(); _preconditionList[_index].mChildIndexs = new int[_childPreconditon.Length]; int parentIndex = _index; for (int i = 0; i < _childPreconditon.Length; i++) { _index = _index + 1; _preconditionList[parentIndex].mChildIndexs[i] = _index; GetPreconditionConfigFromBtreeNode(_childPreconditon[i], ref _preconditionList, ref _index, parentIndex); } } else if (type.Equals(typeof(BTPreconditionNOT))) { _preconditionList[_index].mType = (int)PreconditionType.Not; BTPrecondition _childPreconditon = ((BTPreconditionNOT)_precondition).GetChildPrecondition(); _preconditionList[_index].mChildIndexs = new int[1]; _preconditionList[_index].mChildIndexs[0] = _index + 1; int parentIndex = _index; _index = _index + 1; GetPreconditionConfigFromBtreeNode(_childPreconditon, ref _preconditionList, ref _index, parentIndex); } }
private static int GetBTreeChildPreconditionNum(BTPrecondition _precondition) { if (_precondition == null) { return(0); } int _count = 0; Type type = _precondition.GetType(); if (type.Equals(typeof(BTPreconditionAND))) { _count += ((BTPreconditionAND)_precondition).GetChildPreconditionCount(); BTPrecondition[] _chlidList = ((BTPreconditionAND)_precondition).GetChildPrecondition(); if (_chlidList != null) { for (int i = 0; i < _chlidList.Length; i++) { _count += GetBTreeChildPreconditionNum(_chlidList[i]); } } } else if (type.Equals(typeof(BTPreconditionOR))) { _count += ((BTPreconditionOR)_precondition).GetChildPreconditionCount(); BTPrecondition[] _chlidList = ((BTPreconditionOR)_precondition).GetChildPrecondition(); if (_chlidList != null) { for (int i = 0; i < _chlidList.Length; i++) { _count += GetBTreeChildPreconditionNum(_chlidList[i]); } } } else if (type.Equals(typeof(BTPreconditionNOT))) { _count += 1; _count += GetBTreeChildPreconditionNum(((BTPreconditionNOT )_precondition).GetChildPrecondition()); } return(_count); }
public BTNode(BTNode _parentNode, BTPrecondition _precondition = null) { parent = _parentNode; precondition = _precondition; maxChild = MAX_CHILD_NODE_COUNT; }
public BTParallel(BTNode _parentNode, BTPrecondition _precondition = null) : base(_parentNode, _precondition) { }
public BTDecorator(BTNode _parentNode, BTPrecondition _precondition = null) : base(_parentNode, _precondition) { maxChild = 1; }
public BTWeigthSelector(BTNode _parent, BTPrecondition _precondition = null) : base(_parent, _precondition) { }