From 1a1e7f87a0b7b290e2a75eac9ee8fb531c183f53 Mon Sep 17 00:00:00 2001 From: milan Date: Mon, 7 Nov 2022 16:04:00 +0100 Subject: [PATCH] no overlap requirement --- .../Engine/Requirements/No Overlap.asset | 14 ++++++++++++++ .../Engine/Requirements/No Overlap.asset.meta | 8 ++++++++ .../Engine/Scripts/Engine.cs | 2 +- .../Engine/Scripts/Requirements/NoOverlap.cs | 19 +++++++++++++++++++ .../Scripts/Requirements/NoOverlap.cs.meta | 3 +++ .../Requirements/OrientationRequirement.cs | 1 - .../Engine/Scripts/Space.cs | 6 +++--- Assets/Scenes/TestScene.unity | 4 ++-- 8 files changed, 50 insertions(+), 7 deletions(-) create mode 100644 Assets/Escape Room Engine/Engine/Requirements/No Overlap.asset create mode 100644 Assets/Escape Room Engine/Engine/Requirements/No Overlap.asset.meta create mode 100644 Assets/Escape Room Engine/Engine/Scripts/Requirements/NoOverlap.cs create mode 100644 Assets/Escape Room Engine/Engine/Scripts/Requirements/NoOverlap.cs.meta diff --git a/Assets/Escape Room Engine/Engine/Requirements/No Overlap.asset b/Assets/Escape Room Engine/Engine/Requirements/No Overlap.asset new file mode 100644 index 0000000..fd074fa --- /dev/null +++ b/Assets/Escape Room Engine/Engine/Requirements/No Overlap.asset @@ -0,0 +1,14 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 58ae9c09c887475d833d2cd4ee4ccffb, type: 3} + m_Name: No Overlap + m_EditorClassIdentifier: diff --git a/Assets/Escape Room Engine/Engine/Requirements/No Overlap.asset.meta b/Assets/Escape Room Engine/Engine/Requirements/No Overlap.asset.meta new file mode 100644 index 0000000..ac0e2c8 --- /dev/null +++ b/Assets/Escape Room Engine/Engine/Requirements/No Overlap.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 43eb2a566a244964aa3a3319eaafe1a8 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Escape Room Engine/Engine/Scripts/Engine.cs b/Assets/Escape Room Engine/Engine/Scripts/Engine.cs index 0382ec2..0b1699b 100644 --- a/Assets/Escape Room Engine/Engine/Scripts/Engine.cs +++ b/Assets/Escape Room Engine/Engine/Scripts/Engine.cs @@ -111,7 +111,7 @@ namespace Escape_Room_Engine.Engine.Scripts } // orient puzzle - HashSet orientationCandidates = Module.EveryOrientation; + var orientationCandidates = Module.EveryOrientation; Logger.Log($"orientation candidatesA: {string.Join(",", orientationCandidates.ToList().ConvertAll(c => c.ToString()))}", LogType.RequirementResolution); puzzle._description.RequirementsOfType().ForEach(requirement => orientationCandidates.IntersectWith(requirement.OrientationCandidates(puzzle, space))); diff --git a/Assets/Escape Room Engine/Engine/Scripts/Requirements/NoOverlap.cs b/Assets/Escape Room Engine/Engine/Scripts/Requirements/NoOverlap.cs new file mode 100644 index 0000000..9921e18 --- /dev/null +++ b/Assets/Escape Room Engine/Engine/Scripts/Requirements/NoOverlap.cs @@ -0,0 +1,19 @@ +using System.Collections.Generic; +using Escape_Room_Engine.Engine.Scripts.Modules; +using UnityEngine; + +namespace Escape_Room_Engine.Engine.Scripts.Requirements +{ + [CreateAssetMenu(menuName = "Requirements/No Overlap")] + public class NoOverlap : PlacementRequirement + { + public override IEnumerable PlacementCandidates(Module module, Space space) + { + var edgePositions = space.rrDimensions.EveryPosition; + + space.Modules.ForEach(m => edgePositions.Remove(m.SrPosition)); + + return edgePositions; + } + } +} \ No newline at end of file diff --git a/Assets/Escape Room Engine/Engine/Scripts/Requirements/NoOverlap.cs.meta b/Assets/Escape Room Engine/Engine/Scripts/Requirements/NoOverlap.cs.meta new file mode 100644 index 0000000..43be181 --- /dev/null +++ b/Assets/Escape Room Engine/Engine/Scripts/Requirements/NoOverlap.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 58ae9c09c887475d833d2cd4ee4ccffb +timeCreated: 1667881856 \ No newline at end of file diff --git a/Assets/Escape Room Engine/Engine/Scripts/Requirements/OrientationRequirement.cs b/Assets/Escape Room Engine/Engine/Scripts/Requirements/OrientationRequirement.cs index 975c743..e574824 100644 --- a/Assets/Escape Room Engine/Engine/Scripts/Requirements/OrientationRequirement.cs +++ b/Assets/Escape Room Engine/Engine/Scripts/Requirements/OrientationRequirement.cs @@ -1,6 +1,5 @@ using System.Collections.Generic; using Escape_Room_Engine.Engine.Scripts.Modules; -using UnityEngine; namespace Escape_Room_Engine.Engine.Scripts.Requirements { diff --git a/Assets/Escape Room Engine/Engine/Scripts/Space.cs b/Assets/Escape Room Engine/Engine/Scripts/Space.cs index 5eaecac..1dd2be1 100644 --- a/Assets/Escape Room Engine/Engine/Scripts/Space.cs +++ b/Assets/Escape Room Engine/Engine/Scripts/Space.cs @@ -10,9 +10,9 @@ namespace Escape_Room_Engine.Engine.Scripts /// The room relative (RR) dimensions of this space. /// internal readonly Dimensions rrDimensions; + internal List Modules { get; } = new(2); private GameObject _spaceObject; - private List _modules = new(2); internal Space(Dimensions rrDimensions, Passage entrance) { @@ -26,7 +26,7 @@ namespace Escape_Room_Engine.Engine.Scripts internal void AddModule(Module module) { - _modules.Add(module); + Modules.Add(module); } internal void InstantiateSpace(Transform parent, string name) @@ -42,7 +42,7 @@ namespace Escape_Room_Engine.Engine.Scripts meshRenderer.material = Engine.DefaultEngine.roomMaterial; // instantiate all modules inside this space - _modules.ForEach(module => module.InstantiateModule(_spaceObject.transform)); + Modules.ForEach(module => module.InstantiateModule(_spaceObject.transform)); } /// diff --git a/Assets/Scenes/TestScene.unity b/Assets/Scenes/TestScene.unity index 2137f08..886c65d 100644 --- a/Assets/Scenes/TestScene.unity +++ b/Assets/Scenes/TestScene.unity @@ -1233,8 +1233,8 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: roomMaterial: {fileID: 2100000, guid: 39e2ed014eda5d6408c16fbf0fa80781, type: 2} - minPuzzleCount: 1 - maxPuzzleCount: 1 + minPuzzleCount: 2 + maxPuzzleCount: 5 minRoomSize: {x: 3, y: 3} playSpace: {x: 4, y: 6} genericModule: {fileID: 11400000, guid: cba85a4318ad4750860b84245d9685c4, type: 2}