35 lines
1.3 KiB
C#
35 lines
1.3 KiB
C#
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<Vector2Int>
|
|
{
|
|
protected abstract override IEnumerable<Vector2Int> 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.PuzzleGeneration);
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
} |