private void EnumChanged(ChangeEvent <Enum> _event)
        {
            m_ValueField.RemoveFromHierarchy();
            ConfiguratorValueType newValue = (ConfiguratorValueType)_event.newValue;

            m_ValueField = ConfiguratorTypeConverter.CreateFieldBasedOnType(newValue, m_WorldStateDescription.Value, "Value", ValueFieldChanged);
            m_ValueField.AddToClassList("desiredValue");
            hierarchy.Add(m_ValueField);
        }
        public static void SetWithoutNotifyForSpecifiedFieldType(ConfiguratorValueType _valueType, VisualElement _field, object _value)
        {
            switch (_valueType)
            {
            case ConfiguratorValueType.BOOL:
                (_field as Toggle).SetValueWithoutNotify(_value.StructConvertTo <bool>());
                break;

            case ConfiguratorValueType.INT:
                (_field as IntegerField).SetValueWithoutNotify(_value.StructConvertTo <int>());
                break;

            case ConfiguratorValueType.FLOAT:
                (_field as FloatField).SetValueWithoutNotify(_value.StructConvertTo <float>());
                break;

            case ConfiguratorValueType.STRING:
                (_field as TextField).SetValueWithoutNotify(_value.TryConvertTo <string>());
                break;

            case ConfiguratorValueType.VECTOR2:
                (_field as Vector2Field).SetValueWithoutNotify(_value.StructConvertTo <Vector2>());
                break;

            case ConfiguratorValueType.VECTOR3:
                (_field as Vector3Field).SetValueWithoutNotify(_value.StructConvertTo <Vector3>());
                break;

            case ConfiguratorValueType.VECTOR2INT:
                (_field as Vector2IntField).SetValueWithoutNotify(_value.StructConvertTo <Vector2Int>());
                break;

            case ConfiguratorValueType.VECTOR3INT:
                (_field as Vector3IntField).SetValueWithoutNotify(_value.StructConvertTo <Vector3Int>());
                break;

            default:
                break;
            }
        }
        public static VisualElement CreateFieldBasedOnType(ConfiguratorValueType _valueType, object _initialValue, string _label, System.Action _changeEventCallback)
        {
            switch (_valueType)
            {
            case ConfiguratorValueType.BOOL:
                Toggle newToggle = new Toggle(_label)
                {
                    value = _initialValue.StructConvertTo <bool>()
                };
                newToggle.RegisterCallback <ChangeEvent <bool> >(_event => _changeEventCallback?.Invoke());
                return(newToggle);

            case ConfiguratorValueType.INT:
                IntegerField newIntegerField = new IntegerField(_label)
                {
                    value = _initialValue.StructConvertTo <int>()
                };
                newIntegerField.RegisterCallback <ChangeEvent <int> >(_event => _changeEventCallback?.Invoke());
                return(newIntegerField);

            case ConfiguratorValueType.FLOAT:
                FloatField newFloatField = new FloatField(_label)
                {
                    value = _initialValue.StructConvertTo <float>()
                };
                newFloatField.RegisterCallback <ChangeEvent <float> >(_event => _changeEventCallback?.Invoke());
                return(newFloatField);

            case ConfiguratorValueType.STRING:
                string    castValue    = _initialValue.TryConvertTo <string>();
                TextField newTextField = new TextField(_label)
                {
                    value = castValue ?? string.Empty
                };
                newTextField.RegisterCallback <ChangeEvent <string> >(_event => _changeEventCallback?.Invoke());
                return(newTextField);

            case ConfiguratorValueType.VECTOR2:
                Vector2Field newVector2Field = new Vector2Field(_label)
                {
                    value = _initialValue.StructConvertTo <Vector2>()
                };
                newVector2Field.RegisterCallback <ChangeEvent <Vector2> >(_event => _changeEventCallback?.Invoke());
                return(newVector2Field);

            case ConfiguratorValueType.VECTOR3:
                Vector3Field newVector3Field = new Vector3Field(_label)
                {
                    value = _initialValue.StructConvertTo <Vector3>()
                };
                newVector3Field.RegisterCallback <ChangeEvent <Vector3> >(_event => _changeEventCallback?.Invoke());
                return(newVector3Field);

            case ConfiguratorValueType.VECTOR2INT:
                Vector2IntField newVector2IntField = new Vector2IntField(_label)
                {
                    value = _initialValue.StructConvertTo <Vector2Int>()
                };
                newVector2IntField.RegisterCallback <ChangeEvent <Vector2Int> >(_event => _changeEventCallback?.Invoke());
                return(newVector2IntField);

            case ConfiguratorValueType.VECTOR3INT:
                Vector3IntField newVector3IntField = new Vector3IntField(_label)
                {
                    value = _initialValue.StructConvertTo <Vector3Int>()
                };
                newVector3IntField.RegisterCallback <ChangeEvent <Vector3Int> >(_event => _changeEventCallback?.Invoke());
                return(newVector3IntField);

            default:
                return(null);
            }
        }