using System.Collections.Generic; using System.Linq; using System.Text.RegularExpressions; using UnityEngine; namespace JTFold { [RequireComponent(typeof(Paper))] public class RegexCombinationAnalyzer : MonoBehaviour { [SerializeField] private string _pattern; private readonly char[] _alphabet = "abcdefghij".ToCharArray(); private void OnValidate() { void AssignMarkerAndRandomIdentifier(Transform folding, int alphabetIndex) { if (folding.TryGetComponent(out _) == false) { var marker = folding.gameObject.AddComponent(); marker.identifier = _alphabet[alphabetIndex]; folding.name = $"{folding.name} ({marker.identifier})"; _pattern += marker.identifier; } } void AttachMarkersToFoldings(Paper relatedPaper) { var alphabetIndex = 0; foreach (var folding in relatedPaper.foldingsParent.Cast()) { AssignMarkerAndRandomIdentifier(folding, alphabetIndex); alphabetIndex++; } } var paper = GetComponent(); AttachMarkersToFoldings(paper); paper.RegexAnalyzer = this; } public bool IsCorrect(IEnumerable combination) { var translated = combination.Select(x => x.GetComponent()) .Select(x => x.identifier) .ToArray(); return Regex.IsMatch(new string(translated), _pattern); } } }