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