using System.Collections.Generic; using System.Linq; using Escape_Room_Engine.Engine.Scripts.Modules; using Escape_Room_Engine.Engine.Scripts.Utilities; using UnityEngine; namespace Escape_Room_Engine.Engine.Scripts.Requirements { public abstract class PlacementRequirement : Requirement { protected abstract override IEnumerable GenerateCandidates(Module module, Space space); public static bool TryPlacing(Module module, Space space) { var placementCandidates = Candidates( space.rrDimensions.EveryPosition, module.description.placementRequirements, module, space); Utilities.Logger.Log($"placement candidates: {string.Join(", ", placementCandidates.ToList().ConvertAll(c => c.ToString()))}", Utilities.LogType.RequirementResolution); if (placementCandidates.Count > 0) { module.Place(placementCandidates.RandomElement()); return true; } // ReSharper disable once RedundantIfElseBlock else { Utilities.Logger.Log("Could not find suitable placement for module", Utilities.LogType.ModulePlacement); return false; } } } }