using System.Collections.Generic; using System.Linq; using EscapeRoomEngine.Engine.Runtime.Modules; using UnityEngine; namespace EscapeRoomEngine.Engine.Runtime.Requirements { /// /// A generic requirement class that defines how requirements filter candidates. /// public abstract class Requirement : ScriptableObject { protected abstract List FilterCandidates(List candidates, Module module, Space space); protected static List Candidates( List candidates, IEnumerable> requirements, Module module, Space space) { return requirements.Aggregate(candidates, (current, requirement) => requirement.FilterCandidates(current, module, space)); } } }