示例#1
0
        /// <summary>
        /// MethodInfo からパラメータ生成
        /// </summary>
        internal Args(MethodInfo info)
        {
            var parameters = info.GetParameters();

            _args = new ArgValue();
            foreach (var t in parameters)
            {
                var name = t.Name;
                var type = t.ParameterType;
                var v    = new Value();
                v.Set(type, name);
                _args.Add(name, v);
            }
        }
        internal ArrayList OnGUI()
        {
            // Header
            using (new GUILayout.HorizontalScope())
            {
                EditorGUILayout.LabelField(string.Format("{0} [{1}]", _label, Values.Length));
                GUILayout.FlexibleSpace();

                // 要素の追加
                if (GUILayout.Button(EditorGUIUtility.TrIconContent("Toolbar Plus"), "RL FooterButton",
                                     GUILayout.Width(16)))
                {
                    var v = new Value();
                    v.Set(_elementType, "");
                    Values.Add("", v);
                }
            }

            using (new EditorGUI.IndentLevelScope())
            {
                for (var i = 0; i < Values.Length; i++)
                {
                    using (new EditorGUILayout.HorizontalScope())
                    {
                        EditorGUILayout.LabelField("Element " + i);
                        if (GUILayout.Button(EditorGUIUtility.TrIconContent("Toolbar Minus"), "RL FooterButton", GUILayout.Width(16)))
                        {
                            Values.Remove(i);
                            GUIUtility.ExitGUI();
                        }
                    }
                    Values[i].OnGUI();
                }
            }

            return(this);
        }
        internal void Set(Type type, string name)
        {
            if (_ints.IsTarget(type))
            {
                _ints.Add(name);
            }
            else if (_floats.IsTarget(type))
            {
                _floats.Add(name);
            }
            else if (_strings.IsTarget(type))
            {
                _strings.Add(name, "");
            }
            else if (_bools.IsTarget(type))
            {
                _bools.Add(name);
            }
            else if (_enums.IsTarget(type))
            {
                _enums.Add(type);
            }
            else if (_vector2s.IsTarget(type))
            {
                _vector2s.Add(name);
            }
            else if (_vector3s.IsTarget(type))
            {
                _vector3s.Add(name);
            }
            else if (_vector2Ints.IsTarget(type))
            {
                _vector2Ints.Add(name);
            }
            else if (_vector3Ints.IsTarget(type))
            {
                _vector3Ints.Add(name);
            }
            else if (_colors.IsTarget(type))
            {
                _colors.Add(name);
            }
            else if (_arrayes.IsTarget(type))
            {
                _arrayes.Add(name, type);
            }

            // 上記でヒットしなかった
            else if (IsClassOrStruct(type))
            {
                var v = new Value(name);
                // フィールドから要素を構築
                foreach (var field in type.GetFields(Flags))
                {
                    v.Set(field.FieldType, field.Name);
                }

                _values.Add(name, v);
            }
            else
            {
                Debug.LogError("Invalid Type: " + type.Name);
            }
        }