add PreconditionRequirement and RelatedModule requirement
This commit is contained in:
@@ -11,6 +11,12 @@ namespace EscapeRoomEngine.Engine.Runtime.Requirements
|
||||
|
||||
public static bool TryOrienting(Module module, Space space)
|
||||
{
|
||||
if (module.description.orientationRequirements.Count == 0)
|
||||
{
|
||||
// don't evaluate requirements if there are none
|
||||
return true;
|
||||
}
|
||||
|
||||
var orientationCandidates = Candidates(
|
||||
Module.EveryOrientation,
|
||||
module.description.orientationRequirements,
|
||||
|
||||
@@ -14,6 +14,12 @@ namespace EscapeRoomEngine.Engine.Runtime.Requirements
|
||||
|
||||
public static bool TryPlacing(Module module, Space space)
|
||||
{
|
||||
if (module.description.placementRequirements.Count == 0)
|
||||
{
|
||||
// don't evaluate requirements if there are none
|
||||
return true;
|
||||
}
|
||||
|
||||
var placementCandidates = Candidates(
|
||||
space.rrDimensions.EveryPosition,
|
||||
module.description.placementRequirements,
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a73316a9f52d4c5982f9c7936e322ec4
|
||||
timeCreated: 1668945634
|
||||
20
Assets/Engine/Runtime/Requirements/RelatedModule.cs
Normal file
20
Assets/Engine/Runtime/Requirements/RelatedModule.cs
Normal file
@@ -0,0 +1,20 @@
|
||||
using System.Collections.Generic;
|
||||
using EscapeRoomEngine.Engine.Runtime.Modules;
|
||||
using NaughtyAttributes;
|
||||
using UnityEngine;
|
||||
|
||||
namespace EscapeRoomEngine.Engine.Runtime.Requirements
|
||||
{
|
||||
[CreateAssetMenu(menuName = "Requirements/Related Module")]
|
||||
class RelatedModule : PreconditionRequirement
|
||||
{
|
||||
[InfoBox("A related module that must be added to the same space successfully before this module is added.")]
|
||||
[Required]
|
||||
public ModuleDescription relatedModule;
|
||||
|
||||
protected override IEnumerable<bool> GenerateCandidates(Module module, Space space)
|
||||
{
|
||||
return new []{ space.AddModuleWithRequirements(Module.CreateModuleByType(space, relatedModule)) };
|
||||
}
|
||||
}
|
||||
}
|
||||
3
Assets/Engine/Runtime/Requirements/RelatedModule.cs.meta
Normal file
3
Assets/Engine/Runtime/Requirements/RelatedModule.cs.meta
Normal file
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6e3f3bf07aae4a03834a7943c255f37d
|
||||
timeCreated: 1668947627
|
||||
Reference in New Issue
Block a user