示例#1
0
    public ObjectParameterList CreateControls(EditObject objectToReflect, RectTransform root)
    {
        var reflectedObj = new ObjectParameterList();

        reflectedObj.reflectedObject = objectToReflect;

        // List all public fields
        var objType = objectToReflect.GetType();

        var props = objType.GetProperties(BindingFlags.Public | BindingFlags.Instance);

        foreach (var prop in props)
        {
            // Find a parameter ui for this property type
            var prefab = parameterPrefabs.FirstOrDefault(pp => pp.CanEdit(prop.PropertyType, prop.GetCustomAttributes(false)));
            if (prefab != null)
            {
                // Create the UI
                var uiparam = GameObject.Instantiate(prefab, Vector3.zero, Quaternion.identity, root);
                uiparam.Setup(prop, objectToReflect);
                uiparam.onParameterModified += (ui, val) =>
                {
                    reflectedObj.onParameterChanged?.Invoke(objectToReflect, ui, val);
                };
                reflectedObj.parameters.Add(uiparam);
            }
        }

        var fields = objType.GetFields(BindingFlags.Public | BindingFlags.Instance);

        foreach (var field in fields)
        {
            // Find a parameter ui for this field's type
            var att = field.GetCustomAttributes(false);
            if (!att.Any(a => a.GetType() == typeof(IgnoreParameterAttribute)))
            {
                var prefab = parameterPrefabs.FirstOrDefault(pp => pp.CanEdit(field.FieldType, att));
                if (prefab != null)
                {
                    // Create the UI
                    var uiparam = GameObject.Instantiate(prefab, Vector3.zero, Quaternion.identity, root);
                    uiparam.Setup(field, objectToReflect);
                    uiparam.onParameterModified += (ui, val) =>
                    {
                        reflectedObj.onParameterChanged?.Invoke(objectToReflect, ui, val);
                    };
                    reflectedObj.parameters.Add(uiparam);
                }
            }
        }
        return(reflectedObj);
    }
示例#2
0
        public Property(string methodId, IParameterList args)
        {
            var names = methodId.Split(ID_SEPERATOR);

            m_MethodTargetType = names[0];
            m_ParameterType    = names[1];
            m_MethodName       = names[2];

            parameterList         = args;
            m_ObjectParameterList = (args as ObjectParameterList);

            OnBeforeSerialize();
            OnAfterDeserialize();
        }