////REVIEW: check whether parameters have *actually* changed?
        /// <summary>
        /// Refresh <see cref="m_Parameters"/> from the current parameter values in <paramref name="target"/>.
        /// </summary>
        /// <param name="target">An instance of the current type we are editing parameters on.</param>
        private void ReadParameterValuesFrom(object target)
        {
            if (m_Parameters == null)
            {
                return;
            }

            for (var i = 0; i < m_Parameters.Length; ++i)
            {
                var parameter = m_Parameters[i];

                var newValue = new InputControlLayout.ParameterValue();
                newValue.name = parameter.value.name;

                var value = parameter.field.GetValue(target);
                if (parameter.isEnum)
                {
                    var intValue = Convert.ToInt32(value);
                    newValue.SetValue(intValue);
                }
                else
                {
                    switch (parameter.value.type)
                    {
                    case InputControlLayout.ParameterType.Float:
                    {
                        var floatValue = Convert.ToSingle(value);
                        newValue.SetValue(floatValue);
                        break;
                    }

                    case InputControlLayout.ParameterType.Boolean:
                    {
                        var intValue = Convert.ToInt32(value);
                        newValue.SetValue(intValue);
                        break;
                    }

                    case InputControlLayout.ParameterType.Integer:
                    {
                        var boolValue = Convert.ToBoolean(value);
                        newValue.SetValue(boolValue);
                        break;
                    }
                    }
                }

                m_Parameters[i].value = newValue;
            }
        }
示例#2
0
        InputControlLayout.ParameterValue[] GetFieldsFromClass()
        {
            var resultParameters     = new List <InputControlLayout.ParameterValue>();
            var serializedParameters = new List <InputControlLayout.ParameterValue>();

            int idx = Array.FindIndex(m_NamesAndParams, a => a.name == m_SelectedRow);

            if (idx >= 0)
            {
                serializedParameters.AddRange(m_NamesAndParams[idx].parameters);
            }

            var rowType = m_ListOptions.LookupTypeRegistration(m_SelectedRow);
            var fields  = rowType.GetFields(BindingFlags.Public | BindingFlags.Instance);

            foreach (var field in fields)
            {
                idx = serializedParameters.FindIndex(a => a.name == field.Name);
                if (idx >= 0)
                {
                    resultParameters.Add(serializedParameters[idx]);
                }
                else
                {
                    var paramValue = new InputControlLayout.ParameterValue();
                    paramValue.name = field.Name;

                    if (field.FieldType == typeof(bool))
                    {
                        paramValue.type = InputControlLayout.ParameterType.Boolean;
                    }
                    else if (field.FieldType == typeof(int))
                    {
                        paramValue.type = InputControlLayout.ParameterType.Integer;
                    }
                    else if (field.FieldType == typeof(float))
                    {
                        paramValue.type = InputControlLayout.ParameterType.Float;
                    }

                    resultParameters.Add(paramValue);
                }
            }
            return(resultParameters.ToArray());
        }
        /// <summary>
        /// Get the current parameter values according to the editor state.
        /// </summary>
        /// <returns>An array of parameter values.</returns>
        public InputControlLayout.ParameterValue[] GetParameters()
        {
            if (m_Parameters == null)
            {
                return(null);
            }

            // See if we have parameters that aren't at their default value.
            var countOfParametersNotAtDefaultValue = 0;

            for (var i = 0; i < m_Parameters.Length; ++i)
            {
                if (!m_Parameters[i].isAtDefault)
                {
                    ++countOfParametersNotAtDefaultValue;
                }
            }

            // If not, we return null.
            if (countOfParametersNotAtDefaultValue == 0)
            {
                return(null);
            }

            // Collect non-default parameter values.
            var result = new InputControlLayout.ParameterValue[countOfParametersNotAtDefaultValue];
            var index  = 0;

            for (var i = 0; i < m_Parameters.Length; ++i)
            {
                var parameter = m_Parameters[i];
                if (parameter.isAtDefault)
                {
                    continue;
                }

                result[index++] = parameter.value;
            }

            return(result);
        }