public static bool IsIntegersOnly(this Sensor.CameraOption opt) { Func <float, bool> is_integer = (v) => v == Math.Floor(v); return(is_integer(opt.Min) && is_integer(opt.Max) && is_integer(opt.Default) && is_integer(opt.Step)); }
public static bool IsEnum(this Sensor.CameraOption opt, Sensor.SensorOptions s) { if (opt.Step < 0.001f) { return(false); } for (float i = opt.Min; i <= opt.Max; i += opt.Step) { if (string.IsNullOrEmpty(s.OptionValueDescription(opt.Key, i))) { return(false); } } return(true); }
public static bool IsCheckbox(this Sensor.CameraOption opt) { return(opt.Max == 1.0f && opt.Min == 0.0f && opt.Step == 1.0f); }
void DrawOption(Sensor sensor, Sensor.CameraOption opt) { if (!cachedValue.ContainsKey(opt)) { cachedValue [opt] = opt.Value; } string k = opt.Key.ToString(); float v = cachedValue [opt]; if (opt.ReadOnly) { EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField(k, GUILayout.Width(EditorGUIUtility.labelWidth - 4)); EditorGUILayout.SelectableLabel(v.ToString(), EditorStyles.textField, GUILayout.Height(EditorGUIUtility.singleLineHeight)); EditorGUILayout.EndHorizontal(); } else if (opt.IsCheckbox()) { bool isChecked = Convert.ToBoolean(v); if (isChecked != EditorGUILayout.Toggle(k, isChecked)) { cachedValue [opt] = opt.Value = Convert.ToSingle(!isChecked); } } else if (opt.IsEnum(sensor.Options)) { var valuesStrings = new List <string> (); int selected = 0; int counter = 0; for (float i = opt.Min; i <= opt.Max; i += opt.Step, counter++) { if (Math.Abs(i - v) < 0.001) { selected = counter; } valuesStrings.Add(sensor.Options.OptionValueDescription(opt.Key, i)); } var newSelection = EditorGUILayout.Popup(k, selected, valuesStrings.ToArray()); if (newSelection != selected) { cachedValue [opt] = opt.Value = Convert.ToSingle(newSelection); } } else if (opt.IsIntegersOnly()) { var newVal = EditorGUILayout.IntSlider(k, (int)v, (int)opt.Min, (int)opt.Max); if (newVal != Convert.ToInt32(v)) { cachedValue [opt] = opt.Value = Convert.ToSingle(newVal); } } else { float s = EditorGUILayout.Slider(k, v, opt.Min, opt.Max); if (!Mathf.Approximately(s, v)) { cachedValue [opt] = opt.Value = s; } } }