public NodeLeaf GetNode(string identificationName) { ICustomIdentification <NodeLeaf> info = GetIdentification(identificationName); NodeLeaf obj = info.Create(); return(obj); }
private void InitInfoList() { #region Node // 组合节点 string compositeName = string.Format("{0}/{1}", "Add Node", "组合节点"); Node_Draw_Info compositeDrawInfo = new Node_Draw_Info(compositeName); infoList.Add(compositeDrawInfo); // 修饰节点 string decoratorName = string.Format("{0}/{1}", "Add Node", "修饰节点"); Node_Draw_Info decoratorDrawInfo = new Node_Draw_Info(decoratorName); infoList.Add(decoratorDrawInfo); // 条件节点 string conditionName = string.Format("{0}/{1}", "Add Node", "条件节点"); Node_Draw_Info conditionDrawInfo = new Node_Draw_Info(conditionName); infoList.Add(conditionDrawInfo); // 行为节点 string actionName = string.Format("{0}/{1}", "Add Node", "行为节点"); Node_Draw_Info actionDrawInfo = new Node_Draw_Info(actionName); infoList.Add(actionDrawInfo); Node_Draw_Info subTreeDrawInfo = new Node_Draw_Info("AddSubTree"); infoList.Add(subTreeDrawInfo); Dictionary <string, ICustomIdentification <AbstractNode> > nodeDic = BehaviorConfigNode.Instance.GetNodeDic(); foreach (var kv in nodeDic) { ICustomIdentification <AbstractNode> customIdentification = kv.Value; NODE_TYPE nodeType = (NODE_TYPE)customIdentification.NodeType; if ((int)nodeType >= (int)NODE_TYPE.SUB_TREE) { subTreeDrawInfo.AddNodeType(nodeType, customIdentification.Name, customIdentification.IdentificationName); } else if ((int)nodeType >= (int)NODE_TYPE.ACTION) { actionDrawInfo.AddNodeType(nodeType, customIdentification.Name, customIdentification.IdentificationName); } else if ((int)nodeType >= (int)NODE_TYPE.CONDITION) { conditionDrawInfo.AddNodeType(nodeType, customIdentification.Name, customIdentification.IdentificationName); } else if ((int)nodeType >= (int)NODE_TYPE.DECORATOR_INVERTER) { decoratorDrawInfo.AddNodeType(nodeType, customIdentification.Name, customIdentification.IdentificationName); } else if ((int)nodeType >= (int)NODE_TYPE.SELECT) { compositeDrawInfo.AddNodeType(nodeType, customIdentification.Name, customIdentification.IdentificationName); } } #endregion }
public AbstractNode GetNode(string identificationName) { ICustomIdentification <AbstractNode> info = GetIdentification(identificationName); if (null == info) { UnityEngine.Debug.LogError(identificationName); } AbstractNode obj = info.Create(); return(obj); }
private void SetInfoList() { #region Node for (int i = 0; i < nodeList.Count; ++i) { string name = string.Format("{0}/{1}", "Add Node", typeNameArr[i]); Node_Draw_Info drawInfo = new Node_Draw_Info(name); NODE_TYPE[] arr = nodeList[i]; for (NODE_TYPE nodeType = arr[0]; nodeType <= arr[1]; ++nodeType) { drawInfo.AddNodeType(nodeType); infoList.Add(drawInfo); } } { // 条件节点 string conditionName = string.Format("{0}/{1}", "Add Node", "条件节点"); Node_Draw_Info conditionDrawInfo = new Node_Draw_Info(conditionName); infoList.Add(conditionDrawInfo); // 行为节点 string actionName = string.Format("{0}/{1}", "Add Node", "行为节点"); Node_Draw_Info actionDrawInfo = new Node_Draw_Info(actionName); infoList.Add(actionDrawInfo); Dictionary <string, ICustomIdentification <NodeLeaf> > nodeDic = CustomNode.Instance.GetNodeDic(); foreach (var kv in nodeDic) { ICustomIdentification <NodeLeaf> customIdentification = kv.Value; if (customIdentification.NodeType == NODE_TYPE.CONDITION) { conditionDrawInfo.AddNodeType(NODE_TYPE.CONDITION, customIdentification.Name, customIdentification.IdentificationName); } else if (customIdentification.NodeType == NODE_TYPE.ACTION) { actionDrawInfo.AddNodeType(NODE_TYPE.ACTION, customIdentification.Name, customIdentification.IdentificationName); } } } #endregion #region Sub_Tree { Node_Draw_Info drawInfo = new Node_Draw_Info("AddSubTree"); drawInfo.AddNodeType(NODE_TYPE.SUB_TREE); infoList.Add(drawInfo); } #endregion }
public void Draw(NodeValue nodeValue) { if (null == nodeValue) { EditorGUILayout.LabelField("未选择节点"); return; } GUI.enabled = !BehaviorManager.Instance.CurrentOpenConfigSubTree(); EditorGUILayout.BeginVertical("box"); { if (nodeValue.NodeType == (int)NODE_TYPE.CONDITION || nodeValue.NodeType == (int)NODE_TYPE.ACTION) { int index = EnumNames.GetEnumIndex <NODE_TYPE>((NODE_TYPE)nodeValue.NodeType); string name = EnumNames.GetEnumName <NODE_TYPE>(index); name = string.Format("{0}_{1}", name, nodeValue.id); EditorGUILayout.LabelField(name); GUILayout.Space(5); } string nodeName = nodeValue.nodeName; string msg = string.Format("{0}_{1}", nodeName, nodeValue.id); EditorGUILayout.LabelField(msg); if (nodeValue.NodeType == (int)NODE_TYPE.SUB_TREE) { SubTreeNode(nodeValue); } if (nodeValue.NodeType != (int)NODE_TYPE.CONDITION && nodeValue.NodeType != (int)NODE_TYPE.ACTION) { CompositeNode(nodeValue); } EntryNode(nodeValue); if (nodeValue.NodeType == (int)NODE_TYPE.DECORATOR_REPEAT) { nodeValue.repeatTimes = EditorGUILayout.IntField("重复执行次数", nodeValue.repeatTimes); } if (nodeValue.NodeType == (int)NODE_TYPE.IF_JUDEG) { IfJudge(nodeValue); } if (nodeValue.childNodeList.Count > 0) { if (nodeValue.NodeType != (int)NODE_TYPE.SUB_TREE) { nodeValue.moveWithChild = EditorGUILayout.Toggle(new GUIContent("同步移动子节点"), nodeValue.moveWithChild); } else { nodeValue.moveWithChild = false; } } if (nodeValue.parentNodeID >= 0) { string parentName = string.Format("父节点_{0}", nodeValue.parentNodeID); EditorGUILayout.LabelField(parentName); } if (nodeValue.childNodeList.Count > 0 && nodeValue.NodeType == (int)NODE_TYPE.RANDOM_PRIORITY) { EditorGUILayout.BeginVertical("box"); { for (int i = 0; i < nodeValue.childNodeList.Count; ++i) { NodeValue childNode = BehaviorManager.Instance.GetNode(nodeValue.childNodeList[i]); string nodeMsg = string.Format("子节点:{0} 权值:", childNode.id); childNode.priority = EditorGUILayout.IntField(nodeMsg, childNode.priority); childNode.priority = Mathf.Max(1, childNode.priority); } } EditorGUILayout.EndVertical(); } if (!string.IsNullOrEmpty(nodeValue.identificationName)) { string identificationName = string.Format("类标识_{0}", nodeValue.identificationName); EditorGUILayout.LabelField(identificationName); ICustomIdentification <NodeLeaf> customIdentification = CustomNode.Instance.GetIdentification(nodeValue.identificationName); string className = customIdentification.IdentificationName; EditorGUILayout.LabelField(className); } EditorGUILayout.LabelField("备注"); nodeValue.descript = EditorGUILayout.TextArea(nodeValue.descript, GUILayout.Width(250)); if ((nodeValue.NodeType != (int)NODE_TYPE.CONDITION && nodeValue.NodeType != (int)NODE_TYPE.ACTION)) { GUILayout.Space(20); EditorGUILayout.LabelField("组合节点功能描述"); nodeValue.function = EditorGUILayout.TextArea(nodeValue.function, GUILayout.Height(150), GUILayout.Width(300)); } } EditorGUILayout.EndVertical(); GUI.enabled = true; DrawNode(nodeValue, "参数"); GUI.enabled = true; ParentInfo(); }
private void AddIdentification(ICustomIdentification <NodeLeaf> customIdentification) { nodeDic[customIdentification.IdentificationName] = customIdentification; }