////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; } }
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); }