Files
modular-vr/Assets/Engine/Runtime/Requirements/PlacementRequirement.cs
2022-11-20 12:52:22 +01:00

37 lines
1.4 KiB
C#

using System.Collections.Generic;
using System.Linq;
using EscapeRoomEngine.Engine.Runtime.Modules;
using EscapeRoomEngine.Engine.Runtime.Utilities;
using UnityEngine;
using Logger = EscapeRoomEngine.Engine.Runtime.Utilities.Logger;
using LogType = EscapeRoomEngine.Engine.Runtime.Utilities.LogType;
namespace EscapeRoomEngine.Engine.Runtime.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);
Logger.Log($"placement candidates: {string.Join(", ", placementCandidates.ToList().ConvertAll(c => c.ToString()))}", LogType.RequirementResolution);
if (placementCandidates.Count > 0)
{
module.Place(placementCandidates.RandomElement());
return true;
}
// ReSharper disable once RedundantIfElseBlock
else
{
Logger.Log($"Could not find suitable placement for {module}", LogType.ModulePlacement);
return false;
}
}
}
}