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); }
public static BehaviorParameter Draw(BehaviorParameter behaviorParameter, DrawParameterType drawParameterType, Action DelCallBack) { if (null == behaviorParameter) { return(behaviorParameter); } { string[] parameterNameArr = EnumNames.GetEnumNames <BehaviorParameterType>(); int index = EnumNames.GetEnumIndex <BehaviorParameterType>((BehaviorParameterType)(behaviorParameter.parameterType)); BehaviorParameterType behaviorParameterType = EnumNames.GetEnum <BehaviorParameterType>(index); bool enableChangeType = (drawParameterType == DrawParameterType.GLOBAL_PARAMETER_ADD); GUI.enabled = enableChangeType; { index = EditorGUILayout.Popup(index, parameterNameArr); behaviorParameter.parameterType = (int)EnumNames.GetEnum <BehaviorParameterType>(index); GUILayout.Space(5); } GUI.enabled = true; } EditorGUILayout.BeginHorizontal(); { if (drawParameterType == DrawParameterType.NODE_PARAMETER) { List <BehaviorParameter> parameterList = BehaviorManager.Instance.GlobalParameter.parameterList; string[] parameterArr = new string[parameterList.Count]; int index = -1; for (int i = 0; i < parameterList.Count; ++i) { BehaviorParameter p = parameterList[i]; parameterArr[i] = p.parameterName; if (behaviorParameter.parameterName.CompareTo(p.parameterName) == 0) { index = i; } } int result = EditorGUILayout.Popup(index, parameterArr, GUILayout.ExpandWidth(true)); if (result != index) { behaviorParameter.parameterName = parameterArr[result]; } } else if (drawParameterType == DrawParameterType.GLOBAL_PARAMETER || (drawParameterType == DrawParameterType.GLOBAL_PARAMETER_ADD) || drawParameterType == DrawParameterType.RUNTIME_PARAMETER) { GUI.enabled = (drawParameterType == DrawParameterType.GLOBAL_PARAMETER_ADD); behaviorParameter.parameterName = EditorGUILayout.TextField(behaviorParameter.parameterName); GUI.enabled = true; } BehaviorCompare[] compareEnumArr = new BehaviorCompare[] { }; if (behaviorParameter.parameterType == (int)BehaviorParameterType.Int) { compareEnumArr = new BehaviorCompare[] { BehaviorCompare.GREATER, BehaviorCompare.GREATER_EQUALS, BehaviorCompare.LESS_EQUAL, BehaviorCompare.LESS, BehaviorCompare.EQUALS, BehaviorCompare.NOT_EQUAL }; } if (behaviorParameter.parameterType == (int)BehaviorParameterType.Float) { compareEnumArr = new BehaviorCompare[] { BehaviorCompare.GREATER, BehaviorCompare.LESS }; } if (behaviorParameter.parameterType == (int)BehaviorParameterType.Bool) { compareEnumArr = new BehaviorCompare[] { BehaviorCompare.EQUALS, BehaviorCompare.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(BehaviorCompare), compareEnumArr[i]); compareArr[i] = name; if ((BehaviorCompare)behaviorParameter.compare == compareEnumArr[i]) { compare = i; found = true; } } if (!found) { compare = 0; } GUI.enabled = (drawParameterType != DrawParameterType.GLOBAL_PARAMETER) && (drawParameterType != DrawParameterType.RUNTIME_PARAMETER); { compare = EditorGUILayout.Popup(compare, compareArr, GUILayout.Width(65)); behaviorParameter.compare = (int)(compareEnumArr[compare]); } GUI.enabled = true; } EditorGUILayout.EndHorizontal(); GUILayout.Space(5); EditorGUILayout.BeginHorizontal(); { GUI.enabled = (drawParameterType != DrawParameterType.GLOBAL_PARAMETER); { if (behaviorParameter.parameterType == (int)BehaviorParameterType.Int) { behaviorParameter.intValue = EditorGUILayout.IntField("DefaultIntValue", behaviorParameter.intValue); } if (behaviorParameter.parameterType == (int)BehaviorParameterType.Float) { behaviorParameter.floatValue = EditorGUILayout.FloatField("DefaultFloatValue", behaviorParameter.floatValue); } if (behaviorParameter.parameterType == (int)BehaviorParameterType.Bool) { behaviorParameter.boolValue = EditorGUILayout.Toggle("DefaultBoolValue", behaviorParameter.boolValue); } } GUI.enabled = true; if (drawParameterType == DrawParameterType.NODE_PARAMETER || drawParameterType == DrawParameterType.GLOBAL_PARAMETER) { if (GUILayout.Button("Del")) { if (null != DelCallBack) { DelCallBack(); } } } } EditorGUILayout.EndHorizontal(); return(behaviorParameter); }