diff --git a/Assets/Engine/Assets/Prefabs/Generic Door Entrance.prefab b/Assets/Engine/Assets/Prefabs/Generic Door Entrance.prefab index 0800149..bb6029f 100644 --- a/Assets/Engine/Assets/Prefabs/Generic Door Entrance.prefab +++ b/Assets/Engine/Assets/Prefabs/Generic Door Entrance.prefab @@ -5,6 +5,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 2 m_TransformParent: {fileID: 0} m_Modifications: - target: {fileID: 913127997918145164, guid: 30bf75759c019b843afd4c6aeb694159, @@ -12,6 +13,26 @@ PrefabInstance: propertyPath: m_Name value: Generic Door Entrance objectReference: {fileID: 0} + - target: {fileID: 1823695629757333073, guid: 30bf75759c019b843afd4c6aeb694159, + type: 3} + propertyPath: m_Materials.Array.data[0] + value: + objectReference: {fileID: 2100000, guid: 94d63268ac1ac034d8c0af72dd04a346, type: 2} + - target: {fileID: 2697478118666722512, guid: 30bf75759c019b843afd4c6aeb694159, + type: 3} + propertyPath: size.x + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 2697478118666722512, guid: 30bf75759c019b843afd4c6aeb694159, + type: 3} + propertyPath: size.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4139350260725193015, guid: 30bf75759c019b843afd4c6aeb694159, + type: 3} + propertyPath: m_Materials.Array.data[0] + value: + objectReference: {fileID: 2100000, guid: 94d63268ac1ac034d8c0af72dd04a346, type: 2} - target: {fileID: 4775571204437220950, guid: 30bf75759c019b843afd4c6aeb694159, type: 3} propertyPath: m_Materials.Array.data[0] @@ -72,10 +93,21 @@ PrefabInstance: propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} + - target: {fileID: 6067040365495472252, guid: 30bf75759c019b843afd4c6aeb694159, + type: 3} + propertyPath: m_Materials.Array.data[0] + value: + objectReference: {fileID: 2100000, guid: 94d63268ac1ac034d8c0af72dd04a346, type: 2} + - target: {fileID: 6259937801360820257, guid: 30bf75759c019b843afd4c6aeb694159, + type: 3} + propertyPath: m_Materials.Array.data[0] + value: + objectReference: {fileID: 2100000, guid: 94d63268ac1ac034d8c0af72dd04a346, type: 2} - target: {fileID: 8741597917111152084, guid: 30bf75759c019b843afd4c6aeb694159, type: 3} propertyPath: m_Materials.Array.data[0] value: objectReference: {fileID: 2100000, guid: 94d63268ac1ac034d8c0af72dd04a346, type: 2} m_RemovedComponents: [] + m_AddedGameObjects: [] m_SourcePrefab: {fileID: 100100000, guid: 30bf75759c019b843afd4c6aeb694159, type: 3} diff --git a/Assets/Engine/Assets/Prefabs/Generic Door Exit.prefab b/Assets/Engine/Assets/Prefabs/Generic Door Exit.prefab index 63fe1b3..5bac5e8 100644 --- a/Assets/Engine/Assets/Prefabs/Generic Door Exit.prefab +++ b/Assets/Engine/Assets/Prefabs/Generic Door Exit.prefab @@ -5,6 +5,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 2 m_TransformParent: {fileID: 0} m_Modifications: - target: {fileID: 913127997918145164, guid: 30bf75759c019b843afd4c6aeb694159, @@ -12,6 +13,26 @@ PrefabInstance: propertyPath: m_Name value: Generic Door Exit objectReference: {fileID: 0} + - target: {fileID: 1823695629757333073, guid: 30bf75759c019b843afd4c6aeb694159, + type: 3} + propertyPath: m_Materials.Array.data[0] + value: + objectReference: {fileID: 2100000, guid: 3e334d6799a0d0040a41fe4794da90f5, type: 2} + - target: {fileID: 2697478118666722512, guid: 30bf75759c019b843afd4c6aeb694159, + type: 3} + propertyPath: size.x + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 2697478118666722512, guid: 30bf75759c019b843afd4c6aeb694159, + type: 3} + propertyPath: size.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4139350260725193015, guid: 30bf75759c019b843afd4c6aeb694159, + type: 3} + propertyPath: m_Materials.Array.data[0] + value: + objectReference: {fileID: 2100000, guid: 3e334d6799a0d0040a41fe4794da90f5, type: 2} - target: {fileID: 4775571204437220950, guid: 30bf75759c019b843afd4c6aeb694159, type: 3} propertyPath: m_Materials.Array.data[0] @@ -72,10 +93,21 @@ PrefabInstance: propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} + - target: {fileID: 6067040365495472252, guid: 30bf75759c019b843afd4c6aeb694159, + type: 3} + propertyPath: m_Materials.Array.data[0] + value: + objectReference: {fileID: 2100000, guid: 3e334d6799a0d0040a41fe4794da90f5, type: 2} + - target: {fileID: 6259937801360820257, guid: 30bf75759c019b843afd4c6aeb694159, + type: 3} + propertyPath: m_Materials.Array.data[0] + value: + objectReference: {fileID: 2100000, guid: 3e334d6799a0d0040a41fe4794da90f5, type: 2} - target: {fileID: 8741597917111152084, guid: 30bf75759c019b843afd4c6aeb694159, type: 3} propertyPath: m_Materials.Array.data[0] value: objectReference: {fileID: 2100000, guid: 3e334d6799a0d0040a41fe4794da90f5, type: 2} m_RemovedComponents: [] + m_AddedGameObjects: [] m_SourcePrefab: {fileID: 100100000, guid: 30bf75759c019b843afd4c6aeb694159, type: 3} diff --git a/Assets/Engine/Assets/Prefabs/Generic Door.prefab b/Assets/Engine/Assets/Prefabs/Generic Door.prefab index 6a16911..208c73b 100644 --- a/Assets/Engine/Assets/Prefabs/Generic Door.prefab +++ b/Assets/Engine/Assets/Prefabs/Generic Door.prefab @@ -1,10 +1,399 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: +--- !u!1 &1913834045633648974 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4111078790584261234} + - component: {fileID: 930567536218305092} + - component: {fileID: 4139350260725193015} + - component: {fileID: 6851462248859848297} + m_Layer: 0 + m_Name: Bottom Left + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4111078790584261234 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1913834045633648974} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.45, y: 0, z: -0.45} + m_LocalScale: {x: 0.1, y: 0.1, z: 0.1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6060240960858060261} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &930567536218305092 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1913834045633648974} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &4139350260725193015 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1913834045633648974} + 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!65 &6851462248859848297 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1913834045633648974} + 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} +--- !u!1 &2393410069396553260 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7573266324358532870} + - component: {fileID: 5021870322124495607} + - component: {fileID: 6259937801360820257} + - component: {fileID: 5294991032816247984} + m_Layer: 0 + m_Name: Top Right + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7573266324358532870 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2393410069396553260} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.45, y: 0, z: 0.45} + m_LocalScale: {x: 0.1, y: 0.1, z: 0.1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6060240960858060261} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &5021870322124495607 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2393410069396553260} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &6259937801360820257 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2393410069396553260} + 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!65 &5294991032816247984 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2393410069396553260} + 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} +--- !u!1 &3378197021456377203 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8723730948981272237} + - component: {fileID: 5404148238049893153} + - component: {fileID: 6067040365495472252} + - component: {fileID: 7980204004685275879} + m_Layer: 0 + m_Name: Top Left + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8723730948981272237 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3378197021456377203} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.45, y: 0, z: 0.45} + m_LocalScale: {x: 0.1, y: 0.1, z: 0.1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6060240960858060261} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &5404148238049893153 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3378197021456377203} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &6067040365495472252 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3378197021456377203} + 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!65 &7980204004685275879 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3378197021456377203} + 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} +--- !u!1 &5330158691791872551 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4122861465983034065} + - component: {fileID: 6871736232808740964} + - component: {fileID: 1823695629757333073} + - component: {fileID: 8902430086341030450} + m_Layer: 0 + m_Name: Bottom Right + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4122861465983034065 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5330158691791872551} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.45, y: 0, z: -0.45} + m_LocalScale: {x: 0.1, y: 0.1, z: 0.1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6060240960858060261} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &6871736232808740964 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5330158691791872551} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1823695629757333073 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5330158691791872551} + 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!65 &8902430086341030450 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5330158691791872551} + 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} --- !u!1001 &4110777154808243535 PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 2 m_TransformParent: {fileID: 0} m_Modifications: - target: {fileID: 3864228228344123331, guid: ad2655de8289afa40aa520f9fc474681, @@ -17,11 +406,21 @@ PrefabInstance: propertyPath: m_LocalScale.y value: 2 objectReference: {fileID: 0} + - target: {fileID: 7279153380729290489, guid: ad2655de8289afa40aa520f9fc474681, + type: 3} + propertyPath: m_LocalPosition.x + value: 0.5 + objectReference: {fileID: 0} - target: {fileID: 7279153380729290489, guid: ad2655de8289afa40aa520f9fc474681, type: 3} propertyPath: m_LocalPosition.y value: 1 objectReference: {fileID: 0} + - target: {fileID: 7279153380729290489, guid: ad2655de8289afa40aa520f9fc474681, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} - target: {fileID: 7860513085978939562, guid: ad2655de8289afa40aa520f9fc474681, type: 3} propertyPath: m_RootOrder @@ -79,6 +478,23 @@ PrefabInstance: objectReference: {fileID: 0} m_RemovedComponents: - {fileID: 4604142456167599783, guid: ad2655de8289afa40aa520f9fc474681, type: 3} + m_AddedGameObjects: + - targetCorrespondingSourceObject: {fileID: 7860513085978939562, guid: ad2655de8289afa40aa520f9fc474681, + type: 3} + insertIndex: -1 + addedObject: {fileID: 4111078790584261234} + - targetCorrespondingSourceObject: {fileID: 7860513085978939562, guid: ad2655de8289afa40aa520f9fc474681, + type: 3} + insertIndex: -1 + addedObject: {fileID: 4122861465983034065} + - targetCorrespondingSourceObject: {fileID: 7860513085978939562, guid: ad2655de8289afa40aa520f9fc474681, + type: 3} + insertIndex: -1 + addedObject: {fileID: 8723730948981272237} + - targetCorrespondingSourceObject: {fileID: 7860513085978939562, guid: ad2655de8289afa40aa520f9fc474681, + type: 3} + insertIndex: -1 + addedObject: {fileID: 7573266324358532870} m_SourcePrefab: {fileID: 100100000, guid: ad2655de8289afa40aa520f9fc474681, type: 3} --- !u!1 &913127997918145164 stripped GameObject: @@ -98,3 +514,10 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 696181e3eda449d49d4c1c88b07d7b05, type: 3} m_Name: m_EditorClassIdentifier: + size: {x: 2, y: 2} +--- !u!4 &6060240960858060261 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 7860513085978939562, guid: ad2655de8289afa40aa520f9fc474681, + type: 3} + m_PrefabInstance: {fileID: 4110777154808243535} + m_PrefabAsset: {fileID: 0} diff --git a/Assets/Engine/Runtime/Placement.cs b/Assets/Engine/Runtime/Placement.cs index f3bd3ab..4d0d6ba 100644 --- a/Assets/Engine/Runtime/Placement.cs +++ b/Assets/Engine/Runtime/Placement.cs @@ -1,47 +1,122 @@ -using System.Collections.Generic; -using System.Linq; +using System; +using System.Collections.Generic; using UnityEngine; +using Range = EscapeRoomEngine.Engine.Runtime.Utilities.Range; namespace EscapeRoomEngine.Engine.Runtime { public struct Placement { + /// + /// The placement position is always considered to be at (0.5, 0.5) relative to the placement. + /// + /// In a placement of size (1, 1), the position is at the center of the placement. In a larger placement, the position is in the center of the bottom left square meter. + /// public Vector3Int position; public Vector2Int size; public Orientation orientation; - - /// - /// Create a set with every possible combination of position and orientation given the dimensions. - /// - /// - /// The size of all placements will be (1, 1). - /// - /// - public List EveryPlacement - { + + public Vector3Int BottomLeft { get { - var placements = new List(); - - for (var zIter = 0; zIter < size.y; zIter++) + var sizeMinusOne = size - Vector2Int.one; + return orientation switch { - for (var xIter = 0; xIter < size.x; xIter++) - { - placements.AddRange(OrientationExtensions.EveryOrientation().Select(o => new Placement - { - position = new Vector3Int(xIter, 0, zIter), - size = Vector2Int.one, - orientation = o - })); - } - } + Orientation.North => position, + Orientation.East => position - new Vector3Int(0, 0, sizeMinusOne.x), + Orientation.South => position - new Vector3Int(sizeMinusOne.x, 0, sizeMinusOne.y), + Orientation.West => position - new Vector3Int(sizeMinusOne.y, 0, 0), + _ => throw new ArgumentOutOfRangeException() + }; + } + } + + /// + /// Create a set with every possible combination of position and orientation of placements that fit in a given space. + /// The size of the placements are given by this placement. + /// + /// The generated placements will fit inside the placement of the given space. + public List EveryPlacementInSpace(Space space) + { + var placements = new List(); + var sizeMinusOne = size - Vector2Int.one; + var spaceSize = space.rrPlacement.size; - return placements; + foreach (var o in OrientationExtensions.EveryOrientation()) + { + Range x; + Range z; + + switch (o) + { + case Orientation.North: + x = new Range(0, spaceSize.x - sizeMinusOne.x); + z = new Range(0, spaceSize.y - sizeMinusOne.y); + break; + case Orientation.East: + x = new Range(0, spaceSize.x - sizeMinusOne.y); + z = new Range(sizeMinusOne.x, spaceSize.y); + break; + case Orientation.South: + x = new Range(sizeMinusOne.x, spaceSize.x); + z = new Range(sizeMinusOne.y, spaceSize.y); + break; + case Orientation.West: + x = new Range(sizeMinusOne.y, spaceSize.x); + z = new Range(0, spaceSize.y - sizeMinusOne.x); + break; + default: + throw new ArgumentOutOfRangeException(); + } + + placements.AddRange(ConstrainedPlacements(o, size, x, z)); + } + + return placements; + } + + private static IEnumerable ConstrainedPlacements( + Orientation orientation, + Vector2Int size, + Range xRange, Range zRange) + { + var placements = new List(xRange.Length * zRange.Length); + + for (var z = zRange.min; z < zRange.max; z++) + { + for (var x = xRange.min; x < xRange.max; x++) + { + placements.Add(new Placement + { + position = new Vector3Int(x, 0, z), + size = size, + orientation = orientation + }); + } + } + + return placements; + } + + /// + /// Performs the specified action for each position inside the size of this placement. + /// + /// For the placement {(2, 0, 3), (1, 2), East} the action would be called twice with the parameters (2, 0, 3) and (3, 0, 3). + /// + public void ForEachPosition(Action action) + { + var bottomLeft = BottomLeft; + + for (var z = 0; z < (orientation is Orientation.North or Orientation.South ? size.y : size.x); z++) + { + for (var x = 0; x < (orientation is Orientation.North or Orientation.South ? size.x : size.y); x++) + { + action(bottomLeft + new Vector3Int(x, 0, z)); + } } } - public string PositionAndOrientation() => $"{{({position.x}, {position.z}), {orientation}}}"; - + public string ToStringShort() => $"{{{position}, {orientation}}}"; public override string ToString() => $"{{{position}, {size}, {orientation}}}"; } } \ No newline at end of file diff --git a/Assets/Engine/Runtime/Requirements/FaceSpaceCenter.cs b/Assets/Engine/Runtime/Requirements/FaceSpaceCenter.cs index 6d9c1c7..0def07c 100644 --- a/Assets/Engine/Runtime/Requirements/FaceSpaceCenter.cs +++ b/Assets/Engine/Runtime/Requirements/FaceSpaceCenter.cs @@ -9,14 +9,17 @@ namespace EscapeRoomEngine.Engine.Runtime.Requirements { protected override List FilterCandidates(List candidates, Module module, Space space) { - float width = space.rrPlacement.size.x - 1; - float length = space.rrPlacement.size.y - 1; + float width = space.rrPlacement.size.x; + float length = space.rrPlacement.size.y; candidates.RemoveAll(candidate => { - var xRel = candidate.position.x / width; - var zRel = candidate.position.z / length; - + var bottomLeft = candidate.BottomLeft; + var center = new Vector2(bottomLeft.x, bottomLeft.z) + + new Vector2(candidate.size.x / 2f, candidate.size.y / 2f); + var xRel = center.x / width; + var zRel = center.y / length; + return candidate.orientation != (zRel > xRel ? zRel > 1 - xRel diff --git a/Assets/Engine/Runtime/Requirements/NoOverlap.cs b/Assets/Engine/Runtime/Requirements/NoOverlap.cs index ccde5a7..5aa4f15 100644 --- a/Assets/Engine/Runtime/Requirements/NoOverlap.cs +++ b/Assets/Engine/Runtime/Requirements/NoOverlap.cs @@ -9,10 +9,22 @@ namespace EscapeRoomEngine.Engine.Runtime.Requirements { protected override List FilterCandidates(List candidates, Module module, Space space) { - space.AllModules.ForEach(other => - { - candidates.RemoveAll(candidate => candidate.position.Equals(other.SrPosition)); - }); + space.AllModules.ForEach(other => // for all other module ... + other.srPlacement.ForEachPosition(otherPosition => // ... positions ... + candidates.RemoveAll(candidate => // ... remove every candidate that ... + { + var remove = false; + + candidate.ForEachPosition(position => // ... anywhere inside its bounds ... + { + if (!remove) + { + remove = position.Equals(otherPosition); // ... overlaps with other modules' position + } + }); + + return remove; + }))); return candidates; } diff --git a/Assets/Engine/Runtime/Requirements/PlaceAlongSpaceEdges.cs b/Assets/Engine/Runtime/Requirements/PlaceAlongSpaceEdges.cs index d9294ba..9cfa686 100644 --- a/Assets/Engine/Runtime/Requirements/PlaceAlongSpaceEdges.cs +++ b/Assets/Engine/Runtime/Requirements/PlaceAlongSpaceEdges.cs @@ -14,8 +14,17 @@ namespace EscapeRoomEngine.Engine.Runtime.Requirements candidates.RemoveAll(candidate => { - var position = candidate.position; - return position.x > 0 && position.x < right && position.z > 0 && position.z < top; + var keep = false; + + candidate.ForEachPosition(position => + { + if (!keep) + { + keep = position.x == 0 || position.x == right || position.z == 0 || position.z == top; + } + }); + + return !keep; }); return candidates; diff --git a/Assets/Engine/Runtime/Requirements/PlacementRequirement.cs b/Assets/Engine/Runtime/Requirements/PlacementRequirement.cs index f68b9a2..dac2f19 100644 --- a/Assets/Engine/Runtime/Requirements/PlacementRequirement.cs +++ b/Assets/Engine/Runtime/Requirements/PlacementRequirement.cs @@ -18,11 +18,11 @@ namespace EscapeRoomEngine.Engine.Runtime.Requirements } var placementCandidates = Candidates( - space.rrPlacement.EveryPlacement, + module.srPlacement.EveryPlacementInSpace(space), module.description.placementRequirements, module, space); - Logger.Log($"placement candidates: {string.Join(", ", placementCandidates.ToList().ConvertAll(c => c.PositionAndOrientation()))}", LogType.RequirementResolution); + Logger.Log($"placement candidates: {string.Join(", ", placementCandidates.ToList().ConvertAll(c => c.ToStringShort()))}", LogType.RequirementResolution); if (placementCandidates.Count > 0) { diff --git a/Assets/Engine/Runtime/Utilities/Range.cs b/Assets/Engine/Runtime/Utilities/Range.cs new file mode 100644 index 0000000..0798f4c --- /dev/null +++ b/Assets/Engine/Runtime/Utilities/Range.cs @@ -0,0 +1,17 @@ +namespace EscapeRoomEngine.Engine.Runtime.Utilities +{ + public struct Range + { + public int min, max; + + public int Length => max - min; + + public Range(int min, int max) + { + this.min = min; + this.max = max; + } + + public override string ToString() => $"{{{min}, ..., {max}}}"; + } +} \ No newline at end of file diff --git a/Assets/Engine/Runtime/Utilities/Range.cs.meta b/Assets/Engine/Runtime/Utilities/Range.cs.meta new file mode 100644 index 0000000..0d2b792 --- /dev/null +++ b/Assets/Engine/Runtime/Utilities/Range.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: c02bc5b9e6d74d6eaab716d63b53a48f +timeCreated: 1669288906 \ No newline at end of file diff --git a/Assets/Escape Room Engine/Test Assets/Test Puzzle.asset b/Assets/Escape Room Engine/Test Assets/Test Puzzle.asset index b8f970e..76f7626 100644 --- a/Assets/Escape Room Engine/Test Assets/Test Puzzle.asset +++ b/Assets/Escape Room Engine/Test Assets/Test Puzzle.asset @@ -17,6 +17,6 @@ MonoBehaviour: type: 3} preconditionRequirements: [] placementRequirements: - - {fileID: 11400000, guid: 43eb2a566a244964aa3a3319eaafe1a8, type: 2} - - {fileID: 11400000, guid: 1f1825b71bae09c438a1cb52603347d6, type: 2} - {fileID: 11400000, guid: ed4830127e9381245a6af07e42c52422, type: 2} + - {fileID: 11400000, guid: 1f1825b71bae09c438a1cb52603347d6, type: 2} + - {fileID: 11400000, guid: 43eb2a566a244964aa3a3319eaafe1a8, type: 2}