requirements foundation

This commit is contained in:
2022-11-07 14:21:00 +01:00
parent 7e9331f612
commit 8719543f96
34 changed files with 332 additions and 160 deletions

View File

@@ -12,8 +12,9 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: f5c1202346c34ebc9c3f701a98b50877, type: 3}
m_Name: Generic Door Entrance
m_EditorClassIdentifier:
types: 00000000
modulePrefab: {fileID: 5399176795272327488, guid: da9b7a57e7c37d149827fe17188bdeea,
type: 3}
doorType: 0
requirements: []
connectedDoorDescription: {fileID: 11400000, guid: 29e2ae36585f4e65966bc9ea2f95ac4a,
type: 2}

View File

@@ -12,8 +12,10 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: f5c1202346c34ebc9c3f701a98b50877, type: 3}
m_Name: Generic Door Exit
m_EditorClassIdentifier:
types: 01000000
modulePrefab: {fileID: 5399176795272327488, guid: d877ee36ba6ace440aebce2c20cf70d6,
type: 3}
requirements: []
doorType: 1
connectedDoorDescription: {fileID: 11400000, guid: a70cb93176094309a847f1928d6b950d,
type: 2}

View File

@@ -12,5 +12,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: abf4a405f6c64073995bded39977563e, type: 3}
m_Name: Generic Module
m_EditorClassIdentifier:
types:
modulePrefab: {fileID: 3864228228344123331, guid: ad2655de8289afa40aa520f9fc474681,
type: 3}
requirements: []

View File

@@ -12,5 +12,8 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: f928b97941e3469a9015316bb5ac1309, type: 3}
m_Name: Generic Puzzle
m_EditorClassIdentifier:
types: 02000000
modulePrefab: {fileID: 1780958886295268827, guid: e419cb35bd744b24ea973860d8b1405d,
type: 3}
requirements:
- {fileID: 11400000, guid: d34a7e9c8d3eaf946ade02be9eff0041, type: 2}

View File

@@ -12,7 +12,9 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: f5c1202346c34ebc9c3f701a98b50877, type: 3}
m_Name: Spawn
m_EditorClassIdentifier:
modulePrefab: {fileID: 278361332033420131, guid: db5350cd22f3a0f4f818a5f985342136,
types: 00000000
modulePrefab: {fileID: 641449049689494886, guid: db5350cd22f3a0f4f818a5f985342136,
type: 3}
requirements: []
doorType: 0
connectedDoorDescription: {fileID: 11400000}

View File

@@ -72,5 +72,10 @@ PrefabInstance:
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8741597917111152084, guid: 30bf75759c019b843afd4c6aeb694159,
type: 3}
propertyPath: m_Materials.Array.data[0]
value:
objectReference: {fileID: 2100000, guid: 94d63268ac1ac034d8c0af72dd04a346, type: 2}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 30bf75759c019b843afd4c6aeb694159, type: 3}

View File

@@ -72,5 +72,10 @@ PrefabInstance:
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8741597917111152084, guid: 30bf75759c019b843afd4c6aeb694159,
type: 3}
propertyPath: m_Materials.Array.data[0]
value:
objectReference: {fileID: 2100000, guid: 3e334d6799a0d0040a41fe4794da90f5, type: 2}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 30bf75759c019b843afd4c6aeb694159, type: 3}

View File

@@ -1,5 +1,88 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &714560894994709254
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 6287965203426599350}
- component: {fileID: 5368003019011713868}
- component: {fileID: 4637598171471972507}
m_Layer: 0
m_Name: Cube
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &6287965203426599350
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 714560894994709254}
m_LocalRotation: {x: -0.15643595, y: 0.37715694, z: -0.06479774, w: 0.91053927}
m_LocalPosition: {x: 0, y: 0.262, z: 0.075}
m_LocalScale: {x: 0.5, y: 0.5, z: 0.5}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 7279153380729290489}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: -13.651, y: 46.691, z: -14.056}
--- !u!33 &5368003019011713868
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 714560894994709254}
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
--- !u!23 &4637598171471972507
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 714560894994709254}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_StaticShadowCaster: 0
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RayTraceProcedural: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_ReceiveGI: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 1
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!1 &3864228228344123331
GameObject:
m_ObjectHideFlags: 0
@@ -43,7 +126,6 @@ GameObject:
- component: {fileID: 7279153380729290489}
- component: {fileID: 609314626751263072}
- component: {fileID: 8884008595548699417}
- component: {fileID: 3037682669808127519}
m_Layer: 0
m_Name: Cube
m_TagString: Untagged
@@ -59,10 +141,11 @@ Transform:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4439105426094897912}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0.5, y: 0.5, z: 0.5}
m_LocalPosition: {x: 0, y: 0.5, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Children:
- {fileID: 6287965203426599350}
m_Father: {fileID: 7860513085978939562}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@@ -116,16 +199,3 @@ MeshRenderer:
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!65 &3037682669808127519
BoxCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4439105426094897912}
m_Material: {fileID: 0}
m_IsTrigger: 0
m_Enabled: 1
serializedVersion: 2
m_Size: {x: 1, y: 1, z: 1}
m_Center: {x: 0, y: 0, z: 0}

View File

@@ -12,6 +12,16 @@ PrefabInstance:
propertyPath: m_Name
value: Generic Puzzle
objectReference: {fileID: 0}
- target: {fileID: 4637598171471972507, guid: ad2655de8289afa40aa520f9fc474681,
type: 3}
propertyPath: m_Materials.Array.data[0]
value:
objectReference: {fileID: 2100000, guid: 46455800cc2ce524c92336599f5ec772, type: 2}
- target: {fileID: 7279153380729290489, guid: ad2655de8289afa40aa520f9fc474681,
type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 7860513085978939562, guid: ad2655de8289afa40aa520f9fc474681,
type: 3}
propertyPath: m_RootOrder

View File

@@ -1,179 +1,76 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &6011647874759208035
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 5928148369176390461}
- component: {fileID: 5083806700704616900}
- component: {fileID: 3214657300310728549}
- component: {fileID: 8608837451192070870}
m_Layer: 0
m_Name: Sphere
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &5928148369176390461
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6011647874759208035}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 6587262333262160906}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &5083806700704616900
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6011647874759208035}
m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0}
--- !u!23 &3214657300310728549
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6011647874759208035}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_StaticShadowCaster: 0
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RayTraceProcedural: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_ReceiveGI: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 1
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!135 &8608837451192070870
SphereCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6011647874759208035}
m_Material: {fileID: 0}
m_IsTrigger: 0
m_Enabled: 1
serializedVersion: 2
m_Radius: 0.5
m_Center: {x: 0, y: 0, z: 0}
--- !u!1001 &1112641151226188271
--- !u!1001 &4758994409158878246
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 330650459340005303, guid: 30bf75759c019b843afd4c6aeb694159,
type: 3}
propertyPath: m_IsActive
value: 0
objectReference: {fileID: 0}
- target: {fileID: 913127997918145164, guid: 30bf75759c019b843afd4c6aeb694159,
type: 3}
propertyPath: m_Name
value: Spawn
objectReference: {fileID: 0}
- target: {fileID: 6060240960858060261, guid: 30bf75759c019b843afd4c6aeb694159,
- target: {fileID: 1322900129209232937, guid: da9b7a57e7c37d149827fe17188bdeea,
type: 3}
propertyPath: m_RootOrder
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6060240960858060261, guid: 30bf75759c019b843afd4c6aeb694159,
- target: {fileID: 1322900129209232937, guid: da9b7a57e7c37d149827fe17188bdeea,
type: 3}
propertyPath: m_LocalPosition.x
value: 0.5
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6060240960858060261, guid: 30bf75759c019b843afd4c6aeb694159,
- target: {fileID: 1322900129209232937, guid: da9b7a57e7c37d149827fe17188bdeea,
type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6060240960858060261, guid: 30bf75759c019b843afd4c6aeb694159,
- target: {fileID: 1322900129209232937, guid: da9b7a57e7c37d149827fe17188bdeea,
type: 3}
propertyPath: m_LocalPosition.z
value: 0.5
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6060240960858060261, guid: 30bf75759c019b843afd4c6aeb694159,
- target: {fileID: 1322900129209232937, guid: da9b7a57e7c37d149827fe17188bdeea,
type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 6060240960858060261, guid: 30bf75759c019b843afd4c6aeb694159,
- target: {fileID: 1322900129209232937, guid: da9b7a57e7c37d149827fe17188bdeea,
type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6060240960858060261, guid: 30bf75759c019b843afd4c6aeb694159,
- target: {fileID: 1322900129209232937, guid: da9b7a57e7c37d149827fe17188bdeea,
type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6060240960858060261, guid: 30bf75759c019b843afd4c6aeb694159,
- target: {fileID: 1322900129209232937, guid: da9b7a57e7c37d149827fe17188bdeea,
type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6060240960858060261, guid: 30bf75759c019b843afd4c6aeb694159,
- target: {fileID: 1322900129209232937, guid: da9b7a57e7c37d149827fe17188bdeea,
type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6060240960858060261, guid: 30bf75759c019b843afd4c6aeb694159,
- target: {fileID: 1322900129209232937, guid: da9b7a57e7c37d149827fe17188bdeea,
type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6060240960858060261, guid: 30bf75759c019b843afd4c6aeb694159,
- target: {fileID: 1322900129209232937, guid: da9b7a57e7c37d149827fe17188bdeea,
type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1894180114262114426, guid: da9b7a57e7c37d149827fe17188bdeea,
type: 3}
propertyPath: m_LocalPosition.y
value: -0.90000004
objectReference: {fileID: 0}
- target: {fileID: 5399176795272327488, guid: da9b7a57e7c37d149827fe17188bdeea,
type: 3}
propertyPath: m_Name
value: Spawn
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 30bf75759c019b843afd4c6aeb694159, type: 3}
--- !u!4 &6587262333262160906 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 6060240960858060261, guid: 30bf75759c019b843afd4c6aeb694159,
type: 3}
m_PrefabInstance: {fileID: 1112641151226188271}
m_PrefabAsset: {fileID: 0}
m_SourcePrefab: {fileID: 100100000, guid: da9b7a57e7c37d149827fe17188bdeea, type: 3}

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 1491a0a32aa61104b9a742535e2dd3f9
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -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: 8ec2cdf0145347e18e7c68221333be2c, type: 3}
m_Name: Place Along Space Edges
m_EditorClassIdentifier:

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: ed4830127e9381245a6af07e42c52422
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -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: aa4ff365b4e844e782cd12d8aeebd3d4, type: 3}
m_Name: Place Anywhere
m_EditorClassIdentifier:

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: d34a7e9c8d3eaf946ade02be9eff0041
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,4 +1,5 @@
using UnityEngine;
using System.Collections.Generic;
using UnityEngine;
namespace Escape_Room_Engine.Engine.Scripts
{
@@ -39,6 +40,24 @@ namespace Escape_Room_Engine.Engine.Scripts
public int Area => width * length;
public HashSet<Vector2Int> EveryPosition
{
get
{
var positions = new HashSet<Vector2Int>();
for (var zIter = 0; zIter < length; zIter++)
{
for (var xIter = 0; xIter < width; xIter++)
{
positions.Add(new Vector2Int(xIter, zIter));
}
}
return positions;
}
}
public override string ToString() => $"({width}, {length}) at ({x}, {z})";
}
}

View File

@@ -82,17 +82,31 @@ namespace Escape_Room_Engine.Engine.Scripts
// add puzzles
for (var i = 0; i < Utilities.Utilities.RandomInclusive(minPuzzleCount, maxPuzzleCount); i++)
{
var puzzle = new PuzzleModule(space, puzzleTypes.RandomElement());
puzzle.Place(new Vector2Int(
Random.Range(0, rrDimensions.width),
Random.Range(0, rrDimensions.length)
));
space.AddModule(puzzle);
GeneratePuzzle(space);
}
room.AddSpace(space, exit);
}
private void GeneratePuzzle(Space space)
{
var puzzle = new PuzzleModule(space, puzzleTypes.RandomElement());
// place puzzle
var placementCandidates = space.rrDimensions.EveryPosition;
puzzle._description.PlacementRequirements.ForEach(requirement =>
placementCandidates.IntersectWith(requirement.PlacementCandidates(puzzle, space)));
if (placementCandidates.Count > 0)
{
puzzle.Place(placementCandidates.RandomElement());
space.AddModule(puzzle);
}
else
{
Logger.Log("Could not find suitable placement for puzzle", LogType.PuzzleGeneration);
}
}
/// <summary>
/// Generate space dimensions that fit the required size constraints and cover the position of the entrance.
/// </summary>

View File

@@ -16,7 +16,6 @@ namespace Escape_Room_Engine.Engine.Scripts.Modules
internal DoorModule(Space space, DoorModuleDescription description) : base(space, description)
{
_description.types.Add((ModuleType)description.doorType);
srDimensions.Size = Vector2Int.one; // door always has size 1x1
}

View File

@@ -5,7 +5,6 @@ namespace Escape_Room_Engine.Engine.Scripts.Modules
[CreateAssetMenu(menuName = "Modules/Door")]
public class DoorModuleDescription : ModuleDescription
{
public DoorType doorType;
/// <summary>
/// The description for the door that should be connected with this one.
/// <example>If this is a teleporter entrance, the connected door should be a teleporter exit.</example>

View File

@@ -8,6 +8,11 @@ using Object = UnityEngine.Object;
namespace Escape_Room_Engine.Engine.Scripts.Modules
{
public enum Orientation
{
North = 0, East = 90, South = 180, West = 270
}
public class Module
{
/// <summary>
@@ -25,6 +30,7 @@ namespace Escape_Room_Engine.Engine.Scripts.Modules
/// The space relative (<i>SR</i>) dimensions of this module.
/// </summary>
protected Dimensions srDimensions;
protected Orientation orientation;
private readonly Space _space;
@@ -65,7 +71,8 @@ namespace Escape_Room_Engine.Engine.Scripts.Modules
{
_moduleObject = new GameObject(ToString());
_moduleObject.transform.SetParent(parent, false);
_moduleObject.transform.localPosition = new Vector3(srDimensions.x, 0, srDimensions.z);
_moduleObject.transform.localPosition = new Vector3(srDimensions.x + .5f, 0, srDimensions.z + .5f);
_moduleObject.transform.Rotate(Vector3.up, (float)orientation);
Object.Instantiate(_description.modulePrefab, _moduleObject.transform, false);
}

View File

@@ -1,4 +1,5 @@
using System.Collections.Generic;
using Escape_Room_Engine.Engine.Scripts.Requirements;
using UnityEngine;
namespace Escape_Room_Engine.Engine.Scripts.Modules
@@ -6,7 +7,12 @@ namespace Escape_Room_Engine.Engine.Scripts.Modules
[CreateAssetMenu(menuName = "Modules/Generic Module")]
public class ModuleDescription : ScriptableObject
{
public readonly HashSet<ModuleType> types = new();
public List<ModuleType> types = new();
public GameObject modulePrefab;
public List<Requirement> requirements = new();
public List<PlacementRequirement> PlacementRequirements => requirements
.FindAll(requirement => requirement is PlacementRequirement)
.ConvertAll(requirement => (PlacementRequirement)requirement);
}
}

View File

@@ -6,7 +6,6 @@ namespace Escape_Room_Engine.Engine.Scripts.Modules
{
internal PuzzleModule(Space space, PuzzleModuleDescription description) : base(space, description)
{
_description.types.Add(ModuleType.Puzzle);
srDimensions.Size = Vector2Int.one; // TODO: larger modules
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 629d8948cbb04005b050a6aa1e66c0f4
timeCreated: 1667874124

View File

@@ -0,0 +1,28 @@
using System.Collections.Generic;
using Escape_Room_Engine.Engine.Scripts.Modules;
using UnityEngine;
namespace Escape_Room_Engine.Engine.Scripts.Requirements
{
[CreateAssetMenu(menuName = "Requirements/Place Along Space Edges")]
public class PlaceAlongSpaceEdges : PlacementRequirement
{
public override HashSet<Vector2Int> PlacementCandidates(Module module, Space space)
{
var edgePositions = new HashSet<Vector2Int>();
for (var x = 0; x < space.rrDimensions.width; x++)
{
edgePositions.Add(new Vector2Int(x, 0));
edgePositions.Add(new Vector2Int(x, space.rrDimensions.length));
}
for (var z = 0; z < space.rrDimensions.length; z++)
{
edgePositions.Add(new Vector2Int(0, z));
edgePositions.Add(new Vector2Int(space.rrDimensions.width, z));
}
return edgePositions;
}
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 8ec2cdf0145347e18e7c68221333be2c
timeCreated: 1667876484

View File

@@ -0,0 +1,15 @@
using System.Collections.Generic;
using Escape_Room_Engine.Engine.Scripts.Modules;
using UnityEngine;
namespace Escape_Room_Engine.Engine.Scripts.Requirements
{
[CreateAssetMenu(menuName = "Requirements/Place Anywhere")]
public class PlaceAnywhere : PlacementRequirement
{
public override HashSet<Vector2Int> PlacementCandidates(Module module, Space space)
{
return space.rrDimensions.EveryPosition;
}
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: aa4ff365b4e844e782cd12d8aeebd3d4
timeCreated: 1667876850

View File

@@ -0,0 +1,11 @@
using System.Collections.Generic;
using Escape_Room_Engine.Engine.Scripts.Modules;
using UnityEngine;
namespace Escape_Room_Engine.Engine.Scripts.Requirements
{
public abstract class PlacementRequirement : Requirement
{
public abstract HashSet<Vector2Int> PlacementCandidates(Module module, Space space);
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 65f297b8d32b4f09b89c21b88b43b646
timeCreated: 1667876036

View File

@@ -0,0 +1,9 @@
using UnityEngine;
namespace Escape_Room_Engine.Engine.Scripts.Requirements
{
public abstract class Requirement : ScriptableObject
{
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 9123b592f74444c8b6225f725b6407b3
timeCreated: 1667874140

View File

@@ -5,7 +5,7 @@ namespace Escape_Room_Engine.Engine.Scripts.Utilities
{
public enum LogType
{
Important, ModulePlacement, PassageConnection, RoomGeneration
Important, ModulePlacement, PassageConnection, RoomGeneration, PuzzleGeneration
}
public class Logger : MonoBehaviour

View File

@@ -1,4 +1,5 @@
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
namespace Escape_Room_Engine.Engine.Scripts.Utilities
@@ -24,6 +25,7 @@ namespace Escape_Room_Engine.Engine.Scripts.Utilities
public static int RandomInclusive(int from, int to) => Random.Range(from, to + 1);
public static T RandomElement<T>(this List<T> list) => list[Random.Range(0, list.Count)];
public static T RandomElement<T>(this HashSet<T> set) => set.ElementAt(Random.Range(0, set.Count));
#endregion
}