private void OnEnable()
    {
        //default elements to draw first
        loopback          = serializedObject.FindProperty("loopback");
        dataType          = serializedObject.FindProperty("dataType");
        fitText           = serializedObject.FindProperty("fitText");
        includeObjectType = serializedObject.FindProperty("includeType");

        OptionSelector options = target as OptionSelector;

        dt = options.dataType;
    }
    public override void OnInspectorGUI()
    {
        serializedObject.Update();
        DrawDefaultElements();

        OptionSelector options = target as OptionSelector;

        if (dt != options.dataType && Application.isPlaying)
        {
            options.FireEvent(); dt = options.dataType;
        }

        if (options.dataType == OptionSelector.DataType.Numeric)
        {
            options.minInt = EditorGUILayout.IntField("Min", options.minInt);
            options.maxInt = EditorGUILayout.IntField("Max", options.maxInt);
        }
        else if (options.dataType == OptionSelector.DataType.Decimal)
        {
            options.minFloat  = EditorGUILayout.FloatField("Min", options.minFloat);
            options.maxFloat  = EditorGUILayout.FloatField("Max", options.maxFloat);
            options.increment = EditorGUILayout.FloatField("Increment", options.increment);
        }
        else if (options.dataType == OptionSelector.DataType.String)
        {
            EditorGUILayout.PropertyField(serializedObject.FindProperty("stringValues"), true);
        }
        else if (options.dataType == OptionSelector.DataType.Enum)
        {
            EditorGUILayout.LabelField("Set Enum by script: OptionSelector.SetEnumType(Enum);");
        }
        else if (options.dataType == OptionSelector.DataType.Object)
        {
            EditorGUILayout.PropertyField(serializedObject.FindProperty("objectValues"), true);
            EditorGUILayout.PropertyField(includeObjectType);
        }
        else if (options.dataType == OptionSelector.DataType.Custom)
        {
            EditorGUILayout.LabelField("Set custom data by script: OptionSelector.SetCustomType(object);");
        }

        EditorGUILayout.Space();
        serializedObject.ApplyModifiedProperties();
    }