コード例 #1
0
            public void Draw(int id)
            {
                // Init available params
                AvailableParameters = new Dictionary <Parameter.PARAM_TYPE, List <NodeParam> >();
                foreach (var val in Enum.GetValues(typeof(Parameter.PARAM_TYPE)))
                {
                    AvailableParameters.Add((Parameter.PARAM_TYPE)val, new List <NodeParam>());
                }
                g_ScrollPosition = GUILayout.BeginScrollView(g_ScrollPosition);
                GUILayout.BeginHorizontal("Box");
                GUILayout.Label(new GUIContent("Parameters"));
                GUILayout.FlexibleSpace();
                if (GUILayout.Button(new GUIContent("+")))
                {
                    AddParameter();
                }
                GUILayout.EndHorizontal();
                // Draw Parameters
                if (Parameters.Count > 0)
                {
                    NodeParam toRemove = null;
                    GUILayout.BeginVertical("Box");
                    int index = 1;
                    foreach (NodeParam p in Parameters)
                    {
                        GUILayout.BeginVertical("Box");
                        GUILayout.BeginHorizontal();
                        GUILayout.FlexibleSpace();
                        if (GUILayout.Button(new GUIContent("-")))
                        {
                            toRemove = p;
                        }
                        GUILayout.EndHorizontal();
                        GUILayout.BeginHorizontal();
                        string paramName = string.IsNullOrEmpty(p.Name) ? "P" + index : p.Name;
                        GUILayout.Label(new GUIContent("Name"));
                        p.Name = GUILayout.TextField(paramName);
                        // = EditorGUILayout.TextField("Name", paramName);
                        GUILayout.EndHorizontal();
                        GUILayout.BeginHorizontal();
                        GUILayout.Label("Type");
                        GUILayout.FlexibleSpace();
                        p.AssignedType = (Parameter.PARAM_TYPE)EditorGUILayout.EnumPopup(p.AssignedType);
                        AvailableParameters[p.AssignedType].Add(p);
                        GUILayout.EndHorizontal();
                        var val = p.GetValue();
                        switch (p.AssignedType)
                        {
                        case Parameter.PARAM_TYPE.BOOL:
                            if (!(val is Boolean))
                            {
                                val = false;
                            }
                            p.SetValue(GUILayout.Toggle((bool)val, new GUIContent("Value")));
                            break;

                        case Parameter.PARAM_TYPE.AGENT:
                            if (!(val is UnityEngine.Object))
                            {
                                val = null;
                            }
                            UnityEngine.Object a = EditorGUILayout.ObjectField((UnityEngine.Object)val ?? null, typeof(GameObject), true);
                            if (a != null && a is GameObject && ((GameObject)a).GetComponent <NPCController>() != null)
                            {
                                p.SetValue(a, typeof(UnityEngine.Object));
                            }
                            break;

                        case Parameter.PARAM_TYPE.GAMEOBJECT:
                            if (!(val is UnityEngine.Object))
                            {
                                val = null;
                            }
                            UnityEngine.Object o = EditorGUILayout.ObjectField((UnityEngine.Object)val ?? null, typeof(GameObject), true);
                            if (o != null)
                            {
                                p.SetValue(o, typeof(UnityEngine.Object));
                            }
                            break;

                        case Parameter.PARAM_TYPE.NUMERICAL:
                            if (!(val is Single))
                            {
                                val = 0;
                            }
                            p.SetValue(EditorGUILayout.FloatField(Convert.ToSingle(val)));
                            break;

                        case Parameter.PARAM_TYPE.TRANSFORM:
                            if (!(val is Transform))
                            {
                                val = null;
                            }
                            Transform t = (Transform)EditorGUILayout.ObjectField((Transform)val ?? null, typeof(Transform), true);
                            if (t != null)
                            {
                                p.SetValue(t, typeof(Transform));
                            }
                            break;

                        case Parameter.PARAM_TYPE.STRING:
                            if (!(val is string))
                            {
                                val = null;
                            }
                            p.SetValue(EditorGUILayout.TextField(val == null ? "" : val.ToString()));
                            break;
                        }
                        GUILayout.EndVertical();
                        index++;
                    }
                    if (toRemove != null)
                    {
                        RemoveParameter(toRemove);
                    }
                    GUILayout.EndVertical();
                }
                // Draw Children
                GUILayout.BeginHorizontal("Box");
                GUILayout.Label(new GUIContent("Action Nodes"));
                GUILayout.EndHorizontal();
                CollectActionChildren(TreeRoot);
                ActionNodes.Sort((Node n1, Node n2) => { return(n1.NodeID.CompareTo(n2.NodeID)); });
                foreach (Node n in ActionNodes)
                {
                    NodeParam currParam = n.Parameters.SingleOrDefault(param => param.GetValue() is NPCAffordance);
                    if (currParam != null)
                    {
                        GUILayout.BeginVertical("Box");
                        NPCAffordance affordance = (NPCAffordance)currParam.GetValue();
                        GUILayout.Label("Node: " + n.NodeID + " - " + affordance.Name);
                        GUILayout.EndVertical();
                    }
                }
                GUILayout.EndScrollView();
            }