public static SettingsProvider CreateSettingsProvider() { return(new SettingsProvider("Project/VRCAvatars3Validator", SettingsScope.Project) { label = "VRCAvatars3Validator", keywords = new HashSet <string>(new string[] { "VRChat", "VRC", "Avatars3.0" }), guiHandler = (searchContext) => { var settings = ValidatorSettingsUtility.GetOrCreateSettings(); settings.validateOnUploadAvatar = EditorGUILayout.Toggle("Validate OnUploadAvatar", settings.validateOnUploadAvatar); EditorGUILayout.Space(); EditorGUILayout.LabelField("Enable Rules", EditorStyles.boldLabel); var ruleNames = settings.rules.Select(rule => rule.Name).ToArray(); for (int i = 0; i < ruleNames.Length; i++) { var validateRule = settings.rules[i].Enabled; var ruleName = ruleNames[i]; var ruleSummary = RuleUtility.FilePath2IRule(settings.rules[i].FilePath).RuleSummary; using (var check = new EditorGUI.ChangeCheckScope()) { settings.rules[i].Enabled = EditorGUILayout.ToggleLeft($"[{ruleName}] {ruleSummary}", validateRule); } } } }); }
public static Dictionary <int, IEnumerable <ValidateResult> > ValidateAvatars3(VRCAvatarDescriptor avatar, IEnumerable <RuleItem> rules) { return(rules.Select((rule, index) => new { Rule = rule, Index = index }) .Where(rulePair => rulePair.Rule.Enabled) .Select(rulePair => { var rule = RuleUtility.FilePath2IRule(rulePair.Rule.FilePath); var results = rule.Validate(avatar); return new KeyValuePair <int, IEnumerable <ValidateResult> >(rulePair.Index + 1, results); }) .ToDictionary(resultPair => resultPair.Key, resultPair => resultPair.Value)); }
public void OnGUI() { OnOpen(); EditorGUILayout.Space(); using (var check = new EditorGUI.ChangeCheckScope()) { var avatar = EditorGUILayout.ObjectField( "Avatar", _viewModel.avatar, typeof(VRCAvatarDescriptor), true) as VRCAvatarDescriptor; if (check.changed) { _viewModel.OnSwitchAvatar(avatar); } } EditorGUILayout.Space(); EditorGUILayout.LabelField("Rules", EditorStyles.boldLabel); using (new EditorGUI.IndentLevelScope()) { for (int i = 0; i < _viewModel.settings.rules.Count; i++) { var rule = RuleUtility.FilePath2IRule(_viewModel.settings.rules[i].FilePath); _viewModel.settings.rules[i].Enabled = EditorGUILayout.ToggleLeft( $"[{i + 1}] {rule.RuleSummary}", _viewModel.settings.rules[i].Enabled); } } EditorGUILayout.Space(); using (new EditorGUI.DisabledGroupScope(_viewModel.IsSelectionAvatar())) { if (GUILayout.Button("Validate")) { _viewModel.OnValidateClick(); } } EditorGUILayout.Space(); EditorGUILayout.LabelField("Errors", EditorStyles.boldLabel); if (_viewModel.HasNeverValided) { return; } if (_viewModel.ExistValidationResult()) { using (var scroll = new EditorGUILayout.ScrollViewScope(scrollPos)) { scrollPos = scroll.scrollPosition; foreach (var resultPair in _viewModel.resultDictionary) { var ruleId = resultPair.Key; var results = resultPair.Value; foreach (var result in results) { DrawResultItem(ruleId, result); } } } } else { EditorGUILayout.HelpBox("No Error", MessageType.Info); } }