diff --git a/Assets/Prefabs/Platform.prefab b/Assets/Prefabs/Platform.prefab index 6249559..81b1115 100644 --- a/Assets/Prefabs/Platform.prefab +++ b/Assets/Prefabs/Platform.prefab @@ -1,281 +1,5 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: ---- !u!1 &1166831543635676 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4518572068955746} - - component: {fileID: 212503073192347908} - - component: {fileID: 61881790296472918} - m_Layer: 0 - m_Name: Obstacle Right - m_TagString: Dead - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4518572068955746 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1166831543635676} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.44, y: 1, z: 0} - m_LocalScale: {x: 0.22222222, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4447057583457146} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!212 &212503073192347908 -SpriteRenderer: - serializedVersion: 2 - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1166831543635676} - 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_ForceMeshLod: -1 - m_MeshLodSelectionBias: 0 - m_RenderingLayerMask: 4294967295 - 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: 0 - m_SelectedEditorRenderState: 0 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_GlobalIlluminationMeshLod: 0 - m_SortingLayerID: -294611229 - m_SortingLayer: 2 - m_SortingOrder: 0 - m_MaskInteraction: 0 - m_Sprite: {fileID: 21300000, guid: c786e87f13804e37be5de982aee4f675, type: 3} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_FlipX: 0 - m_FlipY: 0 - m_DrawMode: 0 - m_Size: {x: 1.4, y: 1.4} - m_AdaptiveModeThreshold: 0.5 - m_SpriteTileMode: 0 - m_WasSpriteAssigned: 1 - m_SpriteSortPoint: 0 ---- !u!61 &61881790296472918 -BoxCollider2D: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1166831543635676} - 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: 1 - 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.5, y: 0.5} - oldSize: {x: 1.6, y: 1} - newSize: {x: 1.4, y: 1.4} - adaptiveTilingThreshold: 0.5 - drawMode: 0 - adaptiveTiling: 0 - m_AutoTiling: 0 - m_Size: {x: 1.2, y: 1} - m_EdgeRadius: 0 ---- !u!1 &1297539188427694 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4605692002121302} - - component: {fileID: 212000956051026164} - - component: {fileID: 61237356497549858} - m_Layer: 0 - m_Name: Obstacle Left - m_TagString: Dead - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4605692002121302 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1297539188427694} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.44, y: 1, z: 0} - m_LocalScale: {x: 0.22222222, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4447057583457146} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!212 &212000956051026164 -SpriteRenderer: - serializedVersion: 2 - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1297539188427694} - 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_ForceMeshLod: -1 - m_MeshLodSelectionBias: 0 - m_RenderingLayerMask: 4294967295 - 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: 0 - m_SelectedEditorRenderState: 0 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_GlobalIlluminationMeshLod: 0 - m_SortingLayerID: -294611229 - m_SortingLayer: 2 - m_SortingOrder: 0 - m_MaskInteraction: 0 - m_Sprite: {fileID: 21300000, guid: c786e87f13804e37be5de982aee4f675, type: 3} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_FlipX: 0 - m_FlipY: 0 - m_DrawMode: 0 - m_Size: {x: 1.4, y: 1.4} - m_AdaptiveModeThreshold: 0.5 - m_SpriteTileMode: 0 - m_WasSpriteAssigned: 1 - m_SpriteSortPoint: 0 ---- !u!61 &61237356497549858 -BoxCollider2D: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1297539188427694} - 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: 1 - 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.5, y: 0.5} - oldSize: {x: 1.6, y: 1} - newSize: {x: 1.4, y: 1.4} - adaptiveTilingThreshold: 0.5 - drawMode: 0 - adaptiveTiling: 0 - m_AutoTiling: 0 - m_Size: {x: 1.2, y: 1} - m_EdgeRadius: 0 --- !u!1 &1671242928466520 GameObject: m_ObjectHideFlags: 0 @@ -308,11 +32,7 @@ Transform: m_LocalPosition: {x: 15.2227, y: 0.0055, z: 0} m_LocalScale: {x: 4.778359, y: 1.011, z: 1} m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 4605692002121302} - - {fileID: 4014685509531708} - - {fileID: 4518572068955746} - - {fileID: 4987654321098765} + m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!212 &212850827289184248 @@ -443,577 +163,9 @@ MonoBehaviour: m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 9f975ef653abb48238f62061ebab1c23, type: 3} - m_Name: + m_Name: m_EditorClassIdentifier: Assembly-CSharp::Platform - obstacles: - - {fileID: 1297539188427694} - - {fileID: 1832961231703714} - - {fileID: 1166831543635676} - - {fileID: 1987654321098765} - emptyPatternWeight: 2 mileageSprite: {fileID: 21300000, guid: 8b2f1d0c3e4a5b6f9d7e0123456789ab, type: 3} mileagePatternChance: 50 smallMileageValue: 10 bonusMileageValue: 30 ---- !u!1 &1832961231703714 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4014685509531708} - - component: {fileID: 212599298415523624} - - component: {fileID: 61928244072500108} - m_Layer: 0 - m_Name: Obstacle Mid - m_TagString: Dead - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4014685509531708 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1832961231703714} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 1, z: 0} - m_LocalScale: {x: 0.22222222, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4447057583457146} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!212 &212599298415523624 -SpriteRenderer: - serializedVersion: 2 - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1832961231703714} - 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_ForceMeshLod: -1 - m_MeshLodSelectionBias: 0 - m_RenderingLayerMask: 4294967295 - 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: 0 - m_SelectedEditorRenderState: 0 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_GlobalIlluminationMeshLod: 0 - m_SortingLayerID: -294611229 - m_SortingLayer: 2 - m_SortingOrder: 0 - m_MaskInteraction: 0 - m_Sprite: {fileID: 21300000, guid: c786e87f13804e37be5de982aee4f675, type: 3} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_FlipX: 0 - m_FlipY: 0 - m_DrawMode: 0 - m_Size: {x: 1.4, y: 1.4} - m_AdaptiveModeThreshold: 0.5 - m_SpriteTileMode: 0 - m_WasSpriteAssigned: 1 - m_SpriteSortPoint: 0 ---- !u!61 &61928244072500108 -BoxCollider2D: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1832961231703714} - 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: 1 - 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.5, y: 0.5} - oldSize: {x: 1.6, y: 1} - newSize: {x: 1.4, y: 1.4} - adaptiveTilingThreshold: 0.5 - drawMode: 0 - adaptiveTiling: 0 - m_AutoTiling: 0 - m_Size: {x: 1.2, y: 1} - m_EdgeRadius: 0 ---- !u!1 &1928374650918273 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3876501129384756} - - component: {fileID: 212887766554433221} - - component: {fileID: 61988776655443322} - m_Layer: 0 - m_Name: Obstacle High Left - m_TagString: Dead - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &3876501129384756 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1928374650918273} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -1.35, y: 2.68, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4987654321098765} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!212 &212887766554433221 -SpriteRenderer: - serializedVersion: 2 - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1928374650918273} - 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_ForceMeshLod: -1 - m_MeshLodSelectionBias: 0 - m_RenderingLayerMask: 4294967295 - 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: 0 - m_SelectedEditorRenderState: 0 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_GlobalIlluminationMeshLod: 0 - m_SortingLayerID: -294611229 - m_SortingLayer: 2 - m_SortingOrder: 0 - m_MaskInteraction: 0 - m_Sprite: {fileID: 21300000, guid: c7ce697688684c84928ff860570a69b3, type: 3} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_FlipX: 0 - m_FlipY: 0 - m_DrawMode: 0 - m_Size: {x: 1.4, y: 1.4} - m_AdaptiveModeThreshold: 0.5 - m_SpriteTileMode: 0 - m_WasSpriteAssigned: 1 - m_SpriteSortPoint: 0 ---- !u!61 &61988776655443322 -BoxCollider2D: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1928374650918273} - 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: 1 - 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.5, y: 0.5} - oldSize: {x: 1.6, y: 1} - newSize: {x: 1.4, y: 1.4} - adaptiveTilingThreshold: 0.5 - drawMode: 0 - adaptiveTiling: 0 - m_AutoTiling: 0 - m_Size: {x: 1.55, y: 0.7} - m_EdgeRadius: 0 ---- !u!1 &1987654321098765 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4987654321098765} - - component: {fileID: 114987654321098765} - m_Layer: 0 - m_Name: Slide Obstacle Pattern - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4987654321098765 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1987654321098765} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 0.22222222, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 4987654321098766} - - {fileID: 3876501129384756} - - {fileID: 4987654321098767} - m_Father: {fileID: 4447057583457146} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &114987654321098765 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1987654321098765} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 9dcd5b5fbb7b40d4b86fa136c439d1b7, type: 3} - m_Name: SlideObstaclePattern - m_EditorClassIdentifier: Assembly-CSharp::SlideObstaclePattern - obstacles: - - {fileID: 3876501129384756} - - {fileID: 4987654321098767} - xPositions: - - -1.65 - - -0.55 - - 0.55 - - 1.65 - minSpacing: 1.5 - layout: 0 ---- !u!1 &1987654321098766 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4987654321098766} - - component: {fileID: 212887766554433222} - m_Layer: 0 - m_Name: Ceiling Platform - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4987654321098766 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1987654321098766} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.09999995, y: 3.5000005, z: 0} - m_LocalScale: {x: 3, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4987654321098765} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!212 &212887766554433222 -SpriteRenderer: - serializedVersion: 2 - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1987654321098766} - 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_ForceMeshLod: -1 - m_MeshLodSelectionBias: 0 - m_RenderingLayerMask: 4294967295 - 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: 0 - m_SelectedEditorRenderState: 0 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_GlobalIlluminationMeshLod: 0 - m_SortingLayerID: -591980115 - m_SortingLayer: 3 - m_SortingOrder: 0 - m_MaskInteraction: 0 - m_Sprite: {fileID: 21300000, guid: c61ae3691bcf45deabea44aed605c29d, type: 3} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_FlipX: 0 - m_FlipY: 0 - m_DrawMode: 0 - m_Size: {x: 7.6, y: 1.88} - m_AdaptiveModeThreshold: 0.5 - m_SpriteTileMode: 0 - m_WasSpriteAssigned: 1 - m_SpriteSortPoint: 0 ---- !u!1 &1987654321098767 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4987654321098767} - - component: {fileID: 212887766554433223} - - component: {fileID: 61988776655443323} - m_Layer: 0 - m_Name: Obstacle High Right - m_TagString: Dead - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4987654321098767 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1987654321098767} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 1.1199999, y: 2.6800003, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 4987654321098765} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!212 &212887766554433223 -SpriteRenderer: - serializedVersion: 2 - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1987654321098767} - 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_ForceMeshLod: -1 - m_MeshLodSelectionBias: 0 - m_RenderingLayerMask: 4294967295 - 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: 0 - m_SelectedEditorRenderState: 0 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_GlobalIlluminationMeshLod: 0 - m_SortingLayerID: -294611229 - m_SortingLayer: 2 - m_SortingOrder: 0 - m_MaskInteraction: 0 - m_Sprite: {fileID: 21300000, guid: c7ce697688684c84928ff860570a69b3, type: 3} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_FlipX: 0 - m_FlipY: 0 - m_DrawMode: 0 - m_Size: {x: 1.4, y: 1.4} - m_AdaptiveModeThreshold: 0.5 - m_SpriteTileMode: 0 - m_WasSpriteAssigned: 1 - m_SpriteSortPoint: 0 ---- !u!61 &61988776655443323 -BoxCollider2D: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1987654321098767} - 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: 1 - 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.5, y: 0.5} - oldSize: {x: 1.6, y: 1} - newSize: {x: 1.4, y: 1.4} - adaptiveTilingThreshold: 0.5 - drawMode: 0 - adaptiveTiling: 0 - m_AutoTiling: 0 - m_Size: {x: 1.55, y: 0.7} - m_EdgeRadius: 0 diff --git a/Assets/Resources/UI_DepartureStamp_Red.png b/Assets/Resources/UI_DepartureStamp_Red.png new file mode 100644 index 0000000..988d30b Binary files /dev/null and b/Assets/Resources/UI_DepartureStamp_Red.png differ diff --git a/Assets/Resources/UI_DepartureStamp_Red.png.meta b/Assets/Resources/UI_DepartureStamp_Red.png.meta new file mode 100644 index 0000000..3bfa35e --- /dev/null +++ b/Assets/Resources/UI_DepartureStamp_Red.png.meta @@ -0,0 +1,143 @@ +fileFormatVersion: 2 +guid: 93a27e424cd947568993dbf3a6d1e931 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 4 + buildTarget: iOS + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 4 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: f455a5c527e246d2a2a51e974d147d2c + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/UI_LeftHudPassportCompactPanel.png b/Assets/Resources/UI_LeftHudPassportCompactPanel.png new file mode 100644 index 0000000..fb73e2f Binary files /dev/null and b/Assets/Resources/UI_LeftHudPassportCompactPanel.png differ diff --git a/Assets/Resources/UI_LeftHudPassportCompactPanel.png.meta b/Assets/Resources/UI_LeftHudPassportCompactPanel.png.meta new file mode 100644 index 0000000..88e8271 --- /dev/null +++ b/Assets/Resources/UI_LeftHudPassportCompactPanel.png.meta @@ -0,0 +1,143 @@ +fileFormatVersion: 2 +guid: f7c3aa91d47245efb7e68f53a025cb4d +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 4 + buildTarget: iOS + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 4 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: abbbda8464dc4b17a7dcc4997a22d398 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Course.meta b/Assets/Scripts/Course.meta new file mode 100644 index 0000000..2465734 --- /dev/null +++ b/Assets/Scripts/Course.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9e8469e5a7a7443f9adff42c0c7bf921 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Course/CoursePlatformType.cs b/Assets/Scripts/Course/CoursePlatformType.cs new file mode 100644 index 0000000..561ddea --- /dev/null +++ b/Assets/Scripts/Course/CoursePlatformType.cs @@ -0,0 +1,6 @@ +public enum CoursePlatformType { + Basic, + Jump, + Slide, + ForceHit +} diff --git a/Assets/Scripts/Course/CoursePlatformType.cs.meta b/Assets/Scripts/Course/CoursePlatformType.cs.meta new file mode 100644 index 0000000..076a877 --- /dev/null +++ b/Assets/Scripts/Course/CoursePlatformType.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 02a1bb5c51284fd8ad76d51d8327a14c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Course/CourseStep.cs b/Assets/Scripts/Course/CourseStep.cs new file mode 100644 index 0000000..9e5bda6 --- /dev/null +++ b/Assets/Scripts/Course/CourseStep.cs @@ -0,0 +1,15 @@ +using System; + +[Serializable] +public class CourseStep { + public CoursePlatformType coursePlatformType; + public Platform.PlatformPattern platformPattern; + public Platform.MileagePattern mileagePattern; + public SlideObstaclePattern.SlideLayout slideLayout; + public Platform.ItemPattern itemPattern; + public GameManager.TutorialGuideType guideType; + public float yPosition; + public float spawnInterval; + public string title; + public string message; +} diff --git a/Assets/Scripts/Course/CourseStep.cs.meta b/Assets/Scripts/Course/CourseStep.cs.meta new file mode 100644 index 0000000..34f793d --- /dev/null +++ b/Assets/Scripts/Course/CourseStep.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 21d873850c7043ef8b2854e1a5f16d9b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Course/CourseStepFactory.cs b/Assets/Scripts/Course/CourseStepFactory.cs new file mode 100644 index 0000000..1c48ce8 --- /dev/null +++ b/Assets/Scripts/Course/CourseStepFactory.cs @@ -0,0 +1,189 @@ +public static class CourseStepFactory { + public const float GroundY = -2.4f; + public const float AerialY = -0.85f; + public const float BasicSpacing = 0.58f; + public const float ActionSpacing = 0.72f; + public const float LandingSpacing = 0.64f; + public const float AerialSpacing = 2.05f; + + public static CourseStep[] CreateEasyLoop() { + return new CourseStep[] { + Basic(), + Jump(), + Basic(GroundY, LandingSpacing), + Aerial(), + Basic(GroundY, LandingSpacing), + Slide(SlideObstaclePattern.SlideLayout.CenterPair), + Basic() + }; + } + + public static CourseStep Basic( + float yPosition = GroundY, + float spawnInterval = BasicSpacing, + Platform.MileagePattern mileagePattern = Platform.MileagePattern.SafeLine, + GameManager.TutorialGuideType guideType = GameManager.TutorialGuideType.None, + string title = "", + string message = "", + Platform.ItemPattern itemPattern = Platform.ItemPattern.None) { + return Step( + Platform.PlatformPattern.Empty, + mileagePattern, + SlideObstaclePattern.SlideLayout.Random, + guideType, + GroundY, + spawnInterval, + title, + message, + itemPattern, + CoursePlatformType.Basic); + } + + public static CourseStep Jump( + Platform.PlatformPattern platformPattern = Platform.PlatformPattern.LowMid, + float spawnInterval = ActionSpacing, + GameManager.TutorialGuideType guideType = GameManager.TutorialGuideType.None, + string title = "", + string message = "") { + return Step( + platformPattern, + Platform.MileagePattern.JumpArc, + SlideObstaclePattern.SlideLayout.Random, + guideType, + GroundY, + spawnInterval, + title, + message, + Platform.ItemPattern.None, + CoursePlatformType.Jump); + } + + public static CourseStep Jump( + GameManager.TutorialGuideType guideType, + string title, + string message) { + return Jump(Platform.PlatformPattern.LowMid, ActionSpacing, guideType, title, message); + } + + public static CourseStep Aerial( + GameManager.TutorialGuideType guideType = GameManager.TutorialGuideType.None, + string title = "", + string message = "") { + return Aerial(AerialY, AerialSpacing, guideType, title, message); + } + + public static CourseStep Aerial( + float yPosition, + float spawnInterval, + GameManager.TutorialGuideType guideType = GameManager.TutorialGuideType.None, + string title = "", + string message = "") { + return Step( + Platform.PlatformPattern.Empty, + Platform.MileagePattern.SafeLine, + SlideObstaclePattern.SlideLayout.Random, + guideType, + yPosition, + spawnInterval, + title, + message, + Platform.ItemPattern.None, + CoursePlatformType.Basic); + } + + public static CourseStep Slide( + SlideObstaclePattern.SlideLayout slideLayout = SlideObstaclePattern.SlideLayout.CenterPair, + float spawnInterval = ActionSpacing, + GameManager.TutorialGuideType guideType = GameManager.TutorialGuideType.None, + string title = "", + string message = "") { + return Step( + Platform.PlatformPattern.Slide, + Platform.MileagePattern.SlideLine, + slideLayout, + guideType, + GroundY, + spawnInterval, + title, + message, + Platform.ItemPattern.None, + CoursePlatformType.Slide); + } + + public static CourseStep Slide( + GameManager.TutorialGuideType guideType, + string title, + string message) { + return Slide(SlideObstaclePattern.SlideLayout.CenterPair, ActionSpacing, guideType, title, message); + } + + public static CourseStep ForceHit( + GameManager.TutorialGuideType guideType = GameManager.TutorialGuideType.Damage, + string title = "", + string message = "", + float spawnInterval = ActionSpacing) { + return Step( + Platform.PlatformPattern.ForceHit, + Platform.MileagePattern.None, + SlideObstaclePattern.SlideLayout.WidePair, + guideType, + GroundY, + spawnInterval, + title, + message, + Platform.ItemPattern.None, + CoursePlatformType.ForceHit); + } + + public static CourseStep Step( + Platform.PlatformPattern platformPattern, + Platform.MileagePattern mileagePattern, + SlideObstaclePattern.SlideLayout slideLayout, + GameManager.TutorialGuideType guideType, + float yPosition, + float spawnInterval, + string title = "", + string message = "", + Platform.ItemPattern itemPattern = Platform.ItemPattern.None, + CoursePlatformType coursePlatformType = CoursePlatformType.Basic) { + return new CourseStep { + coursePlatformType = coursePlatformType, + platformPattern = platformPattern, + mileagePattern = mileagePattern, + slideLayout = slideLayout, + itemPattern = itemPattern, + guideType = guideType, + yPosition = yPosition, + spawnInterval = spawnInterval, + title = title, + message = message + }; + } + + public static CourseStep[] CloneSteps(CourseStep[] source) { + if(source == null) + { + return new CourseStep[0]; + } + + CourseStep[] steps = new CourseStep[source.Length]; + + for(int i = 0; i < source.Length; i++) + { + CourseStep sourceStep = source[i]; + steps[i] = Step( + sourceStep.platformPattern, + sourceStep.mileagePattern, + sourceStep.slideLayout, + sourceStep.guideType, + sourceStep.yPosition, + sourceStep.spawnInterval, + sourceStep.title, + sourceStep.message, + sourceStep.itemPattern, + sourceStep.coursePlatformType); + } + + return steps; + } +} diff --git a/Assets/Scripts/Course/CourseStepFactory.cs.meta b/Assets/Scripts/Course/CourseStepFactory.cs.meta new file mode 100644 index 0000000..af8d9f7 --- /dev/null +++ b/Assets/Scripts/Course/CourseStepFactory.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7b8e2ef0ff2346e8ab5e6d6557e41b10 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Course/CourseStepKind.cs b/Assets/Scripts/Course/CourseStepKind.cs new file mode 100644 index 0000000..7957fa1 --- /dev/null +++ b/Assets/Scripts/Course/CourseStepKind.cs @@ -0,0 +1,12 @@ +public enum CourseStepKind { + None, + Jump, + DoubleJumpTakeoff, + Slide, + ForceHit, + HealthItem, + InvincibleItem, + ShieldItem, + SpeedItem, + MileageCardItem +} diff --git a/Assets/Scripts/Course/CourseStepKind.cs.meta b/Assets/Scripts/Course/CourseStepKind.cs.meta new file mode 100644 index 0000000..d0ebc97 --- /dev/null +++ b/Assets/Scripts/Course/CourseStepKind.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e543ce69f5964c1195ce10e5fe7e2a7e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Flow/GameFlowManager.cs b/Assets/Scripts/Flow/GameFlowManager.cs index 6737ab7..ca1f4a5 100644 --- a/Assets/Scripts/Flow/GameFlowManager.cs +++ b/Assets/Scripts/Flow/GameFlowManager.cs @@ -15,7 +15,8 @@ public class GameFlowManager : MonoBehaviour { Game, Result, DutyFreeShop, - MapPreview + MapPreview, + DebugMenu } public static GameFlowManager Instance { get; private set; } @@ -39,6 +40,27 @@ public class GameFlowManager : MonoBehaviour { private const string ResultSceneName = "Result"; private const string DutyFreeShopSceneName = "DutyFreeShop"; private const string MapPreviewSceneName = "MapPreview"; + private const string DepartureStampResourcePath = "UI_DepartureStamp_Red"; + private const string ResultPassportPanelResourcePath = "UI_LeftHudPassportHorizontalGridPanel"; + private const string ResultAirportBackgroundResourcePath = "Map_Tutorial_Incheon_Airport"; + private const string ResultButtonResourcePath = "UI_TutorialNextButton"; + private const string ResultButtonAssetPath = "Assets/Resources/UI_TutorialNextButton.png"; + private const string MileageIconAssetPath = "Assets/Sprites/UIIcons/UI_Mileage.png"; + private const string TimerIconAssetPath = "Assets/Sprites/UIIcons/UI_Timer.png"; + private const string CheckpointIconAssetPath = "Assets/Sprites/UIIcons/UI_Checkpoint.png"; + private const string ClearRankIconAssetPath = "Assets/Sprites/UIIcons/UI_ClearRank.png"; + private const string DutyFreeIconAssetPath = "Assets/Sprites/UIIcons/UI_DutyFreeShop.png"; + private const string AirplaneTravelIconAssetPath = "Assets/Sprites/UIIcons/UI_AirplaneTravel.png"; + private const string DutyFreeBackgroundAssetPath = "Assets/ConceptArt/duty_free_shop_screen_concept_01.png"; + private const string DutyFreeLunchboxAssetPath = "Assets/Sprites/DutyFree/DutyFree_Normal_Lunchbox.png"; + private const string DutyFreeShieldAssetPath = "Assets/Sprites/DutyFree/DutyFree_Normal_ShieldCharm.png"; + private const string DutyFreeShoesAssetPath = "Assets/Sprites/DutyFree/DutyFree_Normal_Shoes.png"; + private const string DutyFreeMileageCardAssetPath = "Assets/Sprites/DutyFree/DutyFree_Normal_MileageCard.png"; + private const string SouvenirCollectionIconAssetPath = "Assets/Sprites/UIIcons/UI_SouvenirCollection.png"; + private const string AirportSouvenirAssetPath = "Assets/Sprites/Souvenirs/Souvenir_AirportMagnet.png"; + private const string JapanSouvenirAssetPath = "Assets/Sprites/Souvenirs/Souvenir_Japan_Magnet.png"; + private const string ChinaSouvenirAssetPath = "Assets/Sprites/Souvenirs/Souvenir_TempleCharm.png"; + private const string AmericaSouvenirAssetPath = "Assets/Sprites/Souvenirs/Souvenir_SkylineMagnet.png"; private const int ShieldCost = 120; private const int LunchboxCost = 80; private const int SpeedShoesCost = 140; @@ -98,6 +120,50 @@ public class GameFlowManager : MonoBehaviour { ShowIntro(); } +#if UNITY_EDITOR || DEVELOPMENT_BUILD + private void Update() { + if(Input.GetKeyDown(KeyCode.Escape)) + { + ShowDebugMenu(); + return; + } + + HandleDebugMenuShortcutInput(); + } + + private void HandleDebugMenuShortcutInput() { + if(currentScreen != FlowScreen.DebugMenu) + { + return; + } + + if(Input.GetKeyDown(KeyCode.Alpha1) || Input.GetKeyDown(KeyCode.Keypad1)) + { + ShowDebugIntroPreview(); + } + else if(Input.GetKeyDown(KeyCode.Alpha2) || Input.GetKeyDown(KeyCode.Keypad2)) + { + ShowDebugGameStartPreview(); + } + else if(Input.GetKeyDown(KeyCode.Alpha3) || Input.GetKeyDown(KeyCode.Keypad3)) + { + ShowDebugResultPreview(false); + } + else if(Input.GetKeyDown(KeyCode.Alpha4) || Input.GetKeyDown(KeyCode.Keypad4)) + { + ShowDebugResultPreview(true); + } + else if(Input.GetKeyDown(KeyCode.Alpha5) || Input.GetKeyDown(KeyCode.Keypad5)) + { + ShowDebugDutyFreeShopPreview(); + } + else if(Input.GetKeyDown(KeyCode.Alpha6) || Input.GetKeyDown(KeyCode.Keypad6)) + { + ShowDebugMapPreview(); + } + } +#endif + private void OnDestroy() { if(Instance == this) { @@ -173,6 +239,95 @@ public class GameFlowManager : MonoBehaviour { ShowResult(); } +#if UNITY_EDITOR || DEVELOPMENT_BUILD + private void ShowDebugMenu() { + EnsureDebugPreviewData(); + + gameplayActive = false; + pendingStartGameplay = false; + currentScreen = FlowScreen.DebugMenu; + + EnsureOverlay(); + ClearOverlay(); + SetOverlayVisible(true); + SetDefaultOverlayBackground(); + + AddTitle("디버그 메뉴"); + AddBody("화면 조정용 바로 이동\n숫자키 1~6도 사용할 수 있습니다."); + AddButton("1. 인트로", ShowDebugIntroPreview); + AddButton("2. 게임 시작", ShowDebugGameStartPreview); + AddButton("3. 출국 실패", delegate { ShowDebugResultPreview(false); }); + AddButton("4. 출국 성공", delegate { ShowDebugResultPreview(true); }); + AddButton("5. 면세점", ShowDebugDutyFreeShopPreview); + AddButton("6. 지도", ShowDebugMapPreview); + } + + private void ShowDebugIntroPreview() { + ShowIntro(); + } + + private void ShowDebugGameStartPreview() { + EnsureDebugPreviewData(); + LoadGameSceneForCurrentMap(); + } + + private void ShowDebugResultPreview(bool cleared) { + EnsureDebugPreviewData(); + + gameplayActive = false; + pendingStartGameplay = false; + currentScreen = FlowScreen.Result; + completedMap = currentMap; + lastResultCleared = cleared; + lastResultScore = cleared ? 12800 : 7200; + lastResultMileage = cleared ? 263 : 84; + lastResultTime = cleared ? 23.9f : 38.4f; + lastResultDistance = completedMap != null + ? (cleared ? completedMap.targetDistance : completedMap.targetDistance * 0.62f) + : 380f; + + if(saveData != null) + { + saveData.totalMileage = Mathf.Max(saveData.totalMileage, 4120); + } + + ShowResult(); + } + + private void ShowDebugDutyFreeShopPreview() { + EnsureDebugPreviewData(); + + if(saveData != null) + { + saveData.totalMileage = Mathf.Max(saveData.totalMileage, 4120); + } + + ShowDutyFreeShop(); + } + + private void ShowDebugMapPreview() { + EnsureDebugPreviewData(); + ShowMapPreview(); + } + + private void EnsureDebugPreviewData() { + if(saveData == null) + { + saveData = GameSaveManager.Load(); + } + + if(currentMap == null) + { + currentMap = MapDatabase.GetMapByIndex(saveData != null ? saveData.currentMapIndex : 0); + } + + if(currentMap == null) + { + currentMap = MapDatabase.GetMapByIndex(0); + } + } +#endif + private void StartNewJourney() { saveData = GameSaveManager.ResetSave(); currentMap = MapDatabase.GetMapByIndex(saveData.currentMapIndex); @@ -271,33 +426,298 @@ public class GameFlowManager : MonoBehaviour { EnsureOverlay(); ClearOverlay(); SetOverlayVisible(true); - SetDefaultOverlayBackground(); + BuildResultScreen(); + } - string title = lastResultCleared ? "맵 클리어" : "일정 실패"; - string body = completedMap.displayName - + "\n점수: " + lastResultScore - + "\n획득 마일리지: " + lastResultMileage - + "\n거리: " + Mathf.FloorToInt(lastResultDistance) + "m / " + Mathf.FloorToInt(completedMap.targetDistance) + "m" - + "\n시간: " + lastResultTime.ToString("0.0") + "s"; + private void BuildResultScreen() { + ApplyResultAirportBackground(); + + MapDefinition resultMap = completedMap != null ? completedMap : currentMap; + int rewardMileage = lastResultCleared && resultMap != null ? resultMap.clearMileageReward : 0; + int gainedMileage = Mathf.Max(0, lastResultMileage) + rewardMileage; + int targetDistance = resultMap != null ? Mathf.FloorToInt(resultMap.targetDistance) : 0; + int shownDistance = targetDistance > 0 + ? Mathf.Clamp(Mathf.FloorToInt(lastResultDistance), 0, targetDistance) + : Mathf.Max(0, Mathf.FloorToInt(lastResultDistance)); + + RectTransform passportRect = AddResultPassportPanel(); + AddResultHeader(passportRect, resultMap); + AddResultStats(passportRect, gainedMileage, shownDistance, targetDistance); + AddResultTickets(passportRect, resultMap, rewardMileage); if(lastResultCleared) { - body += "\n클리어 보상: " + completedMap.clearMileageReward + " 마일리지"; - } - - AddTitle(title); - AddBody(body); - - if(lastResultCleared) - { - AddButton("면세점으로", ShowDutyFreeShop); + AddResultActionButton("면세점으로", ShowDutyFreeShop, new Vector2(-166f, -282f), new Vector2(250f, 48f), true, LoadUiSprite("", DutyFreeIconAssetPath)); + AddResultActionButton("다음 여행지 가기", ShowMapPreview, new Vector2(160f, -282f), new Vector2(292f, 48f), false, LoadUiSprite("", AirplaneTravelIconAssetPath)); } else { - AddButton("다시 도전", RetryCurrentMap); + AddResultActionButton("다시 도전", RetryCurrentMap, new Vector2(-166f, -282f), new Vector2(250f, 48f), true, LoadUiSprite("", CheckpointIconAssetPath)); + AddResultActionButton("다음 여행지 가기", ShowMapPreview, new Vector2(160f, -282f), new Vector2(292f, 48f), false, LoadUiSprite("", AirplaneTravelIconAssetPath)); + } + } + + private void ApplyResultAirportBackground() { + if(overlayBackground != null) + { + overlayBackground.sprite = LoadUiSprite(ResultAirportBackgroundResourcePath, "Assets/Resources/Map_Tutorial_Incheon_Airport.png"); + overlayBackground.preserveAspect = false; + overlayBackground.color = overlayBackground.sprite != null + ? Color.white + : new Color(0.008f, 0.024f, 0.034f, 0.96f); } - AddButton("인트로", ShowIntro); + if(flowCamera != null) + { + flowCamera.backgroundColor = new Color(0.006f, 0.022f, 0.035f, 1f); + } + + GameObject scrimObject = CreateUiObject("Result Airport Background Scrim", overlayRoot, typeof(Image)); + RectTransform scrimRect = scrimObject.GetComponent(); + scrimRect.anchorMin = Vector2.zero; + scrimRect.anchorMax = Vector2.one; + scrimRect.offsetMin = Vector2.zero; + scrimRect.offsetMax = Vector2.zero; + + Image scrimImage = scrimObject.GetComponent(); + scrimImage.color = new Color(0.005f, 0.015f, 0.020f, 0.30f); + scrimImage.raycastTarget = false; + } + + private RectTransform AddResultPassportPanel() { + GameObject panelObject = CreateUiObject("Result Passport Page", overlayRoot, typeof(Image)); + RectTransform panelRect = panelObject.GetComponent(); + panelRect.anchorMin = new Vector2(0.5f, 0.5f); + panelRect.anchorMax = new Vector2(0.5f, 0.5f); + panelRect.pivot = new Vector2(0.5f, 0.5f); + panelRect.anchoredPosition = new Vector2(0f, 38f); + panelRect.sizeDelta = new Vector2(1092f, 330f); + + Image panelImage = panelObject.GetComponent(); + panelImage.sprite = LoadUiSprite(ResultPassportPanelResourcePath, "Assets/Resources/UI_LeftHudPassportHorizontalGridPanel.png"); + panelImage.color = panelImage.sprite != null + ? Color.white + : new Color(0.95f, 0.91f, 0.80f, 0.98f); + panelImage.preserveAspect = true; + panelImage.raycastTarget = false; + + return panelRect; + } + + private void AddResultHeader(RectTransform parent, MapDefinition resultMap) { + Sprite rankSprite = LoadUiSprite("", ClearRankIconAssetPath); + Sprite stampSprite = LoadUiSprite(DepartureStampResourcePath, "Assets/Resources/UI_DepartureStamp_Red.png"); + + AddResultImage(parent, "Result Rank Badge", rankSprite, new Vector2(170f, -106f), new Vector2(50f, 50f), true, Color.white); + + string title = lastResultCleared ? "출국 성공!" : "일정 실패"; + Color titleColor = lastResultCleared + ? new Color(0.05f, 0.17f, 0.27f, 1f) + : new Color(0.52f, 0.08f, 0.07f, 1f); + AddResultText(parent, "Result Title", title, new Vector2(194f, -88f), new Vector2(210f, 50f), 28f, FontStyles.Bold, titleColor, TextAlignmentOptions.MidlineLeft); + + string destination = GetResultDestinationName(resultMap); + AddResultText(parent, "Result Route", destination, new Vector2(260f, -140f), new Vector2(210f, 22f), 13f, FontStyles.Bold, new Color(0.25f, 0.42f, 0.50f, 0.96f), TextAlignmentOptions.MidlineLeft); + + if(lastResultCleared) + { + AddResultImage(parent, "Result Departure Stamp", stampSprite, new Vector2(250f, -232f), new Vector2(108f, 108f), true, new Color(1f, 1f, 1f, 0.92f)); + TextMeshProUGUI stampText = AddResultText(parent, "Result Stamp Text", "출국\n성공", new Vector2(228f, -218f), new Vector2(92f, 48f), 21f, FontStyles.Bold, new Color(0.70f, 0.04f, 0.03f, 0.96f), TextAlignmentOptions.Center); + stampText.lineSpacing = -16f; + } + else + { + AddResultText(parent, "Result Retry Note", "다시 준비해서\n출국 게이트까지", new Vector2(178f, -216f), new Vector2(200f, 56f), 17f, FontStyles.Bold, new Color(0.32f, 0.46f, 0.54f, 0.96f), TextAlignmentOptions.Center); + } + } + + private void AddResultStats(RectTransform parent, int gainedMileage, int shownDistance, int targetDistance) { + AddResultStat(parent, "Mileage", LoadUiSprite("", MileageIconAssetPath), "마일리지", "+" + gainedMileage, new Vector2(478f, -90f)); + AddResultStat(parent, "Time", LoadUiSprite("", TimerIconAssetPath), "도착 시간", lastResultTime.ToString("0.0") + "s", new Vector2(626f, -90f)); + + string distance = targetDistance > 0 + ? shownDistance + "/" + targetDistance + "m" + : shownDistance + "m"; + AddResultStat(parent, "Distance", LoadUiSprite("", CheckpointIconAssetPath), "이동 거리", distance, new Vector2(770f, -90f)); + } + + private void AddResultTickets(RectTransform parent, MapDefinition resultMap, int rewardMileage) { + AddResultTicket( + parent, + "Destination", + LoadUiSprite("", CheckpointIconAssetPath), + "목적지", + GetResultDestinationName(resultMap), + new Vector2(410f, -200f)); + + AddResultTicket( + parent, + "Souvenir", + lastResultCleared ? GetResultSouvenirSprite(resultMap) : LoadUiSprite("", SouvenirCollectionIconAssetPath), + "보상", + lastResultCleared ? GetResultSouvenirName(resultMap) : "다음 도전", + new Vector2(560f, -200f)); + + AddResultTicket( + parent, + "Total Mileage", + LoadUiSprite("", MileageIconAssetPath), + "보유", + saveData.totalMileage + " M", + new Vector2(710f, -200f)); + } + + private void AddResultStat(RectTransform parent, string objectName, Sprite iconSprite, string label, string value, Vector2 centerPosition) { + AddResultImage(parent, "Result " + objectName + " Icon", iconSprite, centerPosition + new Vector2(0f, -4f), new Vector2(42f, 42f), true, Color.white); + AddResultText(parent, "Result " + objectName + " Value", value, centerPosition + new Vector2(-70f, -25f), new Vector2(140f, 24f), 15f, FontStyles.Bold, new Color(0.05f, 0.17f, 0.25f, 1f), TextAlignmentOptions.Center); + AddResultText(parent, "Result " + objectName + " Label", label, centerPosition + new Vector2(-70f, -48f), new Vector2(140f, 18f), 8f, FontStyles.Bold, new Color(0.42f, 0.58f, 0.64f, 0.92f), TextAlignmentOptions.Center); + } + + private void AddResultTicket(RectTransform parent, string objectName, Sprite iconSprite, string label, string value, Vector2 topLeftPosition) { + AddResultImage(parent, "Result " + objectName + " Icon", iconSprite, topLeftPosition + new Vector2(28f, -40f), new Vector2(40f, 40f), true, Color.white); + AddResultText(parent, "Result " + objectName + " Label", label, topLeftPosition + new Vector2(56f, -19f), new Vector2(94f, 18f), 13f, FontStyles.Bold, new Color(0.43f, 0.58f, 0.64f, 0.96f), TextAlignmentOptions.MidlineLeft); + AddResultText(parent, "Result " + objectName + " Value", value, topLeftPosition + new Vector2(56f, -42f), new Vector2(112f, 26f), 12f, FontStyles.Bold, new Color(0.05f, 0.18f, 0.27f, 1f), TextAlignmentOptions.MidlineLeft); + } + + private void AddResultActionButton(string label, UnityEngine.Events.UnityAction action, Vector2 position, Vector2 size, bool primary, Sprite iconSprite) { + GameObject buttonObject = CreateUiObject("Result Button " + label, overlayRoot, typeof(Image), typeof(Button)); + RectTransform buttonRect = buttonObject.GetComponent(); + buttonRect.anchorMin = new Vector2(0.5f, 0.5f); + buttonRect.anchorMax = new Vector2(0.5f, 0.5f); + buttonRect.pivot = new Vector2(0.5f, 0.5f); + buttonRect.anchoredPosition = position; + buttonRect.sizeDelta = size; + + Image buttonImage = buttonObject.GetComponent(); + buttonImage.sprite = LoadUiSprite(ResultButtonResourcePath, ResultButtonAssetPath); + buttonImage.color = buttonImage.sprite != null + ? (primary ? Color.white : new Color(0.86f, 0.94f, 1f, 0.94f)) + : primary + ? new Color(1f, 0.82f, 0.28f, 0.98f) + : new Color(0.82f, 0.91f, 0.96f, 0.90f); + buttonImage.preserveAspect = false; + buttonImage.raycastTarget = true; + + Button button = buttonObject.GetComponent