Пример #1
0
    public override void OnInspectorGUI()
    {
        serializedObject.Update();
        _target_object.OnAfterDeserialize();

        bool   dirty    = false;
        string pre_name = _script_name_property.stringValue;

        EditorGUILayout.DelayedTextField(_script_name_property);
        if (pre_name != _script_name_property.stringValue || _current_file_name != _script_name_property.stringValue)
        {
            if (GetFieldList(_script_name_property.stringValue))
            {
                dirty = true;
            }
            else
            {
                _script_name_property.stringValue = pre_name;
            }

            _current_file_name = _script_name_property.stringValue;
        }

        UpdateValidate();

        EditorGUI.BeginChangeCheck();
        foreach (var item in lst_test)
        {
            FiledData data = _lst_info.Find(m => m.filed_name == item.field_name);

            if (!item.is_arry)
            {
                data.obj = EditorGUILayout.ObjectField(item.field_name, data.obj, item.type, true);
            }
            else
            {
                data.arr = data.arr ?? new List <Object>();
                if (!_dic_list_editor.TryGetValue(item.field_name, out ListEditor list))
                {
                    list = new ListEditor(data.arr, item.type, item.field_name);
                    _dic_list_editor[item.field_name] = list;
                }

                list.DoLayoutList();
            }
        }


        if (EditorGUI.EndChangeCheck() || dirty)
        {
            ApplyModifycation();
        }
    }
Пример #2
0
    public void OnAfterDeserialize()
    {
        if (_field_names == null)
        {
            return;
        }

        int value_index = 0;
        int array_index = 0;

        foreach (var item in _field_names)
        {
            FiledData info = ListFiledInfo.Find(m => m.filed_name == item);
            if (info == null)
            {
                info = new FiledData()
                {
                    filed_name = item
                };
                ListFiledInfo.Add(info);
            }

            if (_field_arrays.Length > array_index && _field_arrays[array_index].Next == value_index)
            {
                if (info.arr == null)
                {
                    info.arr = new List <Object>();
                }
                else
                {
                    info.arr.Clear();
                }
                info.arr.AddRange(_field_values.ToList().GetRange(value_index, _field_arrays[array_index].Count));

                value_index += _field_arrays[array_index].Count;
                array_index++;
            }
            else
            {
                info.obj = _field_values[value_index];
                value_index++;
            }
        }

        ListFiledInfo.RemoveAll(m => !_field_names.Contains(m.filed_name));
    }