add PreconditionRequirement and RelatedModule requirement
This commit is contained in:
@@ -0,0 +1,44 @@
|
||||
using System.Collections.Generic;
|
||||
using EscapeRoomEngine.Engine.Runtime.Modules;
|
||||
using UnityEngine;
|
||||
using Logger = EscapeRoomEngine.Engine.Runtime.Utilities.Logger;
|
||||
using LogType = EscapeRoomEngine.Engine.Runtime.Utilities.LogType;
|
||||
|
||||
namespace EscapeRoomEngine.Engine.Runtime.Requirements
|
||||
{
|
||||
public abstract class PreconditionRequirement : Requirement<bool>
|
||||
{
|
||||
protected static readonly HashSet<bool> TrueSet = new(new[] { true }), FalseSet = new(new[] { false });
|
||||
|
||||
protected abstract override IEnumerable<bool> GenerateCandidates(Module module, Space space);
|
||||
|
||||
public static bool CheckPreconditions(Module module, Space space)
|
||||
{
|
||||
Debug.Log($"{module}, {module.description.preconditionRequirements}");
|
||||
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.ModulePlacement);
|
||||
|
||||
return preconditionsMet;
|
||||
}
|
||||
|
||||
protected static HashSet<bool> SetFor(bool value)
|
||||
{
|
||||
return value ? TrueSet : FalseSet;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user