using System.Collections.Generic; using EscapeRoomEngine.Engine.Runtime.Modules; using UnityEngine; namespace EscapeRoomEngine.Engine.Runtime.Requirements { public abstract class Requirement : ScriptableObject { protected abstract IEnumerable GenerateCandidates(Module module, Space space); public void Restrict(HashSet candidates, Module module, Space space) => candidates.IntersectWith(GenerateCandidates(module, space)); public static HashSet Candidates( HashSet initialCandidates, IEnumerable> requirements, Module module, Space space) { foreach (var requirement in requirements) { requirement.Restrict(initialCandidates, module, space); } return initialCandidates; } } }