using System.Collections.Generic; using Escape_Room_Engine.Engine.Scripts.Modules; using UnityEngine; namespace Escape_Room_Engine.Engine.Scripts.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; } } }