Beispiel #1
0
        public static ParameterCompare Compare(NodeParameter self, NodeParameter parameter)
        {
            ParameterCompare result = ParameterCompare.NOT_EQUAL;

            if (self.parameterType != parameter.parameterType)
            {
                Debug.LogError("parameter Type not Equal:" + parameter.parameterName + "    " + parameter.parameterType + "    " + self.parameterType);
                return(result);
            }

            if (self.parameterType == (int)ParameterType.Float)
            {
                result = CompareFloat(self.floatValue, parameter.floatValue);
            }
            else if (self.parameterType == (int)ParameterType.Int || self.parameterType == (int)ParameterType.Long)
            {
                result = CompareLong(self.intValue, parameter.intValue);
            }
            else if (self.parameterType == (int)ParameterType.Bool)
            {
                result = CompareBool(self.boolValue, parameter.boolValue);
            }
            else if (self.parameterType == (int)ParameterType.String)
            {
                result = CompareString(self.stringValue, parameter.stringValue);
            }

            return(result);
        }
Beispiel #2
0
        public static ParameterCompare CompareLong(long longValue1, long longValue2)
        {
            ParameterCompare behaviorCompare = ParameterCompare.INVALID;

            if (longValue1 > longValue2)
            {
                behaviorCompare |= ParameterCompare.GREATER;
                behaviorCompare |= ParameterCompare.NOT_EQUAL;
            }
            else if (longValue1 < longValue2)
            {
                behaviorCompare |= ParameterCompare.LESS;
                behaviorCompare |= ParameterCompare.NOT_EQUAL;
            }
            else
            {
                behaviorCompare |= ParameterCompare.EQUALS;
            }

            if (longValue1 >= longValue2)
            {
                behaviorCompare |= ParameterCompare.GREATER_EQUALS;
            }

            if (longValue1 <= longValue2)
            {
                behaviorCompare |= ParameterCompare.LESS_EQUAL;
            }

            return(behaviorCompare);
        }
Beispiel #3
0
        public static ParameterCompare CompareFloat(float floatValue1, float floatValue2)
        {
            ParameterCompare BehaviorCompare = ParameterCompare.INVALID;

            if (floatValue1 > floatValue2)
            {
                BehaviorCompare |= ParameterCompare.GREATER;
            }
            else if (floatValue1 < floatValue2)
            {
                BehaviorCompare |= ParameterCompare.LESS;
            }

            return(BehaviorCompare);
        }
        public bool Condition(NodeParameter parameter)
        {
            NodeParameter environmentParameter = null;

            if (!_environmentParameterDic.TryGetValue(parameter.parameterName, out environmentParameter))
            {
                return(false);
            }

            if (environmentParameter.parameterType != parameter.parameterType)
            {
                return(false);
            }

            ParameterCompare compare = ParameterCompareTool.Compare(environmentParameter, parameter);
            int value = (parameter.compare) & (int)compare;

            return(value > 0);
        }
Beispiel #5
0
        public static ParameterCompare CompareString(string stringValue1, string stringValue2)
        {
            ParameterCompare behaviorCompare = (stringValue1.CompareTo(stringValue2) == 0) ? ParameterCompare.EQUALS : ParameterCompare.NOT_EQUAL;

            return(behaviorCompare);
        }
Beispiel #6
0
        public static ParameterCompare CompareBool(bool boolValue1, bool boolValue2)
        {
            ParameterCompare behaviorCompare = (boolValue1 == boolValue2) ? ParameterCompare.EQUALS : ParameterCompare.NOT_EQUAL;

            return(behaviorCompare);
        }
Beispiel #7
0
        public static NodeParameter Draw(NodeParameter behaviorParameter, DrawParameterType drawParameterType, Action DelCallBack)
        {
            if (null == behaviorParameter)
            {
                return(behaviorParameter);
            }

            EditorGUILayout.BeginHorizontal();
            {
                string[]      parameterNameArr      = EnumNames.GetEnumNames <ParameterType>();
                int           index                 = EnumNames.GetEnumIndex <ParameterType>((ParameterType)(behaviorParameter.parameterType));
                ParameterType behaviorParameterType = EnumNames.GetEnum <ParameterType>(index);

                GUI.enabled = false;
                if (drawParameterType == DrawParameterType.NODE_PARAMETER)
                {
                    EditorGUILayout.BeginHorizontal();
                    {
                        behaviorParameter.index = EditorGUILayout.IntField(behaviorParameter.index, GUILayout.Width(30));
                    }
                    EditorGUILayout.EndHorizontal();
                }

                bool enableChangeType = (drawParameterType == DrawParameterType.BEHAVIOR_PARAMETER_ADD);
                GUI.enabled = enableChangeType && !BehaviorDataController.Instance.CurrentOpenConfigSubTree();
                {
                    index = EditorGUILayout.Popup(index, parameterNameArr);
                    behaviorParameter.parameterType = (int)EnumNames.GetEnum <ParameterType>(index);
                    GUILayout.Space(5);
                }
                GUI.enabled = true;

                if (drawParameterType == DrawParameterType.NODE_PARAMETER)
                {
                    GUI.enabled = false;
                    EditorGUILayout.BeginHorizontal();
                    {
                        behaviorParameter.parameterName = EditorGUILayout.TextField(behaviorParameter.parameterName);
                    }
                    EditorGUILayout.EndHorizontal();
                    GUI.enabled = true;
                }

                if (drawParameterType == DrawParameterType.NODE_PARAMETER || drawParameterType == DrawParameterType.BEHAVIOR_PARAMETER)
                {
                    GUI.enabled = !BehaviorDataController.Instance.CurrentOpenConfigSubTree();
                    if (GUILayout.Button("Del"))
                    {
                        if (null != DelCallBack)
                        {
                            DelCallBack();
                        }
                    }
                    GUI.enabled = true;
                }
            }
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.BeginHorizontal();
            {
                if (drawParameterType == DrawParameterType.NODE_PARAMETER)
                {
                    List <NodeParameter> parameterList = BehaviorDataController.Instance.BehaviorTreeData.parameterList;
                    string[]             parameterArr  = new string[parameterList.Count];
                    int index = -1;
                    for (int i = 0; i < parameterList.Count; ++i)
                    {
                        NodeParameter p = parameterList[i];
                        parameterArr[i] = p.CNName;
                        if (behaviorParameter.parameterName.CompareTo(p.parameterName) == 0)
                        {
                            index = i;
                        }
                    }

                    GUI.enabled = !BehaviorDataController.Instance.CurrentOpenConfigSubTree();
                    int result = EditorGUILayout.Popup(index, parameterArr, GUILayout.ExpandWidth(true));
                    GUI.enabled = true;
                    if (result != index)
                    {
                        behaviorParameter.parameterName = parameterList[result].parameterName;
                    }
                }
                else if (drawParameterType == DrawParameterType.BEHAVIOR_PARAMETER ||
                         drawParameterType == DrawParameterType.RUNTIME_PARAMETER)
                {
                    GUI.enabled = false;
                    behaviorParameter.parameterName = EditorGUILayout.TextField(behaviorParameter.parameterName);
                    GUI.enabled = true;
                    string cnName = EditorGUILayout.TextField(behaviorParameter.CNName);
                    if (cnName.CompareTo(behaviorParameter.CNName) != 0)
                    {
                        TreeNodeWindow.window.ShowNotification("此处字段名只支持查看,不能修改");
                    }
                }
                else if (drawParameterType == DrawParameterType.BEHAVIOR_PARAMETER_ADD)
                {
                    EditorGUILayout.BeginVertical();
                    {
                        string oldName = behaviorParameter.parameterName;
                        behaviorParameter.parameterName = EditorGUILayout.TextField("英文:", behaviorParameter.parameterName);
                        if (oldName.CompareTo(behaviorParameter.parameterName) != 0)
                        {
                            bool isNumOrAlp = IsNumOrAlp(behaviorParameter.parameterName);
                            if (!isNumOrAlp)
                            {
                                string msg = string.Format("参数名只能包含:数字、字母、下划线,且数字不能放在第一个字符位置");
                                TreeNodeWindow.window.ShowNotification(msg);
                                behaviorParameter.parameterName = oldName;
                            }
                        }

                        behaviorParameter.CNName = EditorGUILayout.TextField("中文", behaviorParameter.CNName);
                    }
                    EditorGUILayout.EndVertical();
                }

                ParameterCompare[] compareEnumArr = new ParameterCompare[] { };
                if (behaviorParameter.parameterType == (int)ParameterType.Int)
                {
                    compareEnumArr = new ParameterCompare[] { ParameterCompare.GREATER, ParameterCompare.GREATER_EQUALS, ParameterCompare.LESS_EQUAL, ParameterCompare.LESS, ParameterCompare.EQUALS, ParameterCompare.NOT_EQUAL };
                }
                if (behaviorParameter.parameterType == (int)ParameterType.Long)
                {
                    compareEnumArr = new ParameterCompare[] { ParameterCompare.GREATER, ParameterCompare.GREATER_EQUALS, ParameterCompare.LESS_EQUAL, ParameterCompare.LESS, ParameterCompare.EQUALS, ParameterCompare.NOT_EQUAL };
                }
                if (behaviorParameter.parameterType == (int)ParameterType.Float)
                {
                    compareEnumArr = new ParameterCompare[] { ParameterCompare.GREATER, ParameterCompare.LESS };
                }
                if (behaviorParameter.parameterType == (int)ParameterType.Bool)
                {
                    compareEnumArr = new ParameterCompare[] { ParameterCompare.EQUALS, ParameterCompare.NOT_EQUAL };
                }

                if (behaviorParameter.parameterType == (int)ParameterType.String)
                {
                    compareEnumArr = new ParameterCompare[] { ParameterCompare.EQUALS, ParameterCompare.NOT_EQUAL };
                }

                string[] compareArr = new string[compareEnumArr.Length];
                int      compare    = behaviorParameter.compare;
                bool     found      = false;
                for (int i = 0; i < compareEnumArr.Length; ++i)
                {
                    string name = System.Enum.GetName(typeof(ParameterCompare), compareEnumArr[i]);
                    compareArr[i] = name;
                    if ((ParameterCompare)behaviorParameter.compare == compareEnumArr[i])
                    {
                        compare = i;
                        found   = true;
                    }
                }

                if (!found)
                {
                    compare = 0;
                }

                GUI.enabled = (drawParameterType != DrawParameterType.BEHAVIOR_PARAMETER) && (drawParameterType != DrawParameterType.RUNTIME_PARAMETER) && !BehaviorDataController.Instance.CurrentOpenConfigSubTree();;
                bool value    = (drawParameterType != DrawParameterType.BEHAVIOR_PARAMETER) && (drawParameterType != DrawParameterType.RUNTIME_PARAMETER) && (drawParameterType != DrawParameterType.BEHAVIOR_PARAMETER_ADD);
                bool boolType = (behaviorParameter.parameterType == (int)ParameterType.Bool);
                if (value && !boolType)
                {
                    compare = EditorGUILayout.Popup(compare, compareArr, GUILayout.Width(65));
                    behaviorParameter.compare = (int)(compareEnumArr[compare]);
                }
                GUI.enabled = true;

                if (boolType)
                {
                    behaviorParameter.compare = (int)ParameterCompare.EQUALS;
                }

                GUI.enabled = true && !BehaviorDataController.Instance.CurrentOpenConfigSubTree();
                {
                    if (behaviorParameter.parameterType == (int)ParameterType.Int)
                    {
                        behaviorParameter.intValue = EditorGUILayout.IntField(behaviorParameter.intValue, GUILayout.Width(60));
                    }

                    if (behaviorParameter.parameterType == (int)ParameterType.Long)
                    {
                        behaviorParameter.longValue = EditorGUILayout.LongField(behaviorParameter.longValue, GUILayout.Width(60));
                    }

                    if (behaviorParameter.parameterType == (int)ParameterType.Float)
                    {
                        behaviorParameter.floatValue = EditorGUILayout.FloatField(behaviorParameter.floatValue, GUILayout.Width(60));
                    }

                    if (behaviorParameter.parameterType == (int)ParameterType.Bool)
                    {
                        behaviorParameter.boolValue = EditorGUILayout.Toggle(behaviorParameter.boolValue, GUILayout.Width(60));
                    }

                    if (behaviorParameter.parameterType == (int)ParameterType.String)
                    {
                        behaviorParameter.stringValue = EditorGUILayout.TextField(behaviorParameter.stringValue, GUILayout.Width(60));
                    }
                }
                GUI.enabled = true;
            }
            EditorGUILayout.EndHorizontal();
            GUILayout.Space(5);

            return(behaviorParameter);
        }