public void FindDrawers(List <IShaderFieldDrawer> drawers, IShaderFieldGroup group)
 {
     foreach (var child in group.Children)
     {
         if (child is ShaderField)
         {
             var field = (ShaderField)child;
             drawers.Add(new FieldDrawer(field));
         }
         else if (child is ShaderKeyword)
         {
             var field = (ShaderKeyword)child;
             drawers.Add(new KeywordDrawer(field));
         }
         else if (child is ShaderEnumKeyword)
         {
             var field = (ShaderEnumKeyword)child;
             drawers.Add(new EnumKeywordDrawer(field));
         }
         else if (child is ShaderFieldGroup)
         {
             var field  = (ShaderFieldGroup)child;
             var drawer = new GroupDrawer(field);
             drawers.Add(drawer);
             FindDrawers(drawer.Drawers, field);
         }
     }
 }
Example #2
0
        public static ShaderAccessor CreateAccessor(this IShaderFieldGroup group)
        {
            if (group.Children == null)
            {
                throw new InvalidOperationException(nameof(group) + " do not has any child");
            }

            return(new ShaderAccessor(group.ReflectiveField.FieldType, group.Children, group.Mask));
        }
Example #3
0
 public static bool Contains(this IShaderFieldGroup group, string name)
 {
     if (group.Children != null)
     {
         int index = group.Children.FindIndex(item => item.ReflectiveField.Name == name);
         return(index >= 0);
     }
     return(false);
 }
        public ShaderFieldDrawer(IShaderFieldGroup group, string displayName)
        {
            if (group == null)
            {
                throw new ArgumentNullException(nameof(group));
            }

            Group   = group;
            Name    = displayName;
            Drawers = new List <IShaderFieldDrawer>(group.Children.Count);
            FindDrawers(Drawers, group);
        }
Example #5
0
 public static IShaderFieldGroup Find(this IShaderFieldGroup group, string name)
 {
     if (group.Children != null)
     {
         int index = group.Children.FindIndex(item => item.ReflectiveField.Name == name);
         if (index >= 0)
         {
             var field = group.Children[index];
             return(field);
         }
     }
     throw new KeyNotFoundException(name);
 }
Example #6
0
        public SerializedPropertyDrawer(IShaderFieldGroup group, SerializedProperty property)
        {
            if (group == null)
            {
                throw new ArgumentNullException(nameof(group));
            }
            if (property == null)
            {
                throw new ArgumentNullException(nameof(property));
            }

            Group = group;
            SerializedProperty = property;
            Drawers            = new List <ISerializedPropertyDrawer>(group.Children.Count);
            FindDrawers(Drawers, group, property);
        }
Example #7
0
        public ShaderFieldDrawer(IShaderFieldGroup group, MaterialProperty[] properties)
        {
            if (group == null)
            {
                throw new ArgumentNullException(nameof(group));
            }

            Group   = group;
            Drawers = new List <IFieldDrawer>(group.Children.Count);

            foreach (var child in Group.Children)
            {
                if (child is ShaderField)
                {
                    var          field = (ShaderField)child;
                    IFieldDrawer drawer;
                    if (StandardFieldDrawer.TryCreate(field, properties, out drawer))
                    {
                        Drawers.Add(drawer);
                    }
                }
                if (child is ShaderKeyword)
                {
                    var field = (ShaderKeyword)child;
                    Drawers.Add(new ShaderKeywordDrawer(field));
                }
                else if (child is ShaderEnumKeyword)
                {
                    var field = (ShaderEnumKeyword)child;
                    Drawers.Add(new ShaderEnumKeywordDrawer(field));
                }
                else if (child is ShaderEnumFlagsKeyword)
                {
                    var field = (ShaderEnumFlagsKeyword)child;
                    Drawers.Add(new ShaderEnumFlagsKeywordDrawer(field));
                }
            }
        }
Example #8
0
 public static ShaderAccessor CreateAccessor(this IShaderFieldGroup group, string name)
 {
     return(group.Find(name).CreateAccessor());
 }
Example #9
0
 public void FindDrawers(List <ISerializedPropertyDrawer> drawers, IShaderFieldGroup group, SerializedProperty property)
 {
     foreach (var child in group.Children)
     {
         if (child is ShaderField)
         {
             var field  = (ShaderField)child;
             var target = property.FindPropertyRelative(field.ReflectiveField.Name);
             if (target != null)
             {
                 var drawer = new ShaderFieldDrawer(target, field);
                 drawers.Add(drawer);
             }
         }
         else if (child is ShaderKeyword)
         {
             var field  = (ShaderKeyword)child;
             var target = property.FindPropertyRelative(field.ReflectiveField.Name);
             if (target != null)
             {
                 var drawer = new KeywordDrawer(target, field);
                 drawers.Add(drawer);
             }
         }
         else if (child is ShaderEnumKeyword)
         {
             var field  = (ShaderEnumKeyword)child;
             var target = property.FindPropertyRelative(field.ReflectiveField.Name);
             if (target != null)
             {
                 var drawer = new EnumKeywordDrawer(target, field);
                 drawers.Add(drawer);
             }
         }
         else if (child is ShaderFieldMark)
         {
             var field  = (ShaderFieldMark)child;
             var target = property.FindPropertyRelative(field.ReflectiveField.Name);
             if (target != null)
             {
                 var drawer = new Drawer(target);
                 drawers.Add(drawer);
             }
         }
         else if (child is ShaderCustomField)
         {
             var field  = (ShaderCustomField)child;
             var target = property.FindPropertyRelative(field.ReflectiveField.Name);
             if (target != null)
             {
                 var drawer = new Drawer(target);
                 drawers.Add(drawer);
             }
         }
         else if (child is ShaderFieldGroup)
         {
             var field  = (ShaderFieldGroup)child;
             var target = property.FindPropertyRelative(field.ReflectiveField.Name);
             if (target != null)
             {
                 var drawer = new GroupDrawer(target, field);
                 drawers.Add(drawer);
                 FindDrawers(drawer.Drawers, field, target);
             }
         }
         else
         {
             throw new NotImplementedException();
         }
     }
 }
 public static bool FilterByMask(IShaderFieldGroup group, int mask)
 {
     return((mask & group.Mask) != 0);
 }