Exemplo n.º 1
0
        public void RemoveUnusedArgs(NodeProto nodeProto)
        {
            ClientNodeTypeProto proto      = ExportNodeTypeConfig.GetNodeTypeProtoFromDll(nodeProto.name);
            List <string>       unUsedList = new List <string>();

            foreach (var item in nodeProto.args_dict)
            {
                if (!proto.new_args_desc.Exists(a => (a.name == item.Key)))
                {
                    unUsedList.Add(item.Key);
                }
            }
            foreach (var item in unUsedList)
            {
                nodeProto.args_dict.Remove(item);
            }
            for (int i = 0; i < nodeProto.children.Count; i++)
            {
                RemoveUnusedArgs(nodeProto.children[i]);
            }
        }
        public List <string> Filter(List <string> list, string text)
        {
            List <string> result1 = new List <string>();
            string        selectType;

            if (mEnumNodeTypeSelection == 0)
            {
                selectType = "All";
                result1    = list;
            }
            else
            {
                selectType = Enum.GetName(typeof(NodeClassifyType), mEnumNodeTypeSelection - 1);
                foreach (var name in list)
                {
                    ClientNodeTypeProto proto = ExportNodeTypeConfig.GetNodeTypeProtoFromDll(name);
                    if (selectType == proto.classify)
                    {
                        result1.Add(name);
                    }
                }
            }

            if (string.IsNullOrEmpty(text))
            {
                return(result1);
            }

            List <string> result2 = new List <string>();

            foreach (var name in result1)
            {
                ClientNodeTypeProto proto = ExportNodeTypeConfig.GetNodeTypeProtoFromDll(name);
                if (name.ToUpper().Contains(text.ToUpper()) || proto.describe.ToUpper().Contains(text.ToUpper()))
                {
                    result2.Add(name);
                }
            }
            return(result2);
        }
Exemplo n.º 3
0
        //节点配置 get set
        public ClientNodeTypeProto GetNodeTypeProto(string name)
        {
            ClientNodeTypeProto proto = ExportNodeTypeConfig.GetNodeTypeProtoFromDll(name);

            return(proto);
        }
Exemplo n.º 4
0
 private void DrawProp(string nodeName, List <NodeFieldDesc> fieldList, NodeParamType nodeParamType)
 {
     for (int i = 0; i < fieldList.Count; i++)
     {
         NodeFieldDesc       desc       = fieldList[i];
         Type                fieldType  = ExportNodeTypeConfig.GetFieldType(nodeName, desc.name);
         ClientNodeTypeProto clientNode = ExportNodeTypeConfig.GetNodeTypeProtoFromDll(nodeName);
         object              newValue   = null;
         if (!mCurBehaviorNode.args_dict.ContainsKey(desc.name))
         {
             mCurBehaviorNode.args_dict.Add(desc.name, new ValueBase());
         }
         if (BehaviorTreeArgsDict.IsStringType(fieldType))
         {
             if (nodeParamType == NodeParamType.Input)
             {
                 newValue = InputEnumFieldValue(desc);
             }
             else if (nodeParamType == NodeParamType.Output && clientNode.classify == NodeClassifyType.Root.ToString())
             {
                 newValue = ConstTextFieldValue(desc);
             }
             else
             {
                 newValue = TextFieldValue(desc);
             }
         }
         else if (BehaviorTreeArgsDict.IsFloatType(fieldType))
         {
             newValue = FloatFieldValue(desc);
         }
         else if (BehaviorTreeArgsDict.IsDoubleType(fieldType))
         {
             newValue = DoubletFieldValue(desc);
         }
         else if (BehaviorTreeArgsDict.IsIntType(fieldType))
         {
             newValue = IntFieldValue(desc);
         }
         else if (BehaviorTreeArgsDict.IsLongType(fieldType))
         {
             newValue = LongFieldValue(desc);
         }
         else if (BehaviorTreeArgsDict.IsBoolType(fieldType))
         {
             newValue = BoolFieldValue(desc);
         }
         else if (BehaviorTreeArgsDict.IsObjectType(fieldType))
         {
             newValue = ObjectFieldValue(desc);
         }
         else if (BehaviorTreeArgsDict.IsIntArrType(fieldType))
         {
             newValue = IntArrFieldValue(desc);
         }
         else if (BehaviorTreeArgsDict.IsLongArrType(fieldType))
         {
             newValue = LongArrFieldValue(desc);
         }
         else if (BehaviorTreeArgsDict.IsStringArrType(fieldType))
         {
             newValue = StrArrFieldValue(desc);
         }
         else if (BehaviorTreeArgsDict.IsFloatArrType(fieldType))
         {
             newValue = FloatArrFieldValue(desc);
         }
         else if (BehaviorTreeArgsDict.IsDoubleArrType(fieldType))
         {
             newValue = DoubleArrFieldValue(desc);
         }
         else if (BehaviorTreeArgsDict.IsEnumType(fieldType))
         {
             if (nodeParamType == NodeParamType.Input)
             {
                 newValue = InputEnumFieldValue(desc);
             }
             else if (nodeParamType == NodeParamType.Output)
             {
                 newValue = OutPutEnumFieldValue(desc);
             }
             else
             {
                 newValue = EnumFieldValue(desc);
             }
         }
         else if (BehaviorTreeArgsDict.IsObjectArrayType(fieldType))
         {
             newValue = ObjectArrFieldValue(desc);
         }
         else
         {
             Log.Error($"行为树节点暂时未支持此类型:{fieldType}!");
             return;
         }
         mCurBehaviorNode.args_dict.SetKeyValueComp(fieldType, desc.name, newValue);
     }
 }
        public string DrawSearchList()
        {
            List <string> targetList = new List <string>();

            if (mSubWinType == SubWinType.CreateNode)
            {
                targetList = GraphDesigner.GetCanCreateList();
            }
            else if (mSubWinType == SubWinType.ReplaceNode)
            {
                targetList = GraphDesigner.GetCanRepalceList();
            }

            List <string> nodeNameList = Filter(targetList, mSearchNode);

            GUILayout.BeginHorizontal();
            GUI.SetNextControlName("Search");
            this.mSearchNode = GUILayout.TextField(this.mSearchNode, GUI.skin.FindStyle("ToolbarSeachTextField"));
            GUI.FocusControl("Search");
            GUILayout.EndHorizontal();
            //
            toolbarRect = new Rect(0f, 15f + 20, mWidth, 25f);
            Rect boxRect = new Rect(0f, toolbarRect.height, this.mWidth, (Screen.height - toolbarRect.height) - 21f + 10);

            GUILayout.BeginArea(toolbarRect, EditorStyles.toolbar);
            GUILayout.BeginHorizontal();

            GUILayout.Label("Filter");
            Array         strArr  = Enum.GetValues(typeof(NodeClassifyType));
            List <string> strList = new List <string>();

            strList.Add("All");
            foreach (var str in strArr)
            {
                strList.Add(str.ToString());
            }
            mEnumNodeTypeArr       = strList.ToArray();
            mEnumNodeTypeSelection = EditorGUILayout.Popup(mEnumNodeTypeSelection, mEnumNodeTypeArr);
            if (GUILayout.Button("Clear"))
            {
                ClearNodes();
            }
            GUILayout.EndHorizontal();
            GUILayout.EndArea();
            //

            GUILayout.BeginArea(new Rect(0, 0, windowRect.width, windowRect.height));
            float topSpace = 60;

            this.mTreeScrollPos = GUI.BeginScrollView(new Rect(0f, topSpace, windowRect.width, windowRect.height - topSpace), this.mTreeScrollPos,
                                                      new Rect(0f, 0f, windowRect.width - 20f, nodeNameList.Count * 19), false, true);

            foreach (var name in nodeNameList)
            {
                ClientNodeTypeProto proto = ExportNodeTypeConfig.GetNodeTypeProtoFromDll(name);
                if (GUILayout.Button(name + $"({proto.describe})", GetButtonStyle()))
                {
                    if (SubWinType.CreateNode == mSubWinType)
                    {
                        GraphDesigner.onCreateNode(name, Vector2.zero);
                    }
                    else if (SubWinType.ReplaceNode == mSubWinType)
                    {
                        GraphDesigner.onChangeNodeType(name, Vector2.zero);
                    }
                    BehaviorDesignerWindow.Instance.CloseSubWin();
                }
            }

            GUI.EndScrollView();
            GUILayout.EndArea();

            return("");
        }