From a03b70a1cadef6f5e00fe78c03f3ac9c51e4a2c0 Mon Sep 17 00:00:00 2001 From: Michal Pikulski Date: Mon, 1 Sep 2025 22:51:52 +0200 Subject: [PATCH] Implement SceneManager with asynchronous load/unload routines ready for bootstrapper scene. Implement simple level switching --- .gitignore | 2 + Assets/Data/Items.meta | 8 + .../Data/{ => Items}/ExamplePickupItem.asset | 0 .../{ => Items}/ExamplePickupItem.asset.meta | 0 Assets/Data/SubLevels.meta | 8 + Assets/Data/SubLevels/OverWorld.asset | 17 ++ Assets/Data/SubLevels/OverWorld.asset.meta | 8 + Assets/Data/SubLevels/Quarry.asset | 17 ++ Assets/Data/SubLevels/Quarry.asset.meta | 8 + Assets/Prefabs/Levels/BaseLevelSwitch.prefab | 164 +++++++++++ .../Levels/BaseLevelSwitch.prefab.meta | 7 + .../Levels/OverworldLevelSwitch.prefab | 107 +++++++ .../Levels/OverworldLevelSwitch.prefab.meta | 7 + .../Prefabs/Levels/QuarryLevelSwitch.prefab | 123 ++++++++ .../Levels/QuarryLevelSwitch.prefab.meta | 7 + ...erwold.unity => AppleHillsOverworld.unity} | 113 +++++++- ...ty.meta => AppleHillsOverworld.unity.meta} | 0 Assets/Scenes/Levels/Quarry.unity | 262 +++++++++++++++++- Assets/Scripts/LevelSwitch.cs | 18 +- Assets/Scripts/SceneManagerService.cs | 183 ++++++++++++ Assets/Scripts/SceneManagerService.cs.meta | 3 + ProjectSettings/EditorBuildSettings.asset | 8 +- 22 files changed, 1063 insertions(+), 7 deletions(-) create mode 100644 Assets/Data/Items.meta rename Assets/Data/{ => Items}/ExamplePickupItem.asset (100%) rename Assets/Data/{ => Items}/ExamplePickupItem.asset.meta (100%) create mode 100644 Assets/Data/SubLevels.meta create mode 100644 Assets/Data/SubLevels/OverWorld.asset create mode 100644 Assets/Data/SubLevels/OverWorld.asset.meta create mode 100644 Assets/Data/SubLevels/Quarry.asset create mode 100644 Assets/Data/SubLevels/Quarry.asset.meta create mode 100644 Assets/Prefabs/Levels/BaseLevelSwitch.prefab create mode 100644 Assets/Prefabs/Levels/BaseLevelSwitch.prefab.meta create mode 100644 Assets/Prefabs/Levels/OverworldLevelSwitch.prefab create mode 100644 Assets/Prefabs/Levels/OverworldLevelSwitch.prefab.meta create mode 100644 Assets/Prefabs/Levels/QuarryLevelSwitch.prefab create mode 100644 Assets/Prefabs/Levels/QuarryLevelSwitch.prefab.meta rename Assets/Scenes/{AppleHillsOverwold.unity => AppleHillsOverworld.unity} (99%) rename Assets/Scenes/{AppleHillsOverwold.unity.meta => AppleHillsOverworld.unity.meta} (100%) create mode 100644 Assets/Scripts/SceneManagerService.cs create mode 100644 Assets/Scripts/SceneManagerService.cs.meta diff --git a/.gitignore b/.gitignore index 9eb70ce1..4da0a4f2 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,8 @@ # # Get latest from https://github.com/github/gitignore/blob/main/Unity.gitignore # +.idea/ + .utmp/ /[Ll]ibrary/ /[Tt]emp/ diff --git a/Assets/Data/Items.meta b/Assets/Data/Items.meta new file mode 100644 index 00000000..23d4ec01 --- /dev/null +++ b/Assets/Data/Items.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a3cec30feba6b434ea0de2783b008115 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/ExamplePickupItem.asset b/Assets/Data/Items/ExamplePickupItem.asset similarity index 100% rename from Assets/Data/ExamplePickupItem.asset rename to Assets/Data/Items/ExamplePickupItem.asset diff --git a/Assets/Data/ExamplePickupItem.asset.meta b/Assets/Data/Items/ExamplePickupItem.asset.meta similarity index 100% rename from Assets/Data/ExamplePickupItem.asset.meta rename to Assets/Data/Items/ExamplePickupItem.asset.meta diff --git a/Assets/Data/SubLevels.meta b/Assets/Data/SubLevels.meta new file mode 100644 index 00000000..5c0db697 --- /dev/null +++ b/Assets/Data/SubLevels.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4a8c325e62ef1d04485a54e4e1e0586d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/SubLevels/OverWorld.asset b/Assets/Data/SubLevels/OverWorld.asset new file mode 100644 index 00000000..fcc2eeb5 --- /dev/null +++ b/Assets/Data/SubLevels/OverWorld.asset @@ -0,0 +1,17 @@ +%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: 451d08ffb9ed459db0f0473f2275743b, type: 3} + m_Name: OverWorld + m_EditorClassIdentifier: + targetLevelSceneName: AppleHillsOverworld + description: Level loading for main overworld level + mapSprite: {fileID: 8539217831253106567, guid: 69e3e7adfbf712247a6a498c83e9a4f7, type: 3} diff --git a/Assets/Data/SubLevels/OverWorld.asset.meta b/Assets/Data/SubLevels/OverWorld.asset.meta new file mode 100644 index 00000000..e2d9048f --- /dev/null +++ b/Assets/Data/SubLevels/OverWorld.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 46810f51fd1f1134eac58ec1c72c382b +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/SubLevels/Quarry.asset b/Assets/Data/SubLevels/Quarry.asset new file mode 100644 index 00000000..1c5b6b8e --- /dev/null +++ b/Assets/Data/SubLevels/Quarry.asset @@ -0,0 +1,17 @@ +%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: 451d08ffb9ed459db0f0473f2275743b, type: 3} + m_Name: Quarry + m_EditorClassIdentifier: + targetLevelSceneName: Quarry + description: Level loading for Quarry + mapSprite: {fileID: 8539217831253106567, guid: 69e3e7adfbf712247a6a498c83e9a4f7, type: 3} diff --git a/Assets/Data/SubLevels/Quarry.asset.meta b/Assets/Data/SubLevels/Quarry.asset.meta new file mode 100644 index 00000000..d50043e9 --- /dev/null +++ b/Assets/Data/SubLevels/Quarry.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fc5550b1c1e747b459a4e0c1474f0e2a +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/Levels/BaseLevelSwitch.prefab b/Assets/Prefabs/Levels/BaseLevelSwitch.prefab new file mode 100644 index 00000000..dde07a35 --- /dev/null +++ b/Assets/Prefabs/Levels/BaseLevelSwitch.prefab @@ -0,0 +1,164 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1498439134679474750 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4428217320659622763} + - component: {fileID: 5374700348512867011} + - component: {fileID: 841695541655102207} + - component: {fileID: 4981092805118965486} + - component: {fileID: 1397300447834037203} + m_Layer: 0 + m_Name: BaseLevelSwitch + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4428217320659622763 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1498439134679474750} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.26496, y: -0.01775, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!212 &5374700348512867011 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1498439134679474750} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} + 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: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Sprite: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 1, y: 1} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 0 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 +--- !u!61 &841695541655102207 +BoxCollider2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1498439134679474750} + m_Enabled: 1 + serializedVersion: 3 + m_Density: 1 + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_ForceSendLayers: + serializedVersion: 2 + m_Bits: 4294967295 + m_ForceReceiveLayers: + serializedVersion: 2 + m_Bits: 4294967295 + m_ContactCaptureLayers: + serializedVersion: 2 + m_Bits: 4294967295 + m_CallbackLayers: + serializedVersion: 2 + m_Bits: 4294967295 + m_IsTrigger: 0 + m_UsedByEffector: 0 + m_CompositeOperation: 0 + m_CompositeOrder: 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 + m_Size: {x: 1, y: 1} + m_EdgeRadius: 0 +--- !u!114 &4981092805118965486 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1498439134679474750} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 73d6494a73174ffabc6a7d3089d51e73, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &1397300447834037203 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1498439134679474750} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 66cdab2e217c4c8388e2fc66da02f296, type: 3} + m_Name: + m_EditorClassIdentifier: + switchData: {fileID: 0} + iconRenderer: {fileID: 5374700348512867011} diff --git a/Assets/Prefabs/Levels/BaseLevelSwitch.prefab.meta b/Assets/Prefabs/Levels/BaseLevelSwitch.prefab.meta new file mode 100644 index 00000000..a2c5c72f --- /dev/null +++ b/Assets/Prefabs/Levels/BaseLevelSwitch.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 93ab59741ddc4e045a61cd8e05b65578 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/Levels/OverworldLevelSwitch.prefab b/Assets/Prefabs/Levels/OverworldLevelSwitch.prefab new file mode 100644 index 00000000..3dd2d077 --- /dev/null +++ b/Assets/Prefabs/Levels/OverworldLevelSwitch.prefab @@ -0,0 +1,107 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &5603952461431697508 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 841695541655102207, guid: 93ab59741ddc4e045a61cd8e05b65578, type: 3} + propertyPath: m_SpriteTilingProperty.pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 841695541655102207, guid: 93ab59741ddc4e045a61cd8e05b65578, type: 3} + propertyPath: m_SpriteTilingProperty.pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 841695541655102207, guid: 93ab59741ddc4e045a61cd8e05b65578, type: 3} + propertyPath: m_SpriteTilingProperty.newSize.x + value: 0.48 + objectReference: {fileID: 0} + - target: {fileID: 841695541655102207, guid: 93ab59741ddc4e045a61cd8e05b65578, type: 3} + propertyPath: m_SpriteTilingProperty.newSize.y + value: 0.48 + objectReference: {fileID: 0} + - target: {fileID: 841695541655102207, guid: 93ab59741ddc4e045a61cd8e05b65578, type: 3} + propertyPath: m_SpriteTilingProperty.oldSize.x + value: 0.48 + objectReference: {fileID: 0} + - target: {fileID: 841695541655102207, guid: 93ab59741ddc4e045a61cd8e05b65578, type: 3} + propertyPath: m_SpriteTilingProperty.oldSize.y + value: 0.48 + objectReference: {fileID: 0} + - target: {fileID: 841695541655102207, guid: 93ab59741ddc4e045a61cd8e05b65578, type: 3} + propertyPath: m_SpriteTilingProperty.adaptiveTilingThreshold + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 1397300447834037203, guid: 93ab59741ddc4e045a61cd8e05b65578, type: 3} + propertyPath: switchData + value: + objectReference: {fileID: 11400000, guid: 46810f51fd1f1134eac58ec1c72c382b, type: 2} + - target: {fileID: 1498439134679474750, guid: 93ab59741ddc4e045a61cd8e05b65578, type: 3} + propertyPath: m_Name + value: AppleHillsOverworld + objectReference: {fileID: 0} + - target: {fileID: 4428217320659622763, guid: 93ab59741ddc4e045a61cd8e05b65578, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4428217320659622763, guid: 93ab59741ddc4e045a61cd8e05b65578, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4428217320659622763, guid: 93ab59741ddc4e045a61cd8e05b65578, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4428217320659622763, guid: 93ab59741ddc4e045a61cd8e05b65578, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4428217320659622763, guid: 93ab59741ddc4e045a61cd8e05b65578, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4428217320659622763, guid: 93ab59741ddc4e045a61cd8e05b65578, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4428217320659622763, guid: 93ab59741ddc4e045a61cd8e05b65578, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4428217320659622763, guid: 93ab59741ddc4e045a61cd8e05b65578, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4428217320659622763, guid: 93ab59741ddc4e045a61cd8e05b65578, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4428217320659622763, guid: 93ab59741ddc4e045a61cd8e05b65578, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5374700348512867011, guid: 93ab59741ddc4e045a61cd8e05b65578, type: 3} + propertyPath: m_Size.x + value: 0.48 + objectReference: {fileID: 0} + - target: {fileID: 5374700348512867011, guid: 93ab59741ddc4e045a61cd8e05b65578, type: 3} + propertyPath: m_Size.y + value: 0.48 + objectReference: {fileID: 0} + - target: {fileID: 5374700348512867011, guid: 93ab59741ddc4e045a61cd8e05b65578, type: 3} + propertyPath: m_Sprite + value: + objectReference: {fileID: 8539217831253106567, guid: 69e3e7adfbf712247a6a498c83e9a4f7, type: 3} + - target: {fileID: 5374700348512867011, guid: 93ab59741ddc4e045a61cd8e05b65578, type: 3} + propertyPath: m_WasSpriteAssigned + value: 1 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 93ab59741ddc4e045a61cd8e05b65578, type: 3} diff --git a/Assets/Prefabs/Levels/OverworldLevelSwitch.prefab.meta b/Assets/Prefabs/Levels/OverworldLevelSwitch.prefab.meta new file mode 100644 index 00000000..636d3c75 --- /dev/null +++ b/Assets/Prefabs/Levels/OverworldLevelSwitch.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f49951cfa5be89540a4848c28fbb30f6 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/Levels/QuarryLevelSwitch.prefab b/Assets/Prefabs/Levels/QuarryLevelSwitch.prefab new file mode 100644 index 00000000..9bc62513 --- /dev/null +++ b/Assets/Prefabs/Levels/QuarryLevelSwitch.prefab @@ -0,0 +1,123 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &3826256398280861369 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 841695541655102207, guid: 93ab59741ddc4e045a61cd8e05b65578, type: 3} + propertyPath: m_SpriteTilingProperty.pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 841695541655102207, guid: 93ab59741ddc4e045a61cd8e05b65578, type: 3} + propertyPath: m_SpriteTilingProperty.pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 841695541655102207, guid: 93ab59741ddc4e045a61cd8e05b65578, type: 3} + propertyPath: m_SpriteTilingProperty.border.w + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 841695541655102207, guid: 93ab59741ddc4e045a61cd8e05b65578, type: 3} + propertyPath: m_SpriteTilingProperty.border.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 841695541655102207, guid: 93ab59741ddc4e045a61cd8e05b65578, type: 3} + propertyPath: m_SpriteTilingProperty.border.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 841695541655102207, guid: 93ab59741ddc4e045a61cd8e05b65578, type: 3} + propertyPath: m_SpriteTilingProperty.border.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 841695541655102207, guid: 93ab59741ddc4e045a61cd8e05b65578, type: 3} + propertyPath: m_SpriteTilingProperty.newSize.x + value: 0.16 + objectReference: {fileID: 0} + - target: {fileID: 841695541655102207, guid: 93ab59741ddc4e045a61cd8e05b65578, type: 3} + propertyPath: m_SpriteTilingProperty.newSize.y + value: 0.16 + objectReference: {fileID: 0} + - target: {fileID: 841695541655102207, guid: 93ab59741ddc4e045a61cd8e05b65578, type: 3} + propertyPath: m_SpriteTilingProperty.oldSize.x + value: 0.48 + objectReference: {fileID: 0} + - target: {fileID: 841695541655102207, guid: 93ab59741ddc4e045a61cd8e05b65578, type: 3} + propertyPath: m_SpriteTilingProperty.oldSize.y + value: 0.48 + objectReference: {fileID: 0} + - target: {fileID: 841695541655102207, guid: 93ab59741ddc4e045a61cd8e05b65578, type: 3} + propertyPath: m_SpriteTilingProperty.adaptiveTilingThreshold + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 1397300447834037203, guid: 93ab59741ddc4e045a61cd8e05b65578, type: 3} + propertyPath: switchData + value: + objectReference: {fileID: 11400000, guid: fc5550b1c1e747b459a4e0c1474f0e2a, type: 2} + - target: {fileID: 1498439134679474750, guid: 93ab59741ddc4e045a61cd8e05b65578, type: 3} + propertyPath: m_Name + value: Quarry + objectReference: {fileID: 0} + - target: {fileID: 4428217320659622763, guid: 93ab59741ddc4e045a61cd8e05b65578, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4428217320659622763, guid: 93ab59741ddc4e045a61cd8e05b65578, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4428217320659622763, guid: 93ab59741ddc4e045a61cd8e05b65578, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4428217320659622763, guid: 93ab59741ddc4e045a61cd8e05b65578, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4428217320659622763, guid: 93ab59741ddc4e045a61cd8e05b65578, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4428217320659622763, guid: 93ab59741ddc4e045a61cd8e05b65578, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4428217320659622763, guid: 93ab59741ddc4e045a61cd8e05b65578, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4428217320659622763, guid: 93ab59741ddc4e045a61cd8e05b65578, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4428217320659622763, guid: 93ab59741ddc4e045a61cd8e05b65578, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4428217320659622763, guid: 93ab59741ddc4e045a61cd8e05b65578, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5374700348512867011, guid: 93ab59741ddc4e045a61cd8e05b65578, type: 3} + propertyPath: m_Size.x + value: 0.16 + objectReference: {fileID: 0} + - target: {fileID: 5374700348512867011, guid: 93ab59741ddc4e045a61cd8e05b65578, type: 3} + propertyPath: m_Size.y + value: 0.16 + objectReference: {fileID: 0} + - target: {fileID: 5374700348512867011, guid: 93ab59741ddc4e045a61cd8e05b65578, type: 3} + propertyPath: m_Sprite + value: + objectReference: {fileID: 8539217831253106567, guid: 69e3e7adfbf712247a6a498c83e9a4f7, type: 3} + - target: {fileID: 5374700348512867011, guid: 93ab59741ddc4e045a61cd8e05b65578, type: 3} + propertyPath: m_WasSpriteAssigned + value: 1 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 93ab59741ddc4e045a61cd8e05b65578, type: 3} diff --git a/Assets/Prefabs/Levels/QuarryLevelSwitch.prefab.meta b/Assets/Prefabs/Levels/QuarryLevelSwitch.prefab.meta new file mode 100644 index 00000000..429902d4 --- /dev/null +++ b/Assets/Prefabs/Levels/QuarryLevelSwitch.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 539b408cd1191614abdcd99506f1157d +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/AppleHillsOverwold.unity b/Assets/Scenes/AppleHillsOverworld.unity similarity index 99% rename from Assets/Scenes/AppleHillsOverwold.unity rename to Assets/Scenes/AppleHillsOverworld.unity index 9348120e..f02b283f 100644 --- a/Assets/Scenes/AppleHillsOverwold.unity +++ b/Assets/Scenes/AppleHillsOverworld.unity @@ -214,6 +214,111 @@ MonoBehaviour: RotationDamping: {x: 1, y: 1, z: 1} QuaternionDamping: 1 FollowOffset: {x: 0, y: 0, z: -10} +--- !u!1001 &249343019 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 607326083758341586, guid: 539b408cd1191614abdcd99506f1157d, type: 3} + propertyPath: m_LocalPosition.x + value: 3.467737 + objectReference: {fileID: 0} + - target: {fileID: 607326083758341586, guid: 539b408cd1191614abdcd99506f1157d, type: 3} + propertyPath: m_LocalPosition.y + value: -0.51303357 + objectReference: {fileID: 0} + - target: {fileID: 607326083758341586, guid: 539b408cd1191614abdcd99506f1157d, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 607326083758341586, guid: 539b408cd1191614abdcd99506f1157d, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 607326083758341586, guid: 539b408cd1191614abdcd99506f1157d, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 607326083758341586, guid: 539b408cd1191614abdcd99506f1157d, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 607326083758341586, guid: 539b408cd1191614abdcd99506f1157d, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 607326083758341586, guid: 539b408cd1191614abdcd99506f1157d, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 607326083758341586, guid: 539b408cd1191614abdcd99506f1157d, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 607326083758341586, guid: 539b408cd1191614abdcd99506f1157d, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2437029726364468359, guid: 539b408cd1191614abdcd99506f1157d, type: 3} + propertyPath: m_Name + value: Quarry + objectReference: {fileID: 0} + - target: {fileID: 9191656170436146298, guid: 539b408cd1191614abdcd99506f1157d, type: 3} + propertyPath: m_Sprite + value: + objectReference: {fileID: 8539217831253106567, guid: 69e3e7adfbf712247a6a498c83e9a4f7, type: 3} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 539b408cd1191614abdcd99506f1157d, type: 3} +--- !u!1 &535638823 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 535638824} + - component: {fileID: 535638825} + m_Layer: 0 + m_Name: SceneManager + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &535638824 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 535638823} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.25458, y: 2.22049, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &535638825 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 535638823} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 360f320f4d7a48e38f5fd7cdfa28144a, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!1 &954512633 GameObject: m_ObjectHideFlags: 0 @@ -283,7 +388,7 @@ Transform: m_GameObject: {fileID: 954512633} serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalPosition: {x: -12.32, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] @@ -22426,6 +22531,10 @@ PrefabInstance: serializedVersion: 3 m_TransformParent: {fileID: 0} m_Modifications: + - target: {fileID: 1029242719786036324, guid: 301b4e0735896334f8f6fb9a68a7e419, type: 3} + propertyPath: m_Enabled + value: 0 + objectReference: {fileID: 0} - target: {fileID: 3823830588451517910, guid: 301b4e0735896334f8f6fb9a68a7e419, type: 3} propertyPath: m_LocalPosition.x value: 0 @@ -22487,3 +22596,5 @@ SceneRoots: - {fileID: 1335103842} - {fileID: 1067158016} - {fileID: 100481744} + - {fileID: 249343019} + - {fileID: 535638824} diff --git a/Assets/Scenes/AppleHillsOverwold.unity.meta b/Assets/Scenes/AppleHillsOverworld.unity.meta similarity index 100% rename from Assets/Scenes/AppleHillsOverwold.unity.meta rename to Assets/Scenes/AppleHillsOverworld.unity.meta diff --git a/Assets/Scenes/Levels/Quarry.unity b/Assets/Scenes/Levels/Quarry.unity index 6cf735b3..29e45c97 100644 --- a/Assets/Scenes/Levels/Quarry.unity +++ b/Assets/Scenes/Levels/Quarry.unity @@ -12321,6 +12321,133 @@ Tilemap: e31: 0 e32: 0 e33: 1 +--- !u!1001 &264885659 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1029242719786036324, guid: 301b4e0735896334f8f6fb9a68a7e419, type: 3} + propertyPath: m_Enabled + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3823830588451517910, guid: 301b4e0735896334f8f6fb9a68a7e419, type: 3} + propertyPath: m_LocalScale.z + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 3823830588451517910, guid: 301b4e0735896334f8f6fb9a68a7e419, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3823830588451517910, guid: 301b4e0735896334f8f6fb9a68a7e419, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3823830588451517910, guid: 301b4e0735896334f8f6fb9a68a7e419, type: 3} + propertyPath: m_LocalPosition.z + value: -1 + objectReference: {fileID: 0} + - target: {fileID: 3823830588451517910, guid: 301b4e0735896334f8f6fb9a68a7e419, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3823830588451517910, guid: 301b4e0735896334f8f6fb9a68a7e419, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3823830588451517910, guid: 301b4e0735896334f8f6fb9a68a7e419, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3823830588451517910, guid: 301b4e0735896334f8f6fb9a68a7e419, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3823830588451517910, guid: 301b4e0735896334f8f6fb9a68a7e419, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3823830588451517910, guid: 301b4e0735896334f8f6fb9a68a7e419, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3823830588451517910, guid: 301b4e0735896334f8f6fb9a68a7e419, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4157358163210553531, guid: 301b4e0735896334f8f6fb9a68a7e419, type: 3} + propertyPath: m_Name + value: Player + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 301b4e0735896334f8f6fb9a68a7e419, type: 3} +--- !u!4 &264885660 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 3823830588451517910, guid: 301b4e0735896334f8f6fb9a68a7e419, type: 3} + m_PrefabInstance: {fileID: 264885659} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &312860098 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 6417272568726868570, guid: f49951cfa5be89540a4848c28fbb30f6, type: 3} + propertyPath: m_Name + value: AppleHillsOverworld + objectReference: {fileID: 0} + - target: {fileID: 8120286049716529935, guid: f49951cfa5be89540a4848c28fbb30f6, type: 3} + propertyPath: m_LocalPosition.x + value: -5.6985006 + objectReference: {fileID: 0} + - target: {fileID: 8120286049716529935, guid: f49951cfa5be89540a4848c28fbb30f6, type: 3} + propertyPath: m_LocalPosition.y + value: 0.6245073 + objectReference: {fileID: 0} + - target: {fileID: 8120286049716529935, guid: f49951cfa5be89540a4848c28fbb30f6, type: 3} + propertyPath: m_LocalPosition.z + value: -1 + objectReference: {fileID: 0} + - target: {fileID: 8120286049716529935, guid: f49951cfa5be89540a4848c28fbb30f6, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8120286049716529935, guid: f49951cfa5be89540a4848c28fbb30f6, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8120286049716529935, guid: f49951cfa5be89540a4848c28fbb30f6, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8120286049716529935, guid: f49951cfa5be89540a4848c28fbb30f6, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8120286049716529935, guid: f49951cfa5be89540a4848c28fbb30f6, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8120286049716529935, guid: f49951cfa5be89540a4848c28fbb30f6, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8120286049716529935, guid: f49951cfa5be89540a4848c28fbb30f6, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: f49951cfa5be89540a4848c28fbb30f6, type: 3} --- !u!1 &1045750399 GameObject: m_ObjectHideFlags: 0 @@ -12453,6 +12580,101 @@ Transform: - {fileID: 219531023} m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1137411209 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1137411211} + - component: {fileID: 1137411210} + - component: {fileID: 1137411212} + m_Layer: 0 + m_Name: CinemachineCamera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1137411210 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1137411209} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f9dfa5b682dcd46bda6128250e975f58, type: 3} + m_Name: + m_EditorClassIdentifier: + Priority: + Enabled: 0 + m_Value: 0 + OutputChannel: 1 + StandbyUpdate: 2 + m_StreamingVersion: 20241001 + m_LegacyPriority: 0 + Target: + TrackingTarget: {fileID: 264885660} + LookAtTarget: {fileID: 0} + CustomLookAtTarget: 0 + Lens: + FieldOfView: 60 + OrthographicSize: 18.154158 + NearClipPlane: 0.3 + FarClipPlane: 1000 + Dutch: 0 + ModeOverride: 0 + PhysicalProperties: + GateFit: 2 + SensorSize: {x: 21.946, y: 16.002} + LensShift: {x: 0, y: 0} + FocusDistance: 10 + Iso: 200 + ShutterSpeed: 0.005 + Aperture: 16 + BladeCount: 5 + Curvature: {x: 2, y: 11} + BarrelClipping: 0.25 + Anamorphism: 0 + BlendHint: 0 +--- !u!4 &1137411211 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1137411209} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -11} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1137411212 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1137411209} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b617507da6d07e749b7efdb34e1173e1, type: 3} + m_Name: + m_EditorClassIdentifier: + TrackerSettings: + BindingMode: 4 + PositionDamping: {x: 1, y: 1, z: 1} + AngularDampingMode: 0 + RotationDamping: {x: 1, y: 1, z: 1} + QuaternionDamping: 1 + FollowOffset: {x: 0, y: 0, z: -10} --- !u!1 &1653475490 GameObject: m_ObjectHideFlags: 0 @@ -12464,6 +12686,7 @@ GameObject: - component: {fileID: 1653475493} - component: {fileID: 1653475492} - component: {fileID: 1653475491} + - component: {fileID: 1653475494} m_Layer: 0 m_Name: Main Camera m_TagString: MainCamera @@ -12514,7 +12737,7 @@ Camera: far clip plane: 1000 field of view: 60 orthographic: 1 - orthographic size: 5 + orthographic size: 18.154158 m_Depth: -1 m_CullingMask: serializedVersion: 2 @@ -12539,12 +12762,44 @@ Transform: m_GameObject: {fileID: 1653475490} serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: -10} + m_LocalPosition: {x: 0, y: 0, z: -11} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1653475494 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1653475490} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 72ece51f2901e7445ab60da3685d6b5f, type: 3} + m_Name: + m_EditorClassIdentifier: + ShowDebugText: 0 + ShowCameraFrustum: 1 + IgnoreTimeScale: 0 + WorldUpOverride: {fileID: 0} + ChannelMask: -1 + UpdateMethod: 2 + BlendUpdateMethod: 1 + LensModeOverride: + Enabled: 0 + DefaultMode: 2 + DefaultBlend: + Style: 1 + Time: 2 + CustomCurve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + CustomBlends: {fileID: 0} --- !u!1001 &3402159610283009489 PrefabInstance: m_ObjectHideFlags: 0 @@ -12611,3 +12866,6 @@ SceneRoots: - {fileID: 1073425384} - {fileID: 1045750401} - {fileID: 3402159610283009489} + - {fileID: 264885659} + - {fileID: 1137411211} + - {fileID: 312860098} diff --git a/Assets/Scripts/LevelSwitch.cs b/Assets/Scripts/LevelSwitch.cs index 7e7246c2..f1b0d287 100644 --- a/Assets/Scripts/LevelSwitch.cs +++ b/Assets/Scripts/LevelSwitch.cs @@ -1,4 +1,5 @@ -using UnityEngine; +using System; +using UnityEngine; public class LevelSwitch : MonoBehaviour { @@ -8,6 +9,9 @@ public class LevelSwitch : MonoBehaviour void Awake() { + if (iconRenderer == null) + iconRenderer = GetComponent(); + interactable = GetComponent(); if (interactable != null) { @@ -27,6 +31,8 @@ public class LevelSwitch : MonoBehaviour #if UNITY_EDITOR void OnValidate() { + if (iconRenderer == null) + iconRenderer = GetComponent(); ApplySwitchData(); } #endif @@ -42,9 +48,15 @@ public class LevelSwitch : MonoBehaviour } } - private void OnInteracted() + private async void OnInteracted() { Debug.Log($"LevelSwitch.OnInteracted: Switching to level {switchData?.targetLevelSceneName}"); - // TODO: Add scene loading logic here, e.g. UnityEngine.SceneManagement.SceneManager.LoadScene(switchData.targetLevelSceneName); + if (switchData != null && !string.IsNullOrEmpty(switchData.targetLevelSceneName)) + { + // Optionally: show loading UI here + var progress = new Progress(p => Debug.Log($"Loading progress: {p * 100:F0}%")); + await SceneManagerService.Instance.SwitchSceneAsync(switchData.targetLevelSceneName, progress); + // Optionally: hide loading UI here + } } } diff --git a/Assets/Scripts/SceneManagerService.cs b/Assets/Scripts/SceneManagerService.cs new file mode 100644 index 00000000..c428bd5e --- /dev/null +++ b/Assets/Scripts/SceneManagerService.cs @@ -0,0 +1,183 @@ +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using UnityEngine; +using UnityEngine.SceneManagement; + +public class SceneManagerService : MonoBehaviour +{ + public static SceneManagerService Instance { get; private set; } + + // Events for scene lifecycle + public event Action SceneLoadStarted; + public event Action SceneLoadProgress; + public event Action SceneLoadCompleted; + public event Action SceneUnloadStarted; + public event Action SceneUnloadProgress; + public event Action SceneUnloadCompleted; + + private readonly Dictionary _activeLoads = new(); + private readonly Dictionary _activeUnloads = new(); + + void Awake() + { + if (Instance != null && Instance != this) + { + Destroy(gameObject); + return; + } + Instance = this; + DontDestroyOnLoad(gameObject); + } + + // Load a single scene asynchronously (additive) + public async Task LoadSceneAsync(string sceneName, IProgress progress = null) + { + SceneLoadStarted?.Invoke(sceneName); + var op = SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Additive); + _activeLoads[sceneName] = op; + while (!op.isDone) + { + progress?.Report(op.progress); + SceneLoadProgress?.Invoke(sceneName, op.progress); + await Task.Yield(); + } + _activeLoads.Remove(sceneName); + SceneLoadCompleted?.Invoke(sceneName); + } + + // Unload a single scene asynchronously + public async Task UnloadSceneAsync(string sceneName, IProgress progress = null) + { + var scene = SceneManager.GetSceneByName(sceneName); + if (!scene.isLoaded) + { + Debug.LogWarning($"SceneManagerService: Attempted to unload scene '{sceneName}', but it is not loaded."); + return; + } + SceneUnloadStarted?.Invoke(sceneName); + var op = SceneManager.UnloadSceneAsync(sceneName); + _activeUnloads[sceneName] = op; + while (!op.isDone) + { + progress?.Report(op.progress); + SceneUnloadProgress?.Invoke(sceneName, op.progress); + await Task.Yield(); + } + _activeUnloads.Remove(sceneName); + SceneUnloadCompleted?.Invoke(sceneName); + } + + // Load multiple scenes asynchronously + public async Task LoadScenesAsync(IEnumerable sceneNames, IProgress progress = null) + { + int total = 0; + int done = 0; + var ops = new List(); + foreach (var name in sceneNames) + { + total++; + var op = SceneManager.LoadSceneAsync(name, LoadSceneMode.Additive); + _activeLoads[name] = op; + ops.Add(op); + SceneLoadStarted?.Invoke(name); + } + while (done < total) + { + done = 0; + float aggregate = 0f; + foreach (var op in ops) + { + aggregate += op.progress; + if (op.isDone) done++; + } + float avg = aggregate / total; + progress?.Report(avg); + foreach (var name in sceneNames) + SceneLoadProgress?.Invoke(name, avg); + await Task.Yield(); + } + foreach (var name in sceneNames) + { + _activeLoads.Remove(name); + SceneLoadCompleted?.Invoke(name); + } + } + + // Unload multiple scenes asynchronously + public async Task UnloadScenesAsync(IEnumerable sceneNames, IProgress progress = null) + { + int total = 0; + int done = 0; + var ops = new List(); + foreach (var name in sceneNames) + { + total++; + var op = SceneManager.UnloadSceneAsync(name); + _activeUnloads[name] = op; + ops.Add(op); + SceneUnloadStarted?.Invoke(name); + } + while (done < total) + { + done = 0; + float aggregate = 0f; + foreach (var op in ops) + { + aggregate += op.progress; + if (op.isDone) done++; + } + float avg = aggregate / total; + progress?.Report(avg); + foreach (var name in sceneNames) + SceneUnloadProgress?.Invoke(name, avg); + await Task.Yield(); + } + foreach (var name in sceneNames) + { + _activeUnloads.Remove(name); + SceneUnloadCompleted?.Invoke(name); + } + } + + // Optionally: expose current progress for all active operations + public float GetAggregateLoadProgress() + { + if (_activeLoads.Count == 0) return 1f; + float sum = 0f; + foreach (var op in _activeLoads.Values) sum += op.progress; + return sum / _activeLoads.Count; + } + public float GetAggregateUnloadProgress() + { + if (_activeUnloads.Count == 0) return 1f; + float sum = 0f; + foreach (var op in _activeUnloads.Values) sum += op.progress; + return sum / _activeUnloads.Count; + } + + // Tracks the currently loaded gameplay scene (not persistent/bootstrapper) + public string CurrentGameplayScene { get; private set; } = "AppleHillsOverworld"; + + // Switches from current gameplay scene to a new one + public async Task SwitchSceneAsync(string newSceneName, IProgress progress = null) + { + // Load new scene + await LoadSceneAsync(newSceneName, progress); + // Unload previous scene (if not same) + if (!string.IsNullOrEmpty(CurrentGameplayScene) && CurrentGameplayScene != newSceneName) + { + var prevScene = SceneManager.GetSceneByName(CurrentGameplayScene); + if (prevScene.isLoaded) + { + await UnloadSceneAsync(CurrentGameplayScene); + } + else + { + Debug.LogWarning($"SceneManagerService: Previous scene '{CurrentGameplayScene}' is not loaded, skipping unload."); + } + } + // Update tracker + CurrentGameplayScene = newSceneName; + } +} diff --git a/Assets/Scripts/SceneManagerService.cs.meta b/Assets/Scripts/SceneManagerService.cs.meta new file mode 100644 index 00000000..0a61c9a8 --- /dev/null +++ b/Assets/Scripts/SceneManagerService.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 360f320f4d7a48e38f5fd7cdfa28144a +timeCreated: 1756750090 \ No newline at end of file diff --git a/ProjectSettings/EditorBuildSettings.asset b/ProjectSettings/EditorBuildSettings.asset index d712d2de..17d06444 100644 --- a/ProjectSettings/EditorBuildSettings.asset +++ b/ProjectSettings/EditorBuildSettings.asset @@ -5,9 +5,15 @@ EditorBuildSettings: m_ObjectHideFlags: 0 serializedVersion: 2 m_Scenes: - - enabled: 1 + - enabled: 0 path: Assets/Scenes/SampleScene.unity guid: 8c9cfa26abfee488c85f1582747f6a02 + - enabled: 1 + path: Assets/Scenes/AppleHillsOverworld.unity + guid: 350ef8129fba8174bb68b98a0f75e2f7 + - enabled: 1 + path: Assets/Scenes/Levels/Quarry.unity + guid: 7826cd123499e704bbed784f37ffe300 m_configObjects: com.unity.input.settings.actions: {fileID: -944628639613478452, guid: 2bcd2660ca9b64942af0de543d8d7100, type: 3} m_UseUCBPForAssetBundles: 0