diff --git a/Assets/Prefabs/Resources/Rooms/debug.test1.prefab b/Assets/Prefabs/Resources/Rooms/Test Room 1.prefab similarity index 67% rename from Assets/Prefabs/Resources/Rooms/debug.test1.prefab rename to Assets/Prefabs/Resources/Rooms/Test Room 1.prefab index c67ed11..58da509 100644 --- a/Assets/Prefabs/Resources/Rooms/debug.test1.prefab +++ b/Assets/Prefabs/Resources/Rooms/Test Room 1.prefab @@ -1,5 +1,60 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: +--- !u!1 &985905253171367612 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 249722007521576760} + - component: {fileID: 5053339003064248858} + m_Layer: 0 + m_Name: Door U + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &249722007521576760 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 985905253171367612} + m_LocalRotation: {x: 0, y: 0, z: 1, w: 0} + m_LocalPosition: {x: 0, y: 4.25, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 2101345830686511700} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 180} +--- !u!114 &5053339003064248858 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 985905253171367612} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8ab941518ca8a4642828187df902b1e0, type: 3} + m_Name: + m_EditorClassIdentifier: + AssignWeight: 1 + Match: {fileID: 0} + Disabled: 0 + Tags: + - test.up + AllowedMatches: + - Tag: test.down + Weight: 1 + - Tag: test.hallway + Weight: 1 + - Tag: test.diag + Weight: 1 --- !u!1 &1513129216089456175 GameObject: m_ObjectHideFlags: 0 @@ -25,11 +80,11 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1513129216089456175} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: -4, z: 0} + m_LocalPosition: {x: 0, y: -4.25, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 2101345830686511700} - m_RootOrder: 1 + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &2357044271177384697 MonoBehaviour: @@ -43,7 +98,18 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 8ab941518ca8a4642828187df902b1e0, type: 3} m_Name: m_EditorClassIdentifier: - Tag: vertical + AssignWeight: 1 + Match: {fileID: 0} + Disabled: 0 + Tags: + - test.down + AllowedMatches: + - Tag: test.up + Weight: 1 + - Tag: test.hallway + Weight: 1 + - Tag: test.diag + Weight: 1 --- !u!1 &1912872275816598801 GameObject: m_ObjectHideFlags: 0 @@ -69,11 +135,11 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1912872275816598801} m_LocalRotation: {x: 0, y: 0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 5, y: -0.0000011920928, z: 0} + m_LocalPosition: {x: 5.25, y: -0.0000011622905, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 2101345830686511700} - m_RootOrder: 3 + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} --- !u!114 &1012738459284175318 MonoBehaviour: @@ -87,7 +153,18 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 8ab941518ca8a4642828187df902b1e0, type: 3} m_Name: m_EditorClassIdentifier: - Tag: horizontal + AssignWeight: 1 + Match: {fileID: 0} + Disabled: 0 + Tags: + - test.right + AllowedMatches: + - Tag: test.left + Weight: 1 + - Tag: test.hallway + Weight: 1 + - Tag: test.diag + Weight: 1 --- !u!1 &2101345829801090270 GameObject: m_ObjectHideFlags: 0 @@ -113,11 +190,11 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2101345829801090270} m_LocalRotation: {x: 0, y: 0, z: -0.7071068, w: 0.7071068} - m_LocalPosition: {x: -5, y: 0, z: 0} + m_LocalPosition: {x: -5.25, y: 0.000000029802319, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 2101345830686511700} - m_RootOrder: 2 + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: -90} --- !u!114 &2101345829801090271 MonoBehaviour: @@ -131,7 +208,18 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 8ab941518ca8a4642828187df902b1e0, type: 3} m_Name: m_EditorClassIdentifier: - Tag: horizontal + AssignWeight: 1 + Match: {fileID: 0} + Disabled: 0 + Tags: + - test.left + AllowedMatches: + - Tag: test.right + Weight: 1 + - Tag: test.hallway + Weight: 1 + - Tag: test.diag + Weight: 1 --- !u!1 &2101345830686511723 GameObject: m_ObjectHideFlags: 0 @@ -143,7 +231,7 @@ GameObject: - component: {fileID: 2101345830686511700} - component: {fileID: 2101345830686511701} m_Layer: 0 - m_Name: debug.test1 + m_Name: Test Room 1 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -160,10 +248,11 @@ Transform: m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: - - {fileID: 7175683798590047672} - {fileID: 422348202299819723} - {fileID: 2101345829801090264} - {fileID: 646947909993633888} + - {fileID: 249722007521576760} + - {fileID: 7244937749187678482} m_Father: {fileID: 0} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -179,16 +268,16 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 6268a80b1893dea4da88a977847d0df1, type: 3} m_Name: m_EditorClassIdentifier: - Identifier: debug.test1 Bounds: - m_Center: {x: 0, y: 0, z: 0} - m_Extent: {x: 5, y: 4, z: 0} + - {fileID: 8002291388036001699} Doors: - - {fileID: 5516082331950511926} - {fileID: 2357044271177384697} - {fileID: 2101345829801090271} - {fileID: 1012738459284175318} ---- !u!1 &9158382049854172236 + - {fileID: 5053339003064248858} + Weight: 1 + CanBeRotated: 1 +--- !u!1 &5483700677498732059 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -196,39 +285,52 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 7175683798590047672} - - component: {fileID: 5516082331950511926} - m_Layer: 0 - m_Name: Door U - m_TagString: Untagged + - component: {fileID: 7244937749187678482} + - component: {fileID: 8002291388036001699} + m_Layer: 6 + m_Name: Bounds + m_TagString: RoomBounds m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &7175683798590047672 +--- !u!4 &7244937749187678482 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9158382049854172236} - m_LocalRotation: {x: 0, y: 0, z: 1, w: 0} - m_LocalPosition: {x: 0, y: 4, z: 0} + m_GameObject: {fileID: 5483700677498732059} + 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_Children: [] m_Father: {fileID: 2101345830686511700} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 180} ---- !u!114 &5516082331950511926 -MonoBehaviour: + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!61 &8002291388036001699 +BoxCollider2D: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9158382049854172236} + m_GameObject: {fileID: 5483700677498732059} m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 8ab941518ca8a4642828187df902b1e0, type: 3} - m_Name: - m_EditorClassIdentifier: - Tag: vertical + m_Density: 1 + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_UsedByEffector: 0 + m_UsedByComposite: 0 + m_Offset: {x: 0, y: 0} + m_SpriteTilingProperty: + border: {x: 0, y: 0, z: 0, w: 0} + pivot: {x: 0, y: 0} + oldSize: {x: 0, y: 0} + newSize: {x: 0, y: 0} + adaptiveTilingThreshold: 0 + drawMode: 0 + adaptiveTiling: 0 + m_AutoTiling: 0 + serializedVersion: 2 + m_Size: {x: 10, y: 8} + m_EdgeRadius: 0 diff --git a/Assets/Prefabs/Resources/Rooms/debug.test1.prefab.meta b/Assets/Prefabs/Resources/Rooms/Test Room 1.prefab.meta similarity index 100% rename from Assets/Prefabs/Resources/Rooms/debug.test1.prefab.meta rename to Assets/Prefabs/Resources/Rooms/Test Room 1.prefab.meta diff --git a/Assets/Prefabs/Resources/Rooms/Test Room 2.prefab b/Assets/Prefabs/Resources/Rooms/Test Room 2.prefab new file mode 100644 index 0000000..b8904bc --- /dev/null +++ b/Assets/Prefabs/Resources/Rooms/Test Room 2.prefab @@ -0,0 +1,289 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1227796095645965869 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6380430514337048435} + - component: {fileID: 3513978694587444866} + m_Layer: 0 + m_Name: Bounds 2 + m_TagString: RoomBounds + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6380430514337048435 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1227796095645965869} + 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_Children: [] + m_Father: {fileID: 7160743633298161740} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!61 &3513978694587444866 +BoxCollider2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1227796095645965869} + m_Enabled: 1 + m_Density: 1 + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_UsedByEffector: 0 + m_UsedByComposite: 0 + m_Offset: {x: 0, y: 0} + m_SpriteTilingProperty: + border: {x: 0, y: 0, z: 0, w: 0} + pivot: {x: 0, y: 0} + oldSize: {x: 0, y: 0} + newSize: {x: 0, y: 0} + adaptiveTilingThreshold: 0 + drawMode: 0 + adaptiveTiling: 0 + m_AutoTiling: 0 + serializedVersion: 2 + m_Size: {x: 6, y: 2} + m_EdgeRadius: 0 +--- !u!1 &1378710288968640192 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5618043188835114854} + - component: {fileID: 5191196053080353493} + m_Layer: 0 + m_Name: Bounds 1 + m_TagString: RoomBounds + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5618043188835114854 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1378710288968640192} + 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_Children: [] + m_Father: {fileID: 7160743633298161740} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!61 &5191196053080353493 +BoxCollider2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1378710288968640192} + m_Enabled: 1 + m_Density: 1 + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_UsedByEffector: 0 + m_UsedByComposite: 0 + m_Offset: {x: 0, y: 0} + m_SpriteTilingProperty: + border: {x: 0, y: 0, z: 0, w: 0} + pivot: {x: 0, y: 0} + oldSize: {x: 0, y: 0} + newSize: {x: 0, y: 0} + adaptiveTilingThreshold: 0 + drawMode: 0 + adaptiveTiling: 0 + m_AutoTiling: 0 + serializedVersion: 2 + m_Size: {x: 4, y: 12} + m_EdgeRadius: 0 +--- !u!1 &7160743633298161742 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7160743633298161740} + - component: {fileID: 7160743633298161741} + m_Layer: 0 + m_Name: Test Room 2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7160743633298161740 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7160743633298161742} + 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_Children: + - {fileID: 7160743634474190115} + - {fileID: 7160743633937940494} + - {fileID: 5618043188835114854} + - {fileID: 6380430514337048435} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &7160743633298161741 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7160743633298161742} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6268a80b1893dea4da88a977847d0df1, type: 3} + m_Name: + m_EditorClassIdentifier: + Bounds: + - {fileID: 5191196053080353493} + - {fileID: 3513978694587444866} + Doors: + - {fileID: 7160743634474190124} + - {fileID: 7160743633937940495} + Weight: 1 + CanBeRotated: 1 +--- !u!1 &7160743633937940488 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7160743633937940494} + - component: {fileID: 7160743633937940495} + m_Layer: 0 + m_Name: Door Bottom + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7160743633937940494 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7160743633937940488} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: -6.25, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 7160743633298161740} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &7160743633937940495 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7160743633937940488} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8ab941518ca8a4642828187df902b1e0, type: 3} + m_Name: + m_EditorClassIdentifier: + AssignWeight: 1 + Match: {fileID: 0} + Disabled: 0 + Tags: + - test.hallway + AllowedMatches: + - Tag: test.hallway + Weight: 1 + - Tag: test.left + Weight: 1 + - Tag: test.right + Weight: 1 + - Tag: test.down + Weight: 1 + - Tag: test.up + Weight: 1 +--- !u!1 &7160743634474190125 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7160743634474190115} + - component: {fileID: 7160743634474190124} + m_Layer: 0 + m_Name: Door Top + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7160743634474190115 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7160743634474190125} + m_LocalRotation: {x: 0, y: 0, z: 1, w: 0} + m_LocalPosition: {x: 0, y: 6.25, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 7160743633298161740} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 180} +--- !u!114 &7160743634474190124 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7160743634474190125} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8ab941518ca8a4642828187df902b1e0, type: 3} + m_Name: + m_EditorClassIdentifier: + AssignWeight: 1 + Match: {fileID: 0} + Disabled: 0 + Tags: + - test.hallway + AllowedMatches: + - Tag: test.hallway + Weight: 1 + - Tag: test.left + Weight: 1 + - Tag: test.right + Weight: 1 + - Tag: test.down + Weight: 1 + - Tag: test.up + Weight: 1 diff --git a/Assets/Scripts/ObjectModels.meta b/Assets/Prefabs/Resources/Rooms/Test Room 2.prefab.meta similarity index 57% rename from Assets/Scripts/ObjectModels.meta rename to Assets/Prefabs/Resources/Rooms/Test Room 2.prefab.meta index f7da6b9..dd5f112 100644 --- a/Assets/Scripts/ObjectModels.meta +++ b/Assets/Prefabs/Resources/Rooms/Test Room 2.prefab.meta @@ -1,7 +1,6 @@ fileFormatVersion: 2 -guid: 7a850575e29641144b8292c0da8ddc94 -folderAsset: yes -DefaultImporter: +guid: 750413450c87d444fae4af9fd9fe2454 +PrefabImporter: externalObjects: {} userData: assetBundleName: diff --git a/Assets/Prefabs/Resources/Rooms/Test Room 3.prefab b/Assets/Prefabs/Resources/Rooms/Test Room 3.prefab new file mode 100644 index 0000000..7afb209 --- /dev/null +++ b/Assets/Prefabs/Resources/Rooms/Test Room 3.prefab @@ -0,0 +1,298 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1163451353649500288 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7133256318772232080} + - component: {fileID: 3990766584289748652} + m_Layer: 0 + m_Name: Door 2b + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7133256318772232080 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1163451353649500288} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.75, y: -2.25, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 6685813788407296846} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &3990766584289748652 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1163451353649500288} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8ab941518ca8a4642828187df902b1e0, type: 3} + m_Name: + m_EditorClassIdentifier: + AssignWeight: 1 + Match: {fileID: 0} + Disabled: 0 + Tags: + - test.diag + AllowedMatches: + - Tag: test.hallway + Weight: 1 + - Tag: test.diag + Weight: 100 + - Tag: test.left + Weight: 1 + - Tag: test.right + Weight: 1 + - Tag: test.up + Weight: 1 + - Tag: test.down + Weight: 1 +--- !u!1 &2249552984264278997 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5436232046164896168} + - component: {fileID: 7646758486997557462} + m_Layer: 0 + m_Name: Bounds + m_TagString: RoomBounds + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5436232046164896168 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2249552984264278997} + 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_Children: [] + m_Father: {fileID: 6685813788407296846} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!61 &7646758486997557462 +BoxCollider2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2249552984264278997} + m_Enabled: 1 + m_Density: 1 + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_UsedByEffector: 0 + m_UsedByComposite: 0 + m_Offset: {x: 0, y: 0} + m_SpriteTilingProperty: + border: {x: 0, y: 0, z: 0, w: 0} + pivot: {x: 0, y: 0} + oldSize: {x: 0, y: 0} + newSize: {x: 0, y: 0} + adaptiveTilingThreshold: 0 + drawMode: 0 + adaptiveTiling: 0 + m_AutoTiling: 0 + serializedVersion: 2 + m_Size: {x: 4, y: 4} + m_EdgeRadius: 0 +--- !u!1 &6685813788407296844 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6685813788407296846} + - component: {fileID: 6685813788407296847} + m_Layer: 0 + m_Name: Test Room 3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6685813788407296846 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6685813788407296844} + 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_Children: + - {fileID: 6685813789027498526} + - {fileID: 6685813789590265037} + - {fileID: 7133256318772232080} + - {fileID: 5436232046164896168} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &6685813788407296847 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6685813788407296844} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6268a80b1893dea4da88a977847d0df1, type: 3} + m_Name: + m_EditorClassIdentifier: + Bounds: + - {fileID: 0} + - {fileID: 7646758486997557462} + Doors: + - {fileID: 6685813789027498527} + - {fileID: 6685813789590265042} + - {fileID: 3990766584289748652} + Weight: 1 + CanBeRotated: 1 +--- !u!1 &6685813789027498524 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6685813789027498526} + - component: {fileID: 6685813789027498527} + m_Layer: 0 + m_Name: Door 1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6685813789027498526 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6685813789027498524} + m_LocalRotation: {x: 0, y: 0, z: -0.92387956, w: 0.38268343} + m_LocalPosition: {x: -2.1767766, y: 2.1767766, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 6685813788407296846} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: -135} +--- !u!114 &6685813789027498527 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6685813789027498524} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8ab941518ca8a4642828187df902b1e0, type: 3} + m_Name: + m_EditorClassIdentifier: + AssignWeight: 1 + Match: {fileID: 0} + Disabled: 0 + Tags: + - test.diag + AllowedMatches: + - Tag: test.hallway + Weight: 1 + - Tag: test.diag + Weight: 100 + - Tag: test.left + Weight: 1 + - Tag: test.right + Weight: 1 + - Tag: test.up + Weight: 1 + - Tag: test.down + Weight: 1 +--- !u!1 &6685813789590265043 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6685813789590265037} + - component: {fileID: 6685813789590265042} + m_Layer: 0 + m_Name: Door 2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6685813789590265037 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6685813789590265043} + m_LocalRotation: {x: 0, y: 0, z: 0.38268343, w: 0.92387956} + m_LocalPosition: {x: 2.1767766, y: -2.1767766, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 6685813788407296846} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 45} +--- !u!114 &6685813789590265042 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6685813789590265043} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8ab941518ca8a4642828187df902b1e0, type: 3} + m_Name: + m_EditorClassIdentifier: + AssignWeight: 1 + Match: {fileID: 0} + Disabled: 0 + Tags: + - test.diag + AllowedMatches: + - Tag: test.hallway + Weight: 1 + - Tag: test.diag + Weight: 100 + - Tag: test.left + Weight: 1 + - Tag: test.right + Weight: 1 + - Tag: test.up + Weight: 1 + - Tag: test.down + Weight: 1 diff --git a/Assets/Prefabs/Resources/Rooms/Test Room 3.prefab.meta b/Assets/Prefabs/Resources/Rooms/Test Room 3.prefab.meta new file mode 100644 index 0000000..86a65da --- /dev/null +++ b/Assets/Prefabs/Resources/Rooms/Test Room 3.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 71ef2644f8da873439dfb79ab2882ebb +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/SampleScene.unity b/Assets/Scenes/SampleScene.unity index 44e7bef..458b2b0 100644 --- a/Assets/Scenes/SampleScene.unity +++ b/Assets/Scenes/SampleScene.unity @@ -266,8 +266,8 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: DungeonRoot: {fileID: 754085558} - StartingRoomId: debug.test1 - RoomCountRange: {x: 20, y: 50} + RoomCountRange: {x: 20, y: 100} + StartingRoom: {fileID: 2101345830686511701, guid: e460ac35ac4587e498e7133f9e3962cf, type: 3} --- !u!4 &1726388858 Transform: m_ObjectHideFlags: 0 diff --git a/Assets/Scripts/EditorInterface/GizmosHelper.cs b/Assets/Scripts/EditorInterface/GizmosHelper.cs index d6f716a..766106f 100644 --- a/Assets/Scripts/EditorInterface/GizmosHelper.cs +++ b/Assets/Scripts/EditorInterface/GizmosHelper.cs @@ -2,11 +2,7 @@ using UnityEngine; public static class GizmosHelper { - public static void DrawLine(Transform transform, Vector3 from, Vector3 to) => DrawPoints(transform, new Vector3[2] - { - from, - to - }); + public static void DrawLine(Transform transform, Vector3 from, Vector3 to) => DrawPoints(transform, new Vector3[2] { from, to }); public static void DrawPoints(Transform transform, Vector3[] points) { // Apply rotation and position. diff --git a/Assets/Scripts/RoomGeneration/DungeonGenerator.cs b/Assets/Scripts/RoomGeneration/DungeonGenerator.cs index fa4242f..3e3fd4e 100644 --- a/Assets/Scripts/RoomGeneration/DungeonGenerator.cs +++ b/Assets/Scripts/RoomGeneration/DungeonGenerator.cs @@ -4,11 +4,9 @@ using UnityEngine; public class DungeonGenerator : Singleton { - // TODO: Add a weighting system. - public Transform DungeonRoot; - public string StartingRoomId; public Vector2Int RoomCountRange; + public RoomObject StartingRoom; private RoomObject[] possibleRooms; @@ -19,54 +17,181 @@ public class DungeonGenerator : Singleton MakeDungeon(); } - public void MakeDungeon() + private void Update() { - int rooms = Random.Range(RoomCountRange.x, RoomCountRange.y + 1); - Debug.Log($"{rooms} rooms will be generated."); - - List emptyDoors = new List(); - RoomObject activeRoom = GetRoomById(StartingRoomId, true); - emptyDoors.AddRange(activeRoom.Doors); - - while (rooms > 0 && emptyDoors.Count > 0) + if (Input.GetKeyDown(KeyCode.Return)) { - // Pick random empty door and spawn a room there. - RoomDoor door = emptyDoors[Random.Range(0, emptyDoors.Count)]; - RoomDoor matchingDoor = GetRoomDoorByTag(door.Tag, true); - if (matchingDoor == null) + foreach (Transform child in DungeonRoot.transform) { - emptyDoors.Remove(door); - continue; + Destroy(child.gameObject); } - - matchingDoor.SetRoomRotationByDoor(door.transform.rotation.eulerAngles); - matchingDoor.SetRoomPositionByDoor(door.transform.position); - - List extraDoors = new List(matchingDoor.Room.Doors); - extraDoors.Remove(matchingDoor); - emptyDoors.AddRange(extraDoors); - - rooms--; + MakeDungeon(); } } - public RoomObject GetRoomById(string id, bool instantiate) + public void MakeDungeon() { - RoomObject[] could = possibleRooms.Where(x => x.Identifier.StartsWith(id)).ToArray(); - RoomObject chosen = could[Random.Range(0, could.Length)]; + int rooms = Random.Range(RoomCountRange.x, RoomCountRange.y + 1); + Debug.Log($"Attempting to generate {rooms} rooms."); - if (instantiate) return Instantiate(chosen, DungeonRoot); - else return chosen; - } - public RoomDoor GetRoomDoorByTag(string tag, bool instantiate) - { - RoomObject[] could = possibleRooms.Where(x => x.Doors.Any(y => y.Tag.StartsWith(tag))).ToArray(); - if (could.Length == 0) return null; + List addedRooms = new List(); + List unassignedDoors = new List(); - RoomObject chosen = could[Random.Range(0, could.Length)]; - if (instantiate) chosen = Instantiate(chosen, DungeonRoot); + // Pick random starting room. + RoomObject startingRoom = Instantiate(StartingRoom, DungeonRoot); + addedRooms.Add(startingRoom); + unassignedDoors.AddRange(startingRoom.Doors); - RoomDoor[] couldDoors = chosen.Doors.Where(x => x.Tag.StartsWith(tag)).ToArray(); - return couldDoors[Random.Range(0, couldDoors.Length)]; + while (rooms > 0 && unassignedDoors.Count > 0) + { + // Pick a random available door (weighted). + float weightSum = (from door in unassignedDoors select door.AssignWeight).Sum(); + RoomDoor chosenDoor = null; + float weightChosen = Random.Range(0, weightSum); + for (int doorIndex = 0; doorIndex < unassignedDoors.Count; doorIndex++) + { + RoomDoor possibleDoor = unassignedDoors[doorIndex]; + if (weightChosen < possibleDoor.AssignWeight) + { + chosenDoor = possibleDoor; + break; + } + else weightChosen -= possibleDoor.AssignWeight; + } + if (chosenDoor.Disabled) + { + // Door is disabled, try again. + unassignedDoors.Remove(chosenDoor); + continue; + } + + // Search for a door that matches the allowed tags of this one. + // First, search for a tag to pick from (also weighted). + List matchDoorTags = new List(chosenDoor.AllowedMatches); + List tempRooms = new List(possibleRooms); + _retryTag: + weightSum = (from tag in matchDoorTags select tag.Weight).Sum(); + TagWeight chosenTag = null; + weightChosen = Random.Range(0, weightSum); + for (int tagIndex = 0; tagIndex < matchDoorTags.Count; tagIndex++) + { + TagWeight possibleTag = matchDoorTags[tagIndex]; + if (weightChosen < possibleTag.Weight) + { + chosenTag = possibleTag; + break; + } + else weightChosen -= possibleTag.Weight; + } + if (chosenTag == null) + { + // None of the tags work here. Let's just skip this door. + chosenDoor.Disabled = true; + unassignedDoors.Remove(chosenDoor); + continue; + } + + _retryRoom: + // Now that we have our tag, find all room types with matching doors + // and pick one at random (weighted yet again). + RoomObject[] matchRooms = tempRooms.Where(x => chosenDoor.AllowedMatches.Any(y => x.Doors.Any(z => z.Tags.Any(w => w == y.Tag)))).ToArray(); + weightSum = (from room in matchRooms select room.Weight).Sum(); + RoomObject chosenRoom = null; + weightChosen = Random.Range(0, weightSum); + for (int roomIndex = 0; roomIndex < matchRooms.Length; roomIndex++) + { + RoomObject possibleRoom = matchRooms[roomIndex]; + if (weightChosen < possibleRoom.Weight) + { + chosenRoom = possibleRoom; + break; + } + else weightChosen -= possibleRoom.Weight; + } + if (chosenRoom == null) + { + // This tag has no matches. Skip it and retry the tag. + matchDoorTags.Remove(chosenTag); + goto _retryTag; + } + + // Pick a random door in this room that fits the tag. + RoomObject chosenRoomClone = Instantiate(chosenRoom, DungeonRoot); + List tempDoors = new List(chosenRoomClone.Doors); + _retryOtherDoor: + RoomDoor[] otherDoors = tempDoors.Where(x => chosenDoor.AllowedMatches.Any(y => x.Tags.Any(z => z == y.Tag))).ToArray(); + weightSum = (from door in otherDoors select door.AssignWeight).Sum(); + RoomDoor otherDoor = null; + weightChosen = Random.Range(0, weightSum); + for (int doorIndex = 0; doorIndex < otherDoors.Length; doorIndex++) + { + RoomDoor possibleDoor = otherDoors[doorIndex]; + if (weightChosen < possibleDoor.AssignWeight) + { + otherDoor = possibleDoor; + break; + } + else weightChosen -= possibleDoor.AssignWeight; + } + if (otherDoor == null) + { + // The doors we might have thought were valid might not actually be. + // (For instance, if the room can't be rotated). Skip this room. + Destroy(chosenRoomClone.gameObject); + tempRooms.Remove(chosenRoom); + goto _retryRoom; + } + + // Spawn the room and rotate it to the correct spot. + if (chosenRoomClone.CanBeRotated) + { + float expectedDoorRot = chosenDoor.transform.rotation.eulerAngles.z + 180; + float curDoorRot = otherDoor.transform.rotation.eulerAngles.z; + float diff = expectedDoorRot - curDoorRot; + + Vector3 curRoomRot = chosenRoomClone.transform.rotation.eulerAngles; + curRoomRot.z += diff; + chosenRoomClone.transform.rotation = Quaternion.Euler(curRoomRot); + } + else + { + // Check if it's impossible. + float diff = Mathf.Abs(otherDoor.transform.rotation.eulerAngles.z - + chosenDoor.transform.rotation.eulerAngles.z); + if (Mathf.Abs(diff - 180) >= 1e-1) + { + // Must be rotated to fit. Skip door. + tempDoors.Remove(otherDoor); + goto _retryOtherDoor; // Retry the door, not the room or tag. + } + } + + // Move the room to position. + Vector3 expectedDoorPos = chosenDoor.transform.position; + Vector3 curDoorPos = otherDoor.transform.position; + Vector3 diffPos = expectedDoorPos - curDoorPos; + chosenRoomClone.transform.position += diffPos; + + // See if this specific transform of the room causes it to overlap with + // any other room. + + // Extra stuff. + chosenDoor.Match = otherDoor; + otherDoor.Match = chosenDoor; + addedRooms.Add(chosenRoomClone); + unassignedDoors.AddRange(chosenRoomClone.Doors); + unassignedDoors.Remove(otherDoor); + + unassignedDoors.Remove(chosenDoor); + rooms--; + } + + if (rooms > 0) + { + Debug.Log($"Ran out of available doors! Skipped generating {rooms} rooms."); + } + + // Make all remaining unavailable doors disabled. + foreach (RoomDoor door in unassignedDoors) door.Disabled = true; } } diff --git a/Assets/Scripts/RoomGeneration/GenerationProcedure.md b/Assets/Scripts/RoomGeneration/GenerationProcedure.md new file mode 100644 index 0000000..fd6a636 --- /dev/null +++ b/Assets/Scripts/RoomGeneration/GenerationProcedure.md @@ -0,0 +1,18 @@ +# Generation Procedure +This file details the algorithm I will be using to procedurally generate dungeons. +It's not super complex in the grand scheme of things, but I still felt the need to +write it out to help myself understand it before trying to implement it. + +## Properties + +### RoomObject +- Bounds +- Doors +- CanBeRotated + +### RoomDoor +- ParentRoom +- Corresponding +- Disabled +- Tags +- AllowedRoomTags (tags and weights) diff --git a/Assets/Scripts/RoomGeneration/GenerationProcedure.md.meta b/Assets/Scripts/RoomGeneration/GenerationProcedure.md.meta new file mode 100644 index 0000000..a5a8142 --- /dev/null +++ b/Assets/Scripts/RoomGeneration/GenerationProcedure.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ecba4d6b0d9d5f14cb7163f8bee51a40 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/RoomGeneration/RoomDoor.cs b/Assets/Scripts/RoomGeneration/RoomDoor.cs index 362b560..1d1b256 100644 --- a/Assets/Scripts/RoomGeneration/RoomDoor.cs +++ b/Assets/Scripts/RoomGeneration/RoomDoor.cs @@ -1,18 +1,8 @@ -using UnityEngine; - public class RoomDoor : RoomItem { - public string Tag; - - public void SetRoomRotationByDoor(Vector3 desiredDoorRotation) - { - Room.transform.rotation *= Quaternion.FromToRotation(Room.transform.rotation.eulerAngles, desiredDoorRotation); - } - public void SetRoomPositionByDoor(Vector2 desiredDoorPosition) - { - Vector2 curPos = transform.position; - Vector2 diff = desiredDoorPosition - curPos; - - Room.transform.position += (Vector3)diff; - } + public float AssignWeight = 1; + public RoomDoor Match; + public bool Disabled; + public string[] Tags; + public TagWeight[] AllowedMatches; } diff --git a/Assets/Scripts/RoomGeneration/RoomGenerationExtensions.cs b/Assets/Scripts/RoomGeneration/RoomGenerationExtensions.cs new file mode 100644 index 0000000..7fd8ea3 --- /dev/null +++ b/Assets/Scripts/RoomGeneration/RoomGenerationExtensions.cs @@ -0,0 +1,19 @@ +using System; + +public static class RoomGenerationExtensions +{ + public static string GetRandom(this TagWeight[] weights) + { + float sumWeight = 0; + for (int i = 0; i < weights.Length; i++) sumWeight += weights[i].Weight; + + float chosen = UnityEngine.Random.Range(0, sumWeight); + for (int i = 0; i < weights.Length; i++) + { + float expected = weights[i].Weight; + if (chosen < expected) return weights[i].Tag; + else chosen -= expected; + } + throw new Exception("How did this happen?"); + } +} diff --git a/Assets/Scripts/RoomGeneration/RoomGenerationExtensions.cs.meta b/Assets/Scripts/RoomGeneration/RoomGenerationExtensions.cs.meta new file mode 100644 index 0000000..23eeb4c --- /dev/null +++ b/Assets/Scripts/RoomGeneration/RoomGenerationExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 312cd75b868b8d0479d8f4f09d57e6d0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/RoomGeneration/RoomItem.cs b/Assets/Scripts/RoomGeneration/RoomItem.cs index 56bc89c..eaacd9d 100644 --- a/Assets/Scripts/RoomGeneration/RoomItem.cs +++ b/Assets/Scripts/RoomGeneration/RoomItem.cs @@ -3,11 +3,11 @@ using UnityEngine; [ExecuteAlways] public abstract class RoomItem : MonoBehaviour { - public RoomObject Room { get; private set; } + public RoomObject ParentRoom { get; private set; } private void Awake() { - Room = GetComponentInParent(); + ParentRoom = GetComponentInParent(); } private void Update() @@ -21,7 +21,7 @@ public abstract class RoomItem : MonoBehaviour private void EditorUpdate() { Awake(); - if (Room == null) + if (ParentRoom == null) { Debug.LogError("A room item must have a parent room."); return; @@ -30,6 +30,6 @@ public abstract class RoomItem : MonoBehaviour private void OnDrawGizmosSelected() { - Room.OnDrawGizmosSelected(); + ParentRoom.OnDrawGizmosSelected(); } } diff --git a/Assets/Scripts/RoomGeneration/RoomObject.cs b/Assets/Scripts/RoomGeneration/RoomObject.cs index feb9e24..2bf13f2 100644 --- a/Assets/Scripts/RoomGeneration/RoomObject.cs +++ b/Assets/Scripts/RoomGeneration/RoomObject.cs @@ -1,15 +1,34 @@ +using System.Linq; using UnityEngine; [ExecuteAlways] public class RoomObject : MonoBehaviour { - public string Identifier; - public Bounds Bounds; + public Collider2D[] Bounds; public RoomDoor[] Doors; + public float Weight = 1; + public bool CanBeRotated; private void Awake() { Doors = GetComponentsInChildren(); + Bounds = GetComponentsInChildren().Where(x => x.gameObject.CompareTag("RoomBounds")).ToArray(); + + if (Bounds.Length == 0) + { + const string message = "No bounds defining children detected! Make sure they have the \"RoomBounds\" tag."; + if (Application.isPlaying) Debug.LogError(message); + else Debug.LogWarning(message); + } + else + { + for (int i = 0; i < Bounds.Length; i++) + { + Collider2D col = Bounds[i]; + col.isTrigger = true; + col.gameObject.layer = 6; + } + } } private void Update() @@ -23,28 +42,21 @@ public class RoomObject : MonoBehaviour private void EditorUpdate() { Awake(); - if (Bounds.extents.z != 0 || Bounds.center.z != 0) - { - Bounds.extents = (Vector2)Bounds.extents; - Bounds.size = (Vector2)Bounds.size; - } } internal void OnDrawGizmos() { // Draw room mesh. - Gizmos.color = new Color(1, 0.5f, 0); // Orange + Color orange = new Color(1, 0.5f, 0); foreach (RoomDoor roomDoor in Doors) { - GizmosHelper.DrawLine(transform, roomDoor.transform.localPosition, Bounds.center); + if (roomDoor.Disabled) Gizmos.color = Color.red; + else Gizmos.color = orange; + GizmosHelper.DrawLine(transform, roomDoor.transform.localPosition, Vector2.zero); } } internal void OnDrawGizmosSelected() { - // Draw room bounds. - Gizmos.color = Color.white; - GizmosHelper.DrawRect(transform, Bounds); - // Draw each door. Gizmos.color = Color.green; Bounds doorBounds = new Bounds(Vector2.zero, new Vector2(2, 1)); diff --git a/Assets/Scripts/RoomGeneration/TagWeight.cs b/Assets/Scripts/RoomGeneration/TagWeight.cs new file mode 100644 index 0000000..55e5eba --- /dev/null +++ b/Assets/Scripts/RoomGeneration/TagWeight.cs @@ -0,0 +1,8 @@ +using System; + +[Serializable] +public class TagWeight +{ + public string Tag; + public float Weight; +} diff --git a/Assets/Scripts/RoomGeneration/TagWeight.cs.meta b/Assets/Scripts/RoomGeneration/TagWeight.cs.meta new file mode 100644 index 0000000..dd69592 --- /dev/null +++ b/Assets/Scripts/RoomGeneration/TagWeight.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d0d7fece214db3a46b7e4bca82d3b82e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/ObjectModels/Singleton.cs b/Assets/Scripts/Singleton.cs similarity index 100% rename from Assets/Scripts/ObjectModels/Singleton.cs rename to Assets/Scripts/Singleton.cs diff --git a/Assets/Scripts/ObjectModels/Singleton.cs.meta b/Assets/Scripts/Singleton.cs.meta similarity index 100% rename from Assets/Scripts/ObjectModels/Singleton.cs.meta rename to Assets/Scripts/Singleton.cs.meta diff --git a/ProjectSettings/TagManager.asset b/ProjectSettings/TagManager.asset index 1c92a78..68a31e4 100644 --- a/ProjectSettings/TagManager.asset +++ b/ProjectSettings/TagManager.asset @@ -3,7 +3,8 @@ --- !u!78 &1 TagManager: serializedVersion: 2 - tags: [] + tags: + - RoomBounds layers: - Default - TransparentFX @@ -11,7 +12,7 @@ TagManager: - - Water - UI - - + - RoomBounds - - -