Example #1
0
        public void EditVariable(Variable editVariable)
        {
            m_EditVariable = editVariable;
            m_EditMode     = EditMode.EditExistingVariable;

            m_AttachScript = editVariable.HasScript();
        }
Example #2
0
        public void EditVariable(Variable editVariable)
        {
            m_EditVariable = editVariable;
            m_EditMode = EditMode.EditExistingVariable;

            m_AttachScript = editVariable.HasScript();
        }
Example #3
0
        public void ShowStateGUI()
        {
            GUI.backgroundColor = new Color(0.8f, 0.8f, 1);

            GUILayout.BeginHorizontal();

            if (m_EditMode == EditMode.Nothing)
            {
                if (GUILayout.Button("Add Variable", GUILayout.MaxWidth(120), GUILayout.ExpandWidth(false)))
                {
                    m_EditMode     = EditMode.AddNewVariable;
                    m_EditVariable = new Variable();
                    m_EditVariable.m_GameObject = gameObject;
                    m_AttachScript = false;
                }
            }
            else
            {
                if (GUILayout.Button("Cancel", GUILayout.MaxWidth(120), GUILayout.ExpandWidth(false)))
                {
                    m_EditVariable.RemoveScript();
                    m_EditMode     = EditMode.Nothing;
                    m_EditVariable = new Variable();
                    m_EditVariable.m_GameObject = gameObject;
                }
            }

            if ((m_EditMode == EditMode.AddNewVariable || m_EditMode == EditMode.EditExistingVariable) && GUILayout.Button("Ok", GUILayout.MaxWidth(120), GUILayout.ExpandWidth(false)))
            {
                if (m_EditMode == EditMode.AddNewVariable)
                {
                    if (!HasVariable(m_EditVariable.m_Name) && m_EditVariable.m_Name != "")
                    {
                        Variable newVariable = new Variable(m_EditVariable);

                        AddVariable(newVariable);

                        m_EditMode = EditMode.Nothing;
                    }
                    else
                    {
                        EditorUtility.DisplayDialog("Error", "There is already a variable with this name in this state. Please give the variable a unique name to be called from", "Ok");
                    }
                }
                else
                {
                    Variable newVariable = new Variable(m_EditVariable.m_Name, m_EditVariable.GetValue());
                    newVariable.m_GameObject = gameObject;

                    if (m_AttachScript)
                    {
                        newVariable.SetScript(m_EditVariable.m_UpdateScript);
                    }

                    SetVariable(newVariable);

                    m_EditMode = EditMode.Nothing;
                }
            }

            GUILayout.FlexibleSpace();
            float nameWidth   = 100;
            float typeWidth   = 100;
            float valueWidth  = 60;
            float scriptWidth = 180;

            EditorGUIUtility.labelWidth = 80;
            m_DebugMode = EditorGUILayout.Toggle("DebugMode: ", m_DebugMode, GUILayout.MaxWidth(95));
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUI.color = Color.yellow;
            GUILayout.Label("Name", GUILayout.MaxWidth(nameWidth), GUILayout.MinWidth(nameWidth), GUILayout.ExpandWidth(false));
            GUILayout.Label("Type", GUILayout.MaxWidth(typeWidth), GUILayout.MinWidth(typeWidth), GUILayout.ExpandWidth(false));
            GUILayout.Label("Value", GUILayout.MaxWidth(valueWidth), GUILayout.MinWidth(valueWidth), GUILayout.ExpandWidth(false));
            GUILayout.Label("Script", GUILayout.MaxWidth(scriptWidth), GUILayout.MinWidth(scriptWidth), GUILayout.ExpandWidth(false));
            GUI.color = Color.white;
            GUILayout.EndHorizontal();

            if (m_EditMode == EditMode.AddNewVariable || m_EditMode == EditMode.EditExistingVariable)
            {
                GUILayout.BeginHorizontal();

                if (m_EditMode == EditMode.AddNewVariable)
                {
                    m_EditVariable.m_Name = EditorGUILayout.TextField(m_EditVariable.m_Name, GUILayout.MaxWidth(nameWidth), GUILayout.MinWidth(nameWidth), GUILayout.ExpandWidth(false));
                }
                else
                {
                    EditorGUILayout.LabelField(m_EditVariable.m_Name, GUILayout.MaxWidth(nameWidth), GUILayout.MinWidth(nameWidth), GUILayout.ExpandWidth(false));
                }

                VariableType variableType = (VariableType)EditorGUILayout.EnumPopup(m_EditVariable.GetVariableType(), GUILayout.MaxWidth(typeWidth), GUILayout.MinWidth(typeWidth), GUILayout.ExpandWidth(false));
                if (variableType != m_EditVariable.GetVariableType())
                {
                    m_EditVariable.SetVariableType(variableType);
                    m_AttachScript = false;
                }

                if (m_EditVariable.GetVariableType() == VariableType.BOOLEAN)
                {
                    int index = (bool)m_EditVariable.GetValue() ? 1 : 0;

                    index = EditorGUILayout.Popup(index, m_BooleanStrings, GUILayout.MaxWidth(valueWidth), GUILayout.MinWidth(valueWidth), GUILayout.ExpandWidth(false));

                    m_EditVariable.SetValue(index == 1 ? true : false);
                }
                else if (m_EditVariable.GetVariableType() == VariableType.STRING)
                {
                    string stringValue = (string)m_EditVariable.GetValue();
                    m_EditVariable.SetValue(EditorGUILayout.TextArea(stringValue, GUILayout.MaxWidth(valueWidth), GUILayout.MinWidth(valueWidth), GUILayout.ExpandWidth(false)));
                }
                else if (m_EditVariable.GetVariableType() == VariableType.INT)
                {
                    int intValue = (int)m_EditVariable.GetValue();
                    m_EditVariable.SetValue(EditorGUILayout.IntField((int)intValue, GUILayout.MaxWidth(valueWidth), GUILayout.MinWidth(valueWidth), GUILayout.ExpandWidth(false)));
                }
                else if (m_EditVariable.GetVariableType() == VariableType.FLOAT)
                {
                    float floatValue = (float)m_EditVariable.GetValue();
                    m_EditVariable.SetValue(EditorGUILayout.FloatField(floatValue, GUILayout.MaxWidth(valueWidth), GUILayout.MinWidth(valueWidth), GUILayout.ExpandWidth(false)));
                }

                if (m_AttachScript = EditorGUILayout.Toggle(m_AttachScript, GUILayout.MaxWidth(10)))
                {
                    List <ScriptDescriptor> sensorScripts         = ScriptManager.GetScriptsByType(typeof(BaseSensor));
                    List <ScriptDescriptor> filteredSensorScripts = new List <ScriptDescriptor>();
                    List <String>           sensorScriptNames     = new List <String>();

                    for (int i = 0; i < sensorScripts.Count(); i++)
                    {
                        if (sensorScripts[i].m_ReturnType.ToUpper() == m_EditVariable.GetVariableType().ToString())
                        {
                            filteredSensorScripts.Add(sensorScripts[i]);
                            sensorScriptNames.Add(sensorScripts[i].m_Name);
                        }
                    }

                    if (filteredSensorScripts.Count == 0)
                    {
                        EditorGUILayout.HelpBox("None of the sensor scripts return a type compatible with this variable type", MessageType.Info);
                    }
                    else
                    {
                        int sensorScriptIndex = -1;

                        if (m_EditVariable.m_UpdateScriptType != null)
                        {
                            sensorScriptIndex = filteredSensorScripts.FindIndex(sensorScript => sensorScript.m_Type == m_EditVariable.m_UpdateScriptType);
                        }

                        int newSensorScriptIndex = EditorGUILayout.Popup(Mathf.Max(sensorScriptIndex, 0), sensorScriptNames.ToArray(), GUILayout.MaxWidth(scriptWidth), GUILayout.MinWidth(valueWidth), GUILayout.ExpandWidth(false));

                        if ((newSensorScriptIndex > -1) && (newSensorScriptIndex != sensorScriptIndex))
                        {
                            m_EditVariable.SetScript(filteredSensorScripts.ElementAtOrDefault(newSensorScriptIndex).m_Type);

                            if (m_DebugMode)
                            {
                                Debug.Log("Updating AttachedScript: " + filteredSensorScripts.ElementAt(newSensorScriptIndex).m_Name);
                            }
                        }
                    }
                }
                else
                {
                    m_EditVariable.RemoveScript();
                }

                GUILayout.EndHorizontal();

                if (m_AttachScript && m_EditVariable.HasScript())
                {
                    m_EditVariable.m_UpdateScript.ShowScriptGUI();
                }
            }

            if (m_Variables.Count == 0)
            {
                EditorGUILayout.HelpBox("There are no variables in this state. Add some with the Add Variable button", MessageType.Info);
            }

            foreach (KeyValuePair <string, Variable> pair in m_Variables.ToArray())
            {
                if (pair.Value != null)
                {
                    GUILayout.BeginHorizontal();
                    GUI.color           = Color.white;
                    GUI.backgroundColor = Color.white;

                    if (Application.isPlaying)
                    {
                        GUILayout.Label(pair.Value.m_Name, GUILayout.MaxWidth(nameWidth), GUILayout.MinWidth(nameWidth), GUILayout.ExpandWidth(false));
                        GUILayout.Label(pair.Value.GetType().ToString(), GUILayout.MaxWidth(typeWidth), GUILayout.MinWidth(typeWidth), GUILayout.ExpandWidth(false));

                        if (pair.Value.GetValue() != null)
                        {
                            GUILayout.Label(pair.Value.GetValue().ToString(), GUILayout.MaxWidth(valueWidth), GUILayout.MinWidth(valueWidth), GUILayout.ExpandWidth(false));
                        }
                        else
                        {
                            GUILayout.Label("", GUILayout.MaxWidth(valueWidth), GUILayout.MinWidth(valueWidth), GUILayout.ExpandWidth(false));
                        }

                        if (pair.Value.HasScript())
                        {
                            ScriptNameAttribute nameAttribute = pair.Value.m_UpdateScriptType.GetCustomAttributes(typeof(ScriptNameAttribute), false).FirstOrDefault() as ScriptNameAttribute;

                            GUILayout.Label(nameAttribute.name, GUILayout.MaxWidth(scriptWidth), GUILayout.MinWidth(scriptWidth), GUILayout.ExpandWidth(false));
                        }
                    }
                    else
                    {
                        GUILayout.Label(pair.Value.m_Name, GUILayout.MaxWidth(nameWidth), GUILayout.MinWidth(nameWidth), GUILayout.ExpandWidth(false));
                        GUILayout.Label(pair.Value.GetTypeString(), GUILayout.MaxWidth(typeWidth), GUILayout.MinWidth(typeWidth), GUILayout.ExpandWidth(false));

                        if (pair.Value.GetValue() != null)
                        {
                            GUILayout.Label(pair.Value.GetValue().ToString(), GUILayout.MaxWidth(valueWidth), GUILayout.MinWidth(valueWidth), GUILayout.ExpandWidth(false));
                        }

                        if (pair.Value.HasScript())
                        {
                            ScriptNameAttribute nameAttribute = pair.Value.m_UpdateScriptType.GetCustomAttributes(typeof(ScriptNameAttribute), false).FirstOrDefault() as ScriptNameAttribute;

                            GUILayout.Label(nameAttribute.name, GUILayout.MaxWidth(scriptWidth), GUILayout.MinWidth(scriptWidth), GUILayout.ExpandWidth(false));
                        }

                        GUILayout.FlexibleSpace();                         //Set layout passed this point to align to the right
                        GUI.backgroundColor = new Color(0.6f, 1f, 0.6f);

                        if (GUILayout.Button("E", GUILayout.MaxWidth(20)))
                        {
                            EditVariable(pair.Value);
                        }

                        GUI.backgroundColor = new Color(1, 0.6f, 0.6f);

                        if (GUILayout.Button("X", GUILayout.MaxWidth(20)))
                        {
                            if (EditorUtility.DisplayDialog("Delete Variable " + pair.Value.m_Name, "Are you sure?", "Yes", "No"))
                            {
                                pair.Value.RemoveScript();
                                RemoveVariable(pair.Value.m_Name);
                            }
                        }
                    }

                    GUILayout.EndHorizontal();
                }
            }

            GUI.backgroundColor = Color.white;
            GUI.color           = Color.white;
        }