diff --git a/OngekiFumenEditor/Modules/FumenCheckerListViewer/Base/OgkrImpl/ColorIdCheckRule.cs b/OngekiFumenEditor/Modules/FumenCheckerListViewer/Base/OgkrImpl/ColorIdCheckRule.cs new file mode 100644 index 00000000..824e20c3 --- /dev/null +++ b/OngekiFumenEditor/Modules/FumenCheckerListViewer/Base/OgkrImpl/ColorIdCheckRule.cs @@ -0,0 +1,45 @@ +using OngekiFumenEditor.Base; +using OngekiFumenEditor.Base.OngekiObjects; +using OngekiFumenEditor.Base.OngekiObjects.ConnectableObject; +using OngekiFumenEditor.Base.OngekiObjects.Lane; +using OngekiFumenEditor.Modules.FumenCheckerListViewer.Base.DefaultNavigateBehaviorImpl; +using OngekiFumenEditor.Modules.FumenVisualEditor.ViewModels; +using OngekiFumenEditor.Parser.DefaultImpl.Ogkr.Rules; +using OngekiFumenEditor.Properties; +using OngekiFumenEditor.Utils; +using System; +using System.Collections.Generic; +using System.ComponentModel.Composition; +using System.Linq; + +namespace OngekiFumenEditor.Modules.FumenCheckerListViewer.Base.DefaultRulesImpl +{ + [Export(typeof(IFumenCheckRule))] + [Export(typeof(IOngekiFumenCheckRule))] + internal class ColorIdCheckRule : IOngekiFumenCheckRule + { + public IEnumerable CheckRule(OngekiFumen fumen, FumenVisualEditorViewModel fumenHostViewModel) + { + IEnumerable CheckList(IEnumerable objs) + { + const string RuleName = "[Ongeki] ColorIdInvaild"; + + foreach (var obj in objs.Where(x => !ColorIdConst.AllColors.Any(t => t.Id == x.ColorId.Id))) + { + yield return new CommonCheckResult() + { + Severity = RuleSeverity.Error, + Description = "Invalid ColorId: {0}".Format(obj.ColorId.ToString()), + LocationDescription = $"{obj.XGrid} {obj.TGrid}", + NavigateBehavior = new NavigateToTGridBehavior(obj.TGrid), + RuleName = RuleName, + }; + } + } + + foreach (var result in CheckList(fumen.GetAllDisplayableObjects().OfType())) + yield return result; + } + } +} +