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); } } }
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)); }
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); }
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); }
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); }
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)); } } }
public static ShaderAccessor CreateAccessor(this IShaderFieldGroup group, string name) { return(group.Find(name).CreateAccessor()); }
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); }