using System.Collections.Generic; using EscapeRoomEngine.Engine.Runtime.Modules; using Logger = EscapeRoomEngine.Engine.Runtime.Utilities.Logger; using LogType = EscapeRoomEngine.Engine.Runtime.Utilities.LogType; namespace EscapeRoomEngine.Engine.Runtime.Requirements { public abstract class PreconditionRequirement : Requirement { protected static readonly HashSet TrueSet = new(new[] { true }), FalseSet = new(new[] { false }); protected abstract override IEnumerable GenerateCandidates(Module module, Space space); public static bool CheckPreconditions(Module module, Space space) { if (module.description.preconditionRequirements.Count == 0) { // don't evaluate requirements if there are none return true; } var preconditionsMet = Candidates( TrueSet, module.description.preconditionRequirements, module, space) .Contains(true); Logger.Log( preconditionsMet ? $"Preconditions for {module} satisfied" : $"Could not satisfy preconditions for {module}", LogType.RequirementResolution); return preconditionsMet; } protected static HashSet SetFor(bool value) { return value ? TrueSet : FalseSet; } } }