コード例 #1
0
    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));
    }
コード例 #2
0
    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);
    }
コード例 #3
0
 public static bool IsCheckbox(this Sensor.CameraOption opt)
 {
     return(opt.Max == 1.0f &&
            opt.Min == 0.0f &&
            opt.Step == 1.0f);
 }
コード例 #4
0
    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;
            }
        }
    }