Files
modular-vr/Assets/Escape Room Engine/Engine/Scripts/Requirements/NoOverlap.cs

31 lines
1.1 KiB
C#

using System.Collections.Generic;
using Escape_Room_Engine.Engine.Scripts.Modules;
using NaughtyAttributes;
using UnityEngine;
namespace Escape_Room_Engine.Engine.Scripts.Requirements
{
[CreateAssetMenu(menuName = "Requirements/No Overlap")]
public class NoOverlap : PlacementRequirement
{
[InfoBox("A module relative position will be oriented with the module (e.g. (0, 1) is always in front of the module).")]
[Label("Reserved Positions (Module Relative)")]
public List<Vector2Int> mrReservedPositions;
protected override IEnumerable<Vector2Int> GenerateCandidates(Module module, Space space)
{
var candidates = space.rrDimensions.EveryPosition;
space.Modules.ForEach(m =>
{
candidates.Remove(m.SrPosition);
m.description.placementRequirements
.FindAll(r => r is NoOverlap)
.ForEach(r => ((NoOverlap)r).mrReservedPositions
.ForEach(p => candidates.Remove(m.ToSpaceRelative(p))));
});
return candidates;
}
}
}