make sure every module is accessible

This commit is contained in:
2022-11-07 20:51:00 +01:00
parent aae5e78082
commit 648919cf5a
13 changed files with 100 additions and 30 deletions

View File

@@ -1,5 +1,6 @@
using System.Collections.Generic;
using Escape_Room_Engine.Engine.Scripts.Modules;
using NaughtyAttributes;
using UnityEngine;
namespace Escape_Room_Engine.Engine.Scripts.Requirements
@@ -7,13 +8,24 @@ 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 edgePositions = space.rrDimensions.EveryPosition;
var candidates = space.rrDimensions.EveryPosition;
space.Modules.ForEach(m => edgePositions.Remove(m.SrPosition));
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 edgePositions;
return candidates;
}
}
}