35 lines
1.4 KiB
C#
35 lines
1.4 KiB
C#
using System.Collections.Generic;
|
|
using EscapeRoomEngine.Engine.Runtime.Modules;
|
|
using UnityEngine;
|
|
|
|
namespace EscapeRoomEngine.Engine.Runtime.Requirements
|
|
{
|
|
/// <summary>
|
|
/// This requirement prevents modules from overlapping. For two models not to overlap, both of them need this requirement.
|
|
/// </summary>
|
|
[CreateAssetMenu(menuName = "Requirements/No Overlap")]
|
|
public class NoOverlap : PlacementRequirement
|
|
{
|
|
protected override List<Placement> FilterCandidates(List<Placement> candidates, Module module, Space space)
|
|
{
|
|
space.AllModules.ForEach(other => // for all other module ...
|
|
other.srPlacement.ForEachPosition(otherPosition => // ... positions ...
|
|
candidates.RemoveAll(candidate => // ... remove every candidate that ...
|
|
{
|
|
var remove = false;
|
|
|
|
candidate.ForEachPosition(position => // ... anywhere inside its bounds ...
|
|
{
|
|
if (!remove)
|
|
{
|
|
remove = position.Equals(otherPosition); // ... overlaps with other modules' position
|
|
}
|
|
});
|
|
|
|
return remove;
|
|
})));
|
|
|
|
return candidates;
|
|
}
|
|
}
|
|
} |