diff --git a/Assets/Prefabs/Managers/SceneManager.prefab b/Assets/Prefabs/Managers/SceneManager.prefab index d28c028c..ea036003 100644 --- a/Assets/Prefabs/Managers/SceneManager.prefab +++ b/Assets/Prefabs/Managers/SceneManager.prefab @@ -29,8 +29,7 @@ Transform: m_LocalPosition: {x: -3.4031, y: -1.84829, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 7090108953567368886} + m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &5327225408302228741 @@ -45,125 +44,3 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 360f320f4d7a48e38f5fd7cdfa28144a, type: 3} m_Name: m_EditorClassIdentifier: - loadingScreen: {fileID: 3391437592962192360} ---- !u!1001 &6967569849783118800 -PrefabInstance: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - serializedVersion: 3 - m_TransformParent: {fileID: 3506046067200272545} - m_Modifications: - - target: {fileID: 204042265062571366, guid: 19fad826fce26d34ba304620216a7f47, type: 3} - propertyPath: m_Pivot.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 204042265062571366, guid: 19fad826fce26d34ba304620216a7f47, type: 3} - propertyPath: m_Pivot.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 204042265062571366, guid: 19fad826fce26d34ba304620216a7f47, type: 3} - propertyPath: m_AnchorMax.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 204042265062571366, guid: 19fad826fce26d34ba304620216a7f47, type: 3} - propertyPath: m_AnchorMax.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 204042265062571366, guid: 19fad826fce26d34ba304620216a7f47, type: 3} - propertyPath: m_AnchorMin.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 204042265062571366, guid: 19fad826fce26d34ba304620216a7f47, type: 3} - propertyPath: m_AnchorMin.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 204042265062571366, guid: 19fad826fce26d34ba304620216a7f47, type: 3} - propertyPath: m_SizeDelta.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 204042265062571366, guid: 19fad826fce26d34ba304620216a7f47, type: 3} - propertyPath: m_SizeDelta.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 204042265062571366, guid: 19fad826fce26d34ba304620216a7f47, type: 3} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 204042265062571366, guid: 19fad826fce26d34ba304620216a7f47, type: 3} - propertyPath: m_LocalPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 204042265062571366, guid: 19fad826fce26d34ba304620216a7f47, type: 3} - propertyPath: m_LocalPosition.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 204042265062571366, guid: 19fad826fce26d34ba304620216a7f47, type: 3} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 204042265062571366, guid: 19fad826fce26d34ba304620216a7f47, type: 3} - propertyPath: m_LocalRotation.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 204042265062571366, guid: 19fad826fce26d34ba304620216a7f47, type: 3} - propertyPath: m_LocalRotation.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 204042265062571366, guid: 19fad826fce26d34ba304620216a7f47, type: 3} - propertyPath: m_LocalRotation.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 204042265062571366, guid: 19fad826fce26d34ba304620216a7f47, type: 3} - propertyPath: m_AnchoredPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 204042265062571366, guid: 19fad826fce26d34ba304620216a7f47, type: 3} - propertyPath: m_AnchoredPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 204042265062571366, guid: 19fad826fce26d34ba304620216a7f47, type: 3} - propertyPath: m_LocalEulerAnglesHint.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 204042265062571366, guid: 19fad826fce26d34ba304620216a7f47, type: 3} - propertyPath: m_LocalEulerAnglesHint.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 204042265062571366, guid: 19fad826fce26d34ba304620216a7f47, type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 4869161796575291839, guid: 19fad826fce26d34ba304620216a7f47, type: 3} - propertyPath: m_Name - value: LoadingScreen - objectReference: {fileID: 0} - - target: {fileID: 4869161796575291839, guid: 19fad826fce26d34ba304620216a7f47, type: 3} - propertyPath: m_IsActive - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 5737877680156686392, guid: 19fad826fce26d34ba304620216a7f47, type: 3} - propertyPath: minimumDisplayTime - value: 1 - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_RemovedGameObjects: [] - m_AddedGameObjects: [] - m_AddedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: 19fad826fce26d34ba304620216a7f47, type: 3} ---- !u!114 &3391437592962192360 stripped -MonoBehaviour: - m_CorrespondingSourceObject: {fileID: 5737877680156686392, guid: 19fad826fce26d34ba304620216a7f47, type: 3} - m_PrefabInstance: {fileID: 6967569849783118800} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1494b10574e74acd880f9101b4248239, type: 3} - m_Name: - m_EditorClassIdentifier: AppleHillsScripts::UI.LoadingScreenController ---- !u!224 &7090108953567368886 stripped -RectTransform: - m_CorrespondingSourceObject: {fileID: 204042265062571366, guid: 19fad826fce26d34ba304620216a7f47, type: 3} - m_PrefabInstance: {fileID: 6967569849783118800} - m_PrefabAsset: {fileID: 0} diff --git a/Assets/Scenes/StartingScene.unity b/Assets/Scenes/StartingScene.unity new file mode 100644 index 00000000..bae07f91 --- /dev/null +++ b/Assets/Scenes/StartingScene.unity @@ -0,0 +1,409 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 10 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 3 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 13 + m_BakeOnSceneLoad: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 0 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 1 + m_PVRFilteringGaussRadiusAO: 1 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 20201, guid: 0000000000000000f000000000000000, type: 0} + m_LightingSettings: {fileID: 0} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &400217123 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 400217126} + - component: {fileID: 400217125} + - component: {fileID: 400217124} + - component: {fileID: 400217127} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &400217124 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 400217123} + m_Enabled: 1 +--- !u!20 &400217125 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 400217123} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 1 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &400217126 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 400217123} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -10} + 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 &400217127 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 400217123} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Runtime::UnityEngine.Rendering.Universal.UniversalAdditionalCameraData + m_RenderShadows: 1 + m_RequiresDepthTextureOption: 2 + m_RequiresOpaqueTextureOption: 2 + m_CameraType: 0 + m_Cameras: [] + m_RendererIndex: -1 + m_VolumeLayerMask: + serializedVersion: 2 + m_Bits: 1 + m_VolumeTrigger: {fileID: 0} + m_VolumeFrameworkUpdateModeOption: 2 + m_RenderPostProcessing: 0 + m_Antialiasing: 0 + m_AntialiasingQuality: 2 + m_StopNaN: 0 + m_Dithering: 0 + m_ClearDepth: 1 + m_AllowXRRendering: 1 + m_AllowHDROutput: 1 + m_UseScreenCoordOverride: 0 + m_ScreenSizeOverride: {x: 0, y: 0, z: 0, w: 0} + m_ScreenCoordScaleBias: {x: 0, y: 0, z: 0, w: 0} + m_RequiresDepthTexture: 0 + m_RequiresColorTexture: 0 + m_TaaSettings: + m_Quality: 3 + m_FrameInfluence: 0.1 + m_JitterScale: 1 + m_MipBias: 0 + m_VarianceClampScale: 0.9 + m_ContrastAdaptiveSharpening: 0 + m_Version: 2 +--- !u!1001 &1355357999 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 204042265062571366, guid: 19fad826fce26d34ba304620216a7f47, type: 3} + propertyPath: m_Pivot.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 204042265062571366, guid: 19fad826fce26d34ba304620216a7f47, type: 3} + propertyPath: m_Pivot.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 204042265062571366, guid: 19fad826fce26d34ba304620216a7f47, type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 204042265062571366, guid: 19fad826fce26d34ba304620216a7f47, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 204042265062571366, guid: 19fad826fce26d34ba304620216a7f47, type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 204042265062571366, guid: 19fad826fce26d34ba304620216a7f47, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 204042265062571366, guid: 19fad826fce26d34ba304620216a7f47, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 204042265062571366, guid: 19fad826fce26d34ba304620216a7f47, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 204042265062571366, guid: 19fad826fce26d34ba304620216a7f47, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 204042265062571366, guid: 19fad826fce26d34ba304620216a7f47, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 204042265062571366, guid: 19fad826fce26d34ba304620216a7f47, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 204042265062571366, guid: 19fad826fce26d34ba304620216a7f47, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 204042265062571366, guid: 19fad826fce26d34ba304620216a7f47, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 204042265062571366, guid: 19fad826fce26d34ba304620216a7f47, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 204042265062571366, guid: 19fad826fce26d34ba304620216a7f47, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 204042265062571366, guid: 19fad826fce26d34ba304620216a7f47, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 204042265062571366, guid: 19fad826fce26d34ba304620216a7f47, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 204042265062571366, guid: 19fad826fce26d34ba304620216a7f47, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 204042265062571366, guid: 19fad826fce26d34ba304620216a7f47, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 204042265062571366, guid: 19fad826fce26d34ba304620216a7f47, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4869161796575291839, guid: 19fad826fce26d34ba304620216a7f47, type: 3} + propertyPath: m_Name + value: LoadingScreen + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 19fad826fce26d34ba304620216a7f47, type: 3} +--- !u!1 &1710655392 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1710655394} + - component: {fileID: 1710655393} + m_Layer: 0 + m_Name: BootSceneController + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1710655393 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1710655392} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fdb797d6fcdc469bb9bfb9ad3c5f51b5, type: 3} + m_Name: + m_EditorClassIdentifier: AppleHillsScripts::Bootstrap.BootSceneController + mainMenuSceneName: MainMenu + minDelayAfterBoot: 0.5 + debugMode: 0 +--- !u!4 &1710655394 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1710655392} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -39.55614, y: 4.31573, 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!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 400217126} + - {fileID: 1355357999} + - {fileID: 1710655394} diff --git a/Assets/Scenes/StartingScene.unity.meta b/Assets/Scenes/StartingScene.unity.meta new file mode 100644 index 00000000..7ba42526 --- /dev/null +++ b/Assets/Scenes/StartingScene.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: cf01e2d0135b06c4486d00ef393d0274 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Bootstrap/BootSceneController.cs b/Assets/Scripts/Bootstrap/BootSceneController.cs new file mode 100644 index 00000000..3c9a2b99 --- /dev/null +++ b/Assets/Scripts/Bootstrap/BootSceneController.cs @@ -0,0 +1,127 @@ +using System; +using UnityEngine; +using UI; +using Core; +using UnityEngine.SceneManagement; + +namespace Bootstrap +{ + /// + /// Controller for the boot scene that coordinates bootstrap initialization with loading screen + /// + public class BootSceneController : MonoBehaviour + { + [SerializeField] private string mainMenuSceneName = "MainMenu"; + [SerializeField] private float minDelayAfterBoot = 0.5f; // Small delay after boot to ensure smooth transition + [SerializeField] private bool debugMode = false; + + private bool _bootComplete = false; + private bool _hasStartedLoading = false; + + private void Start() + { + Debug.Log("[BootSceneController] Boot scene started"); + + // Ensure the loading screen controller exists + if (LoadingScreenController.Instance == null) + { + Debug.LogError("[BootSceneController] No LoadingScreenController found in the scene!"); + return; + } + + // Show the loading screen immediately + LoadingScreenController.Instance.ShowLoadingScreen( + // Use the CustomBoot progress as the progress provider + progressProvider: () => CustomBoot.CurrentProgress, + // When loading screen is fully hidden, load main menu + onComplete: () => LoadMainMenu() + ); + + // Start the boot process if not already initialized + if (!CustomBoot.Initialised) + { + // Subscribe to the boot completion event + CustomBoot.OnBootCompleted += OnBootCompleted; + CustomBoot.OnBootProgressChanged += OnBootProgressChanged; + + // Start initialization + CustomBoot.PerformInitialisation(); + } + else + { + // If already initialized (can happen in editor testing), proceed immediately + Debug.Log("[BootSceneController] Bootstrap already initialized, proceeding to main menu"); + OnBootCompleted(); + } + + // In debug mode, log additional information + if (debugMode) + { + InvokeRepeating(nameof(LogDebugInfo), 0.1f, 0.5f); + } + } + + private void OnDestroy() + { + // Clean up event subscriptions + CustomBoot.OnBootCompleted -= OnBootCompleted; + CustomBoot.OnBootProgressChanged -= OnBootProgressChanged; + + if (debugMode) + { + CancelInvoke(nameof(LogDebugInfo)); + } + } + + private void OnBootProgressChanged(float progress) + { + if (debugMode) + { + Debug.Log($"[BootSceneController] Boot progress: {progress:P0}"); + } + } + + private void LogDebugInfo() + { + Debug.Log($"[BootSceneController] Debug - Boot Progress: {CustomBoot.CurrentProgress:P0}, Boot Complete: {_bootComplete}, Loading Started: {_hasStartedLoading}"); + } + + private void OnBootCompleted() + { + // Unsubscribe to prevent duplicate calls + CustomBoot.OnBootCompleted -= OnBootCompleted; + + Debug.Log("[BootSceneController] Boot process completed"); + _bootComplete = true; + + // After a small delay, tell the loading screen we're done + // This prevents jerky transitions if boot happens very quickly + Invoke(nameof(CompleteLoadingScreen), minDelayAfterBoot); + } + + private void CompleteLoadingScreen() + { + Debug.Log("[BootSceneController] Hiding loading screen"); + + // Tell loading screen that loading is complete + if (LoadingScreenController.Instance != null) + { + LoadingScreenController.Instance.HideLoadingScreen(); + } + } + + private async void LoadMainMenu() + { + // Prevent multiple scene loads + if (_hasStartedLoading) + return; + + _hasStartedLoading = true; + Debug.Log($"[BootSceneController] Loading main menu scene: {mainMenuSceneName}"); + + // Load the main menu scene + var progress = new Progress(p => Debug.Log($"Loading main menu: {p * 100:F0}%")); + await SceneManagerService.Instance.SwitchSceneAsync(mainMenuSceneName, progress); + } + } +} diff --git a/Assets/Scripts/Bootstrap/BootSceneController.cs.meta b/Assets/Scripts/Bootstrap/BootSceneController.cs.meta new file mode 100644 index 00000000..3ddffcb9 --- /dev/null +++ b/Assets/Scripts/Bootstrap/BootSceneController.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: fdb797d6fcdc469bb9bfb9ad3c5f51b5 +timeCreated: 1760604860 \ No newline at end of file diff --git a/Assets/Scripts/Bootstrap/CustomBoot.cs b/Assets/Scripts/Bootstrap/CustomBoot.cs index 54b5eeb4..a4ea917b 100644 --- a/Assets/Scripts/Bootstrap/CustomBoot.cs +++ b/Assets/Scripts/Bootstrap/CustomBoot.cs @@ -1,4 +1,5 @@ -using System.Threading.Tasks; +using System; +using System.Threading.Tasks; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.ResourceManagement.AsyncOperations; @@ -14,9 +15,24 @@ namespace Bootstrap /// Current initialisation status /// public static bool Initialised { get; private set; } + + /// + /// Event triggered when boot progress changes + /// + public static event Action OnBootProgressChanged; + + /// + /// Event triggered when boot process completes + /// + public static event Action OnBootCompleted; + + /// + /// Current progress of the boot process (0-1) + /// + public static float CurrentProgress { get; private set; } /// - // Called as soon as the game begins + /// Called as soon as the game begins /// [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSplashScreen)] private static void Initialise() @@ -32,6 +48,9 @@ namespace Bootstrap /// public static void PerformInitialisation() { + //Reset progress + CurrentProgress = 0f; + //In editor, perform initialisation synchronously if (Application.isEditor) { @@ -72,6 +91,9 @@ namespace Bootstrap { await LoadCustomBootSettings(); Initialised = true; + CurrentProgress = 1f; + OnBootProgressChanged?.Invoke(1f); + OnBootCompleted?.Invoke(); } /// @@ -81,6 +103,9 @@ namespace Bootstrap { LoadCustomBootSettingsSync(); Initialised = true; + CurrentProgress = 1f; + OnBootProgressChanged?.Invoke(1f); + OnBootCompleted?.Invoke(); } @@ -177,5 +202,16 @@ namespace Bootstrap result.InitialiseSync(); return handle; } + + /// + /// Updates the current progress value and triggers the progress event + /// + /// Progress value between 0-1 + internal static void UpdateProgress(float progress) + { + CurrentProgress = Mathf.Clamp01(progress); + OnBootProgressChanged?.Invoke(CurrentProgress); + Debug.Log($"[CustomBoot] Progress: {CurrentProgress:P0}"); + } } } \ No newline at end of file diff --git a/Assets/Scripts/Bootstrap/CustomBootSettings.cs b/Assets/Scripts/Bootstrap/CustomBootSettings.cs index ffd2293f..03531f86 100644 --- a/Assets/Scripts/Bootstrap/CustomBootSettings.cs +++ b/Assets/Scripts/Bootstrap/CustomBootSettings.cs @@ -31,15 +31,37 @@ namespace Bootstrap RuntimeContainer = new GameObject($"{name}_Container"); DontDestroyOnLoad(RuntimeContainer); Instances = new GameObject[BootPrefabs.Length]; + + // Calculate total prefabs for progress tracking + int totalPrefabs = BootPrefabs.Length; + float progressPerPrefab = totalPrefabs > 0 ? 1f / totalPrefabs : 1f; + float currentProgress = 0f; + for (var i = 0; i < BootPrefabs.Length; i++) { - if (!BootPrefabs[i]) continue; + if (!BootPrefabs[i]) + { + // Report incremental progress even for null prefabs + currentProgress = (i + 1) * progressPerPrefab; + CustomBoot.UpdateProgress(currentProgress); + continue; + } var instance = GameObject.InstantiateAsync(BootPrefabs[i], RuntimeContainer.transform); while (!instance.isDone) + { + // Report partial progress while waiting + float progressInStep = instance.progress * progressPerPrefab; + float overallProgress = i * progressPerPrefab + progressInStep; + CustomBoot.UpdateProgress(overallProgress); await Task.Yield(); + } Instances[i] = instance.Result[0]; + + // Report completion of this step + currentProgress = (i + 1) * progressPerPrefab; + CustomBoot.UpdateProgress(currentProgress); } } @@ -55,12 +77,28 @@ namespace Bootstrap } Instances = new GameObject[BootPrefabs.Length]; + + // Calculate total prefabs for progress tracking + int totalPrefabs = BootPrefabs.Length; + float progressPerPrefab = totalPrefabs > 0 ? 1f / totalPrefabs : 1f; + float currentProgress = 0f; + for (var i = 0; i < BootPrefabs.Length; i++) { - if (!BootPrefabs[i]) continue; + if (!BootPrefabs[i]) + { + // Report incremental progress even for null prefabs + currentProgress = (i + 1) * progressPerPrefab; + CustomBoot.UpdateProgress(currentProgress); + continue; + } var instance = GameObject.Instantiate(BootPrefabs[i], RuntimeContainer.transform); Instances[i] = instance; + + // Report completion of this step + currentProgress = (i + 1) * progressPerPrefab; + CustomBoot.UpdateProgress(currentProgress); } } diff --git a/Assets/Scripts/UI/LoadingScreenController.cs b/Assets/Scripts/UI/LoadingScreenController.cs index e902b7f7..085fdead 100644 --- a/Assets/Scripts/UI/LoadingScreenController.cs +++ b/Assets/Scripts/UI/LoadingScreenController.cs @@ -68,6 +68,7 @@ namespace UI private void Awake() { _instance = this; + DontDestroyOnLoad(gameObject); if (loadingScreenContainer == null) loadingScreenContainer = gameObject; diff --git a/Assets/Scripts/UI/PauseMenu.cs b/Assets/Scripts/UI/PauseMenu.cs index 54933f19..6ff2ec21 100644 --- a/Assets/Scripts/UI/PauseMenu.cs +++ b/Assets/Scripts/UI/PauseMenu.cs @@ -81,9 +81,11 @@ namespace UI return; bool isMainMenu = levelName.ToLower().Contains("mainmenu"); - gameObject.SetActive(!isMainMenu); + bool isStartingLevel = levelName.ToLower().Contains("startingscene"); - if(!isMainMenu) + gameObject.SetActive(!(isMainMenu || isStartingLevel)); + + if(!isMainMenu && !isStartingLevel) HidePauseMenu(false); // Ensure menu is hidden when switching to a game level Logging.Debug($"[PauseMenu] Setting pause menu active: {!isMainMenu} for scene: {levelName}");