Ejemplo n.º 1
0
        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();
        }
Ejemplo n.º 2
0
        //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);
            }
        }
Ejemplo n.º 3
0
        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);
            }
        }