public void ShowDefinedBBVariablesGUI() { var varInfo = new Dictionary <string, BBVarInfo>(); foreach (KeyValuePair <BBVariable, object> pair in GetDefinedBBVariables()) { if (!varInfo.ContainsKey(pair.Key.dataName)) { varInfo[pair.Key.dataName] = new BBVarInfo(); } varInfo[pair.Key.dataName].type = pair.Key.varType; varInfo[pair.Key.dataName].dynamic = pair.Key.isDynamic; varInfo[pair.Key.dataName].count++; varInfo[pair.Key.dataName].objects.Add(pair.Value); } EditorUtils.BoldSeparator(); EditorUtils.CoolLabel("Defined Parameters"); EditorUtils.Separator(); GUILayout.BeginHorizontal(); GUILayout.BeginVertical(GUILayout.MaxWidth(100), GUILayout.ExpandWidth(true)); GUI.color = Color.yellow; GUILayout.Label("Name"); GUI.color = Color.white; foreach (KeyValuePair <string, BBVarInfo> pair in varInfo) { GUILayout.Label(string.Format(pair.Value.dynamic? "<i>{0}</i>" : "{0}", pair.Key)); } GUILayout.EndVertical(); GUILayout.BeginVertical(GUILayout.MaxWidth(100), GUILayout.ExpandWidth(true)); GUI.color = Color.yellow; GUILayout.Label("Type"); GUI.color = Color.white; foreach (KeyValuePair <string, BBVarInfo> pair in varInfo) { GUILayout.Label(EditorUtils.TypeName(pair.Value.type)); } GUILayout.EndVertical(); GUILayout.BeginVertical(GUILayout.MaxWidth(100), GUILayout.ExpandWidth(true)); GUI.color = Color.yellow; GUILayout.Label("Occurencies"); GUI.color = Color.white; foreach (KeyValuePair <string, BBVarInfo> pair in varInfo) { GUILayout.Label(pair.Value.count.ToString()); } GUILayout.EndVertical(); GUILayout.EndHorizontal(); }
//Shows the agent field void ShowAgentField() { if (agentType == null) { return; } if (Application.isPlaying && agentIsOverride && taskAgent.value == null) { GUI.color = EditorUtils.lightRed; EditorGUILayout.LabelField("Missing Agent Reference!"); GUI.color = Color.white; return; } Undo.RecordObject(this, "Agent Field Change"); var isMissing = agent == null || agent.GetComponent(agentType) == null; var infoString = isMissing? "<color=#ff5f5f>" + EditorUtils.TypeName(agentType) + "</color>": EditorUtils.TypeName(agentType); GUI.color = new Color(1f, 1f, 1f, agentIsOverride? 1f : 0.5f); GUI.backgroundColor = GUI.color; GUILayout.BeginVertical("box"); GUILayout.BeginHorizontal(); if (!taskAgent.useBlackboard) { if (agentIsOverride) { taskAgent.value = EditorGUILayout.ObjectField(taskAgent.value, agentType, true) as Component; //if (taskAgent.value != null && !agentType.IsAssignableFrom(taskAgent.value.GetType())) // taskAgent.value = taskAgent.value.GetComponent(agentType); } else { GUILayout.BeginHorizontal(); var compIcon = EditorGUIUtility.ObjectContent(null, agentType).image; if (compIcon != null) { GUILayout.Label(compIcon, GUILayout.Width(16), GUILayout.Height(16)); } GUILayout.Label("Use Owner (" + infoString + ")"); GUILayout.EndHorizontal(); } } else { GUI.color = new Color(0.9f, 0.9f, 1f, 1f); if (taskAgent.bb) { var dataNames = taskAgent.bb.GetDataNames(typeof(GameObject)).ToList(); dataNames.AddRange(taskAgent.bb.GetDataNames(agentType)); if (dataNames.Contains(taskAgent.dataName) || string.IsNullOrEmpty(taskAgent.dataName)) { taskAgent.dataName = EditorUtils.StringPopup(taskAgent.dataName, dataNames, false, true); } else { taskAgent.dataName = EditorGUILayout.TextField(taskAgent.dataName); } } else { taskAgent.dataName = EditorGUILayout.TextField(taskAgent.dataName); } } GUI.color = Color.white; if (agentIsOverride) { if (isMissing) { GUILayout.Label("(" + infoString + ")", GUILayout.Height(15)); } taskAgent.useBlackboard = EditorGUILayout.Toggle(taskAgent.useBlackboard, EditorStyles.radioButton, GUILayout.Width(18)); } if (!Application.isPlaying) { agentIsOverride = EditorGUILayout.Toggle(agentIsOverride, GUILayout.Width(18)); } GUILayout.EndHorizontal(); GUILayout.EndVertical(); GUI.color = Color.white; GUI.backgroundColor = Color.white; if (GUI.changed) { EditorUtility.SetDirty(this); } }
public void ShowVariablesGUI() { GUI.backgroundColor = new Color(0.8f, 0.8f, 1); if (GUILayout.Button("Add Variable")) { GenericMenu.MenuFunction2 Selected = delegate(object selectedType){ Undo.RecordObject(this, "New Variable"); var newData = AddData("my" + EditorUtils.TypeName((Type)selectedType), (Type)selectedType); Undo.RegisterCreatedObjectUndo(newData, "New Variable"); }; var assetPaths = AssetDatabase.GetAllAssetPaths().Select(p => EditorUtils.Strip(p, "/")).ToList(); var menu = new GenericMenu(); foreach (KeyValuePair <Type, Type> pair in GetTypeDataRelation()) { if (typeof(MonoBehaviour).IsAssignableFrom(pair.Key)) { if (!assetPaths.Contains(pair.Key.Name + ".cs") && !assetPaths.Contains(pair.Key.Name + ".js") && !assetPaths.Contains(pair.Key.Name + ".boo")) { Debug.LogWarning(string.Format("Class Name {0} is different from it's script name", pair.Key.Name)); continue; } } menu.AddItem(new GUIContent((!string.IsNullOrEmpty(pair.Value.Namespace)? pair.Value.Namespace + "/": "") + EditorUtils.TypeName(pair.Value)), false, Selected, pair.Value); menu.ShowAsContext(); Event.current.Use(); } } GUI.backgroundColor = Color.white; if (variables.Count != 0) { GUILayout.BeginHorizontal(); GUI.color = Color.yellow; GUILayout.Label("Name", GUILayout.MaxWidth(100), GUILayout.ExpandWidth(true)); GUILayout.Label("Value", GUILayout.MaxWidth(100), GUILayout.ExpandWidth(true)); GUI.color = Color.white; GUILayout.EndHorizontal(); } else { EditorGUILayout.HelpBox("Blackboard has no variables", MessageType.Info); } EditorUtils.ReorderableList(variables, delegate(int i){ var data = variables[i]; if (data != null) { GUILayout.BeginHorizontal(); if (!Application.isPlaying) { GUI.backgroundColor = new Color(1, 1, 1, 0.8f); GUILayout.Box("", GUILayout.Width(6)); GUI.backgroundColor = new Color(0.7f, 0.7f, 0.7f, 0.3f); data.dataName = EditorGUILayout.TextField(data.dataName, GUILayout.MaxWidth(100), GUILayout.ExpandWidth(true)); } else { GUI.backgroundColor = new Color(0.7f, 0.7f, 0.7f); GUI.color = new Color(0.8f, 0.8f, 1f); GUILayout.Label(data.dataName, GUILayout.MaxWidth(100), GUILayout.ExpandWidth(true)); } GUI.color = Color.white; GUI.backgroundColor = Color.white; Undo.RecordObject(data, "Data Change"); data.ShowDataGUI(); if (GUI.changed) { EditorUtility.SetDirty(data); } GUI.color = Color.white; GUI.backgroundColor = Color.white; if (GUILayout.Button("X", GUILayout.Width(20), GUILayout.Height(16))) { if (EditorUtility.DisplayDialog("Delete Data '" + data.dataName + "'", "Are you sure?", "Yes", "No!")) { Undo.DestroyObjectImmediate(data); Undo.RecordObject(this, "Delete Data"); variables.Remove(data); } } GUI.backgroundColor = new Color(0.7f, 0.7f, 0.7f); GUILayout.EndHorizontal(); } }); GUI.backgroundColor = Color.white; GUI.color = Color.white; if (GUI.changed) { EditorUtility.SetDirty(this); } }