Example #1
0
        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);
                        }
                    }
                }
            });
        }
Example #2
0
 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));
 }
Example #3
0
        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);
            }
        }