From ce92ba53cc882e9d79ba005b7c5586151de9ac09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o=20LUDWIG?= Date: Mon, 3 Mar 2025 09:33:58 +0100 Subject: [PATCH 01/11] feat: save the stats in a separated json (#38) --- .gitignore | 3 ++ Assets/Resources/Levels/BackOnTrack.json | 2 -- Assets/Resources/Levels/StereoMadness.json | 2 -- Assets/Resources/LevelsStats.meta | 8 +++++ Assets/Resources/LevelsStats/.gitkeep | 0 Assets/Scripts/Level.cs | 4 +-- Assets/Scripts/LevelStat.cs | 15 ++++++++ Assets/Scripts/LevelStat.cs.meta | 2 ++ Assets/Scripts/LevelsLoader.cs | 40 +++++++++++++++++++--- 9 files changed, 66 insertions(+), 10 deletions(-) create mode 100644 Assets/Resources/LevelsStats.meta create mode 100644 Assets/Resources/LevelsStats/.gitkeep create mode 100644 Assets/Scripts/LevelStat.cs create mode 100644 Assets/Scripts/LevelStat.cs.meta diff --git a/.gitignore b/.gitignore index 6abdd9a..6a4cbc6 100644 --- a/.gitignore +++ b/.gitignore @@ -76,3 +76,6 @@ crashlytics-build.properties # Ignore temporaries from GameCI /[Aa]rtifacts/ /[Cc]odeCoverage/ + +# Saves +/[Aa]ssets/[Rr]esources/LevelsStats diff --git a/Assets/Resources/Levels/BackOnTrack.json b/Assets/Resources/Levels/BackOnTrack.json index fd9e549..31b0663 100644 --- a/Assets/Resources/Levels/BackOnTrack.json +++ b/Assets/Resources/Levels/BackOnTrack.json @@ -1,8 +1,6 @@ { "name": "Back on Track", "musicName": "BackOnTrack", - "totalJumps": 0, - "totalAttempts": 0, "order": 2, "elements": [ { diff --git a/Assets/Resources/Levels/StereoMadness.json b/Assets/Resources/Levels/StereoMadness.json index c44faa1..6ce3679 100644 --- a/Assets/Resources/Levels/StereoMadness.json +++ b/Assets/Resources/Levels/StereoMadness.json @@ -1,8 +1,6 @@ { "name": "Stereo Madness", "musicName": "StereoMadness", - "totalJumps": 0, - "totalAttempts": 0, "order": 1, "elements": [ { diff --git a/Assets/Resources/LevelsStats.meta b/Assets/Resources/LevelsStats.meta new file mode 100644 index 0000000..0669936 --- /dev/null +++ b/Assets/Resources/LevelsStats.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 59df152a42477a5c785d771b7e2be292 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/LevelsStats/.gitkeep b/Assets/Resources/LevelsStats/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/Assets/Scripts/Level.cs b/Assets/Scripts/Level.cs index 37a531a..9711dc2 100644 --- a/Assets/Scripts/Level.cs +++ b/Assets/Scripts/Level.cs @@ -4,11 +4,11 @@ using UnityEngine; public class Level { public string JsonName { get; set; } + public int TotalJumps { get; set; } + public int TotalAttempts { get; set; } public string name; public string musicName; - public int totalJumps; - public int totalAttempts; public int order; public static Level CreateFromJSON(string jsonString) diff --git a/Assets/Scripts/LevelStat.cs b/Assets/Scripts/LevelStat.cs new file mode 100644 index 0000000..80d5b0e --- /dev/null +++ b/Assets/Scripts/LevelStat.cs @@ -0,0 +1,15 @@ +using UnityEngine; + +[System.Serializable] +public class LevelStat +{ + public string JsonName { get; set; } + + public int totalJumps; + public int totalAttempts; + + public static LevelStat CreateFromJSON(string jsonString) + { + return JsonUtility.FromJson(jsonString); + } +} diff --git a/Assets/Scripts/LevelStat.cs.meta b/Assets/Scripts/LevelStat.cs.meta new file mode 100644 index 0000000..d085b09 --- /dev/null +++ b/Assets/Scripts/LevelStat.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: be0a07689666b367aaf138fa766075c8 \ No newline at end of file diff --git a/Assets/Scripts/LevelsLoader.cs b/Assets/Scripts/LevelsLoader.cs index 6d227d3..dec28b4 100644 --- a/Assets/Scripts/LevelsLoader.cs +++ b/Assets/Scripts/LevelsLoader.cs @@ -17,10 +17,33 @@ public class LevelsLoader : MonoBehaviour private void LoadAllLevels() { TextAsset[] levelFiles = Resources.LoadAll("Levels"); + TextAsset[] levelStatsFiles = Resources.LoadAll("LevelsStats"); + + Dictionary levelStatsMap = new(); + foreach (TextAsset jsonTextFileStats in levelStatsFiles) + { + LevelStat levelStat = LevelStat.CreateFromJSON(jsonTextFileStats.text); + levelStatsMap[levelStat.JsonName] = levelStat; + } + foreach (TextAsset jsonTextFile in levelFiles) { Level level = Level.CreateFromJSON(jsonTextFile.text); level.JsonName = jsonTextFile.name; + level.TotalAttempts = 0; + level.TotalJumps = 0; + + if (levelStatsMap.TryGetValue(level.JsonName, out LevelStat levelStat)) + { + level.TotalJumps = levelStat.totalJumps; + level.TotalAttempts = levelStat.totalAttempts; + } + else + { + levelStat = new LevelStat { JsonName = level.JsonName, totalJumps = 0, totalAttempts = 0 }; + levelStatsMap[level.JsonName] = levelStat; + } + levels.Add(level); } levels.Sort((x, y) => x.order.CompareTo(y.order)); @@ -28,8 +51,17 @@ public class LevelsLoader : MonoBehaviour private void SaveLevelCurrent() { - string json = JsonUtility.ToJson(levelCurrent, true) + "\n"; - File.WriteAllText(Path.Combine(Application.dataPath, "Resources", "Levels", levelCurrent.JsonName + ".json"), json); + string levelJson = JsonUtility.ToJson(levelCurrent, true) + "\n"; + File.WriteAllText(Path.Combine(Application.dataPath, "Resources", "Levels", levelCurrent.JsonName + ".json"), levelJson); + + LevelStat levelStat = new() + { + JsonName = levelCurrent.JsonName, + totalJumps = levelCurrent.TotalJumps, + totalAttempts = levelCurrent.TotalAttempts + }; + string levelStatJson = JsonUtility.ToJson(levelStat, true) + "\n"; + File.WriteAllText(Path.Combine(Application.dataPath, "Resources", "LevelsStats", levelCurrent.JsonName + ".json"), levelStatJson); } public void NextLevel() @@ -46,13 +78,13 @@ public class LevelsLoader : MonoBehaviour public void IncreaseTotalJumps() { - levelCurrent.totalJumps += 1; + levelCurrent.TotalJumps += 1; SaveLevelCurrent(); } public void IncreaseTotalAttempts() { - levelCurrent.totalAttempts += 1; + levelCurrent.TotalAttempts += 1; SaveLevelCurrent(); } } From e2bbf26929e9f59ea949725fc6324423ca6fc1ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o=20LUDWIG?= Date: Mon, 3 Mar 2025 10:36:38 +0100 Subject: [PATCH 02/11] feat: dynamically create elements levels (#39) --- Assets/Resources/Levels/BackOnTrack.json | 11 +- Assets/Resources/Levels/StereoMadness.json | 13 +- Assets/Resources/Prefabs.meta | 8 + Assets/Resources/Prefabs/Obstacle.prefab | 247 +++++++++ Assets/Resources/Prefabs/Obstacle.prefab.meta | 7 + Assets/Resources/Prefabs/Spike.prefab | 197 +++++++ Assets/Resources/Prefabs/Spike.prefab.meta | 7 + Assets/Scenes/LevelScene.unity | 502 ++---------------- Assets/Scripts/Level.cs | 19 + Assets/Scripts/LevelLoader.cs | 58 ++ Assets/Scripts/LevelLoader.cs.meta | 2 + Assets/Scripts/LevelsLoader.cs | 1 + Assets/Scripts/Player.cs | 12 - 13 files changed, 608 insertions(+), 476 deletions(-) create mode 100644 Assets/Resources/Prefabs.meta create mode 100644 Assets/Resources/Prefabs/Obstacle.prefab create mode 100644 Assets/Resources/Prefabs/Obstacle.prefab.meta create mode 100644 Assets/Resources/Prefabs/Spike.prefab create mode 100644 Assets/Resources/Prefabs/Spike.prefab.meta create mode 100644 Assets/Scripts/LevelLoader.cs create mode 100644 Assets/Scripts/LevelLoader.cs.meta diff --git a/Assets/Resources/Levels/BackOnTrack.json b/Assets/Resources/Levels/BackOnTrack.json index 31b0663..38089e0 100644 --- a/Assets/Resources/Levels/BackOnTrack.json +++ b/Assets/Resources/Levels/BackOnTrack.json @@ -1,14 +1,5 @@ { "name": "Back on Track", "musicName": "BackOnTrack", - "order": 2, - "elements": [ - { - "type": "Spike", - "position": { - "x": 0, - "y": 0 - } - } - ] + "order": 2 } diff --git a/Assets/Resources/Levels/StereoMadness.json b/Assets/Resources/Levels/StereoMadness.json index 6ce3679..8156463 100644 --- a/Assets/Resources/Levels/StereoMadness.json +++ b/Assets/Resources/Levels/StereoMadness.json @@ -4,11 +4,14 @@ "order": 1, "elements": [ { - "type": "Spike", - "position": { - "x": 0, - "y": 0 - } + "type": 0, + "x": -6.684000015258789, + "y": -2.8970000743865969 + }, + { + "type": 1, + "x": -3.059999942779541, + "y": -2.930000066757202 } ] } diff --git a/Assets/Resources/Prefabs.meta b/Assets/Resources/Prefabs.meta new file mode 100644 index 0000000..c418614 --- /dev/null +++ b/Assets/Resources/Prefabs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e727115e61afa852f9b3fca47c39c15c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Prefabs/Obstacle.prefab b/Assets/Resources/Prefabs/Obstacle.prefab new file mode 100644 index 0000000..10040ea --- /dev/null +++ b/Assets/Resources/Prefabs/Obstacle.prefab @@ -0,0 +1,247 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &4503133877144714992 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5012884470156408499} + - component: {fileID: 8308996464851343268} + m_Layer: 0 + m_Name: Obstacle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5012884470156408499 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4503133877144714992} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -6.684, y: -2.897, z: 0} + m_LocalScale: {x: 0.96055, y: 0.2326, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 753406095052540359} + - {fileID: 3772212889498300441} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!212 &8308996464851343268 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4503133877144714992} + 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: 7862696914207302912, guid: cace85b8e53e5df4b92e5cf09eb4a0c9, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 5.14, y: 5.14} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 +--- !u!1 &5192728607521336247 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 753406095052540359} + - component: {fileID: 4745569766689628624} + m_Layer: 0 + m_Name: ObstacleSafer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &753406095052540359 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5192728607521336247} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5012884470156408499} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!61 &4745569766689628624 +BoxCollider2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5192728607521336247} + 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.004009247, y: 1.7748187} + 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: 5.121194, y: 1.4569769} + m_EdgeRadius: 0 +--- !u!1 &7427412648610411495 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3772212889498300441} + - component: {fileID: 8331097993010127203} + m_Layer: 0 + m_Name: ObstacleKiller + m_TagString: Kill + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3772212889498300441 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7427412648610411495} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5012884470156408499} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!61 &8331097993010127203 +BoxCollider2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7427412648610411495} + 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.0040085316, y: -0.985047} + 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: 5.1211915, y: 2.672097} + m_EdgeRadius: 0 diff --git a/Assets/Resources/Prefabs/Obstacle.prefab.meta b/Assets/Resources/Prefabs/Obstacle.prefab.meta new file mode 100644 index 0000000..1a82ed3 --- /dev/null +++ b/Assets/Resources/Prefabs/Obstacle.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ded5ba9868ed45d64adf56ff6f9f8d80 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Prefabs/Spike.prefab b/Assets/Resources/Prefabs/Spike.prefab new file mode 100644 index 0000000..d7a0044 --- /dev/null +++ b/Assets/Resources/Prefabs/Spike.prefab @@ -0,0 +1,197 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &7777828896977100680 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8115733835563602594} + - component: {fileID: 4668755637508042186} + - component: {fileID: 5986636574179340540} + m_Layer: 0 + m_Name: Spike + m_TagString: Kill + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8115733835563602594 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7777828896977100680} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -3.06, y: -2.93, z: 0} + m_LocalScale: {x: 0.15, y: 0.15, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!212 &4668755637508042186 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7777828896977100680} + 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: 5761849248444590345, guid: 23159a719d47ecd4ea9ccf80790555c2, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 8.39, y: 9.62} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 +--- !u!60 &5986636574179340540 +PolygonCollider2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7777828896977100680} + 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.5, y: 0.5} + oldSize: {x: 8.39, y: 9.62} + newSize: {x: 8.39, y: 9.62} + adaptiveTilingThreshold: 0.5 + drawMode: 0 + adaptiveTiling: 0 + m_AutoTiling: 0 + m_Points: + m_Paths: + - - {x: 4.185, y: -3.99} + - {x: 4.185, y: -3.81} + - {x: 4.1549997, y: -3.7099998} + - {x: 4.085, y: -3.56} + - {x: 3.965, y: -3.29} + - {x: 3.665, y: -2.62} + - {x: 2.605, y: -0.24} + - {x: 1.5949999, y: 2.03} + - {x: 0.615, y: 4.23} + - {x: 0.445, y: 4.61} + - {x: 0.345, y: 4.74} + - {x: 0.24499999, y: 4.7799997} + - {x: 0.205, y: 4.79} + - {x: 0.055, y: 4.79} + - {x: -0.074999996, y: 4.73} + - {x: -0.145, y: 4.66} + - {x: -0.205, y: 4.5499997} + - {x: -0.53499997, y: 3.86} + - {x: -0.655, y: 3.61} + - {x: -0.755, y: 3.3999999} + - {x: -0.865, y: 3.1699998} + - {x: -0.865, y: 3.1499999} + - {x: -1.0849999, y: 2.71} + - {x: -1.295, y: 2.27} + - {x: -1.405, y: 2.04} + - {x: -1.505, y: 1.8299999} + - {x: -2.715, y: -0.7} + - {x: -2.715, y: -0.71999997} + - {x: -2.935, y: -1.16} + - {x: -3.0149999, y: -1.3299999} + - {x: -3.215, y: -1.75} + - {x: -3.335, y: -2} + - {x: -3.995, y: -3.3799999} + - {x: -4.125, y: -3.6499999} + - {x: -4.1549997, y: -3.6999998} + - {x: -4.185, y: -3.78} + - {x: -4.185, y: -3.98} + - {x: -4.085, y: -4.13} + - {x: -4.005, y: -4.17} + - {x: -3.915, y: -4.21} + - {x: -3.7549999, y: -4.2} + - {x: -3.735, y: -4.17} + - {x: -2.705, y: -4.17} + - {x: -2.695, y: -4.18} + - {x: -1.615, y: -4.18} + - {x: -1.605, y: -4.19} + - {x: -0.78499997, y: -4.19} + - {x: -0.775, y: -4.2} + - {x: 0.24499999, y: -4.2} + - {x: 0.255, y: -4.21} + - {x: 1.355, y: -4.21} + - {x: 1.365, y: -4.22} + - {x: 2.435, y: -4.22} + - {x: 2.445, y: -4.23} + - {x: 3.5049999, y: -4.23} + - {x: 3.5149999, y: -4.24} + - {x: 3.865, y: -4.24} + - {x: 3.955, y: -4.22} + - {x: 4.045, y: -4.18} + - {x: 4.1549997, y: -4.08} + m_UseDelaunayMesh: 0 diff --git a/Assets/Resources/Prefabs/Spike.prefab.meta b/Assets/Resources/Prefabs/Spike.prefab.meta new file mode 100644 index 0000000..c40cdf9 --- /dev/null +++ b/Assets/Resources/Prefabs/Spike.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 6106ddf26cd56b5ceb9034abdb003e42 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/LevelScene.unity b/Assets/Scenes/LevelScene.unity index ce0a0f2..9ce63cb 100644 --- a/Assets/Scenes/LevelScene.unity +++ b/Assets/Scenes/LevelScene.unity @@ -226,84 +226,6 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: playerObject: {fileID: 1267397455} ---- !u!1 &634865766 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 634865767} - - component: {fileID: 634865768} - m_Layer: 0 - m_Name: ObstacleKiller - m_TagString: Kill - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &634865767 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 634865766} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1009490389} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!61 &634865768 -BoxCollider2D: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 634865766} - 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.0040085316, y: -0.985047} - 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: 5.1211915, y: 2.672097} - m_EdgeRadius: 0 --- !u!1 &725779773 GameObject: m_ObjectHideFlags: 0 @@ -5137,95 +5059,6 @@ ParticleSystem: m_PostInfinity: 2 m_RotationOrder: 4 vectorLabel1_3: W ---- !u!1 &1009490386 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1009490389} - - component: {fileID: 1009490388} - m_Layer: 0 - m_Name: Obstacle - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!212 &1009490388 -SpriteRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1009490386} - 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: 7862696914207302912, guid: cace85b8e53e5df4b92e5cf09eb4a0c9, type: 3} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_FlipX: 0 - m_FlipY: 0 - m_DrawMode: 0 - m_Size: {x: 5.14, y: 5.14} - m_AdaptiveModeThreshold: 0.5 - m_SpriteTileMode: 0 - m_WasSpriteAssigned: 1 - m_MaskInteraction: 0 - m_SpriteSortPoint: 0 ---- !u!4 &1009490389 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1009490386} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -6.684, y: -2.897, z: 0} - m_LocalScale: {x: 0.96055, y: 0.2326, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 2006361645} - - {fileID: 634865767} - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1011717286 GameObject: m_ObjectHideFlags: 0 @@ -5460,7 +5293,6 @@ GameObject: - component: {fileID: 1267397456} - component: {fileID: 1267397460} - component: {fileID: 1267397459} - - component: {fileID: 1267397461} m_Layer: 0 m_Name: Player m_TagString: Player @@ -5583,7 +5415,6 @@ MonoBehaviour: particle: {fileID: 725779776} levelsLoader: {fileID: 0} isColliding: 1 - audioSource: {fileID: 1267397461} --- !u!61 &1267397460 BoxCollider2D: m_ObjectHideFlags: 0 @@ -5630,20 +5461,67 @@ BoxCollider2D: m_AutoTiling: 0 m_Size: {x: 0.79, y: 0.79} m_EdgeRadius: 0 ---- !u!82 &1267397461 +--- !u!1 &1999482185 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1999482187} + - component: {fileID: 1999482186} + - component: {fileID: 1999482188} + m_Layer: 0 + m_Name: LevelLoader + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1999482186 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1999482185} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 017ea60a517f31bf3af976010911be25, type: 3} + m_Name: + m_EditorClassIdentifier: + levelsLoader: {fileID: 0} + audioSource: {fileID: 1999482188} +--- !u!4 &1999482187 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1999482185} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 8.485552, y: 2.2081068, z: -0.13737443} + 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!82 &1999482188 AudioSource: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1267397455} + m_GameObject: {fileID: 1999482185} m_Enabled: 1 serializedVersion: 4 OutputAudioMixerGroup: {fileID: 0} - m_audioClip: {fileID: 8300000, guid: 681525f18aa52594aa45865f4c54b61a, type: 3} - m_Resource: {fileID: 8300000, guid: 681525f18aa52594aa45865f4c54b61a, type: 3} + m_audioClip: {fileID: 8300000, guid: 4b3e17e99d442fa4081b5544de2425de, type: 3} + m_Resource: {fileID: 8300000, guid: 4b3e17e99d442fa4081b5544de2425de, type: 3} m_PlayOnAwake: 1 - m_Volume: 0.5 + m_Volume: 1 m_Pitch: 1 Loop: 0 Mute: 0 @@ -5727,279 +5605,6 @@ AudioSource: m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 ---- !u!1 &1783527212 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1783527216} - - component: {fileID: 1783527215} - - component: {fileID: 1783527214} - m_Layer: 0 - m_Name: Spike - m_TagString: Kill - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!60 &1783527214 -PolygonCollider2D: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1783527212} - 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.5, y: 0.5} - oldSize: {x: 8.39, y: 9.62} - newSize: {x: 8.39, y: 9.62} - adaptiveTilingThreshold: 0.5 - drawMode: 0 - adaptiveTiling: 0 - m_AutoTiling: 0 - m_Points: - m_Paths: - - - {x: 4.185, y: -3.99} - - {x: 4.185, y: -3.81} - - {x: 4.1549997, y: -3.7099998} - - {x: 4.085, y: -3.56} - - {x: 3.965, y: -3.29} - - {x: 3.665, y: -2.62} - - {x: 2.605, y: -0.24} - - {x: 1.5949999, y: 2.03} - - {x: 0.615, y: 4.23} - - {x: 0.445, y: 4.61} - - {x: 0.345, y: 4.74} - - {x: 0.24499999, y: 4.7799997} - - {x: 0.205, y: 4.79} - - {x: 0.055, y: 4.79} - - {x: -0.074999996, y: 4.73} - - {x: -0.145, y: 4.66} - - {x: -0.205, y: 4.5499997} - - {x: -0.53499997, y: 3.86} - - {x: -0.655, y: 3.61} - - {x: -0.755, y: 3.3999999} - - {x: -0.865, y: 3.1699998} - - {x: -0.865, y: 3.1499999} - - {x: -1.0849999, y: 2.71} - - {x: -1.295, y: 2.27} - - {x: -1.405, y: 2.04} - - {x: -1.505, y: 1.8299999} - - {x: -2.715, y: -0.7} - - {x: -2.715, y: -0.71999997} - - {x: -2.935, y: -1.16} - - {x: -3.0149999, y: -1.3299999} - - {x: -3.215, y: -1.75} - - {x: -3.335, y: -2} - - {x: -3.995, y: -3.3799999} - - {x: -4.125, y: -3.6499999} - - {x: -4.1549997, y: -3.6999998} - - {x: -4.185, y: -3.78} - - {x: -4.185, y: -3.98} - - {x: -4.085, y: -4.13} - - {x: -4.005, y: -4.17} - - {x: -3.915, y: -4.21} - - {x: -3.7549999, y: -4.2} - - {x: -3.735, y: -4.17} - - {x: -2.705, y: -4.17} - - {x: -2.695, y: -4.18} - - {x: -1.615, y: -4.18} - - {x: -1.605, y: -4.19} - - {x: -0.78499997, y: -4.19} - - {x: -0.775, y: -4.2} - - {x: 0.24499999, y: -4.2} - - {x: 0.255, y: -4.21} - - {x: 1.355, y: -4.21} - - {x: 1.365, y: -4.22} - - {x: 2.435, y: -4.22} - - {x: 2.445, y: -4.23} - - {x: 3.5049999, y: -4.23} - - {x: 3.5149999, y: -4.24} - - {x: 3.865, y: -4.24} - - {x: 3.955, y: -4.22} - - {x: 4.045, y: -4.18} - - {x: 4.1549997, y: -4.08} - m_UseDelaunayMesh: 0 ---- !u!212 &1783527215 -SpriteRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1783527212} - 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: 5761849248444590345, guid: 23159a719d47ecd4ea9ccf80790555c2, type: 3} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_FlipX: 0 - m_FlipY: 0 - m_DrawMode: 0 - m_Size: {x: 8.39, y: 9.62} - m_AdaptiveModeThreshold: 0.5 - m_SpriteTileMode: 0 - m_WasSpriteAssigned: 1 - m_MaskInteraction: 0 - m_SpriteSortPoint: 0 ---- !u!4 &1783527216 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1783527212} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -3.06, y: -2.93, z: 0} - m_LocalScale: {x: 0.15, y: 0.15, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &2006361644 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2006361645} - - component: {fileID: 2006361646} - m_Layer: 0 - m_Name: ObstacleSafer - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2006361645 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2006361644} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1009490389} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!61 &2006361646 -BoxCollider2D: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2006361644} - 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.004009247, y: 1.7748187} - 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: 5.121194, y: 1.4569769} - m_EdgeRadius: 0 --- !u!1 &2062107675 GameObject: m_ObjectHideFlags: 0 @@ -6141,6 +5746,5 @@ SceneRoots: - {fileID: 519420032} - {fileID: 1267397458} - {fileID: 1235900594} - - {fileID: 1009490389} - - {fileID: 1783527216} - {fileID: 2062107678} + - {fileID: 1999482187} diff --git a/Assets/Scripts/Level.cs b/Assets/Scripts/Level.cs index 9711dc2..24e547b 100644 --- a/Assets/Scripts/Level.cs +++ b/Assets/Scripts/Level.cs @@ -1,4 +1,21 @@ using UnityEngine; +using System.Collections; +using System.Collections.Generic; +using System.Runtime.Serialization; + +[System.Serializable] +public class LevelElement +{ + public enum Type + { + Obstacle = 0, + Spike = 1 + } + + public Type type; + public float x; + public float y; +} [System.Serializable] public class Level @@ -11,6 +28,8 @@ public class Level public string musicName; public int order; + public List elements; + public static Level CreateFromJSON(string jsonString) { return JsonUtility.FromJson(jsonString); diff --git a/Assets/Scripts/LevelLoader.cs b/Assets/Scripts/LevelLoader.cs new file mode 100644 index 0000000..35e590d --- /dev/null +++ b/Assets/Scripts/LevelLoader.cs @@ -0,0 +1,58 @@ +using UnityEngine; +using System.IO; + +public class LevelLoader : MonoBehaviour +{ + public LevelsLoader levelsLoader; + public AudioSource audioSource; + public GameObject obstaclePrefab; + public GameObject spikePrefab; + + void Start() + { + levelsLoader = GameObject.FindGameObjectWithTag("LevelsLoader").GetComponent(); + levelsLoader.IncreaseTotalAttempts(); + + audioSource.clip = Resources.Load(Path.Combine("Musics", levelsLoader.levelCurrent.musicName)); + audioSource.Play(); + + obstaclePrefab = Resources.Load("Prefabs/Obstacle"); + spikePrefab = Resources.Load("Prefabs/Spike"); + + Level current = levelsLoader.levelCurrent; + // Debug.Log("Level: " + current.name); + // for (int i = 0; i < current.elements.Count; i++) + // { + // LevelElement element = current.elements[i]; + // Debug.Log("Element: " + element.type + " " + element.x + " " + element.y); + // } + + for (int index = 0; index < current.elements.Count; index++) + { + LevelElement element = current.elements[index]; + GameObject prefab = obstaclePrefab; + + if (element.type == LevelElement.Type.Spike) + { + prefab = spikePrefab; + } + + Instantiate(prefab, new Vector3(element.x, element.y, 0), Quaternion.identity); + } + + // // Obstacle + // // x=-6.684, y=-2.897, 0 + // // scale=0.96055, 0.2326, 1 + // Instantiate(obstaclePrefab, new Vector3(-6.684f, -2.897f, 0), Quaternion.identity); + + // // Spike + // // -3.06, -2.93 + // // scale=0.15, 0.15, 1 + // Instantiate(spikePrefab, new Vector3(-3.06f, -2.93f, 0), Quaternion.identity); + } + + void Update() + { + + } +} diff --git a/Assets/Scripts/LevelLoader.cs.meta b/Assets/Scripts/LevelLoader.cs.meta new file mode 100644 index 0000000..1d6be94 --- /dev/null +++ b/Assets/Scripts/LevelLoader.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 017ea60a517f31bf3af976010911be25 \ No newline at end of file diff --git a/Assets/Scripts/LevelsLoader.cs b/Assets/Scripts/LevelsLoader.cs index dec28b4..c29cd6e 100644 --- a/Assets/Scripts/LevelsLoader.cs +++ b/Assets/Scripts/LevelsLoader.cs @@ -23,6 +23,7 @@ public class LevelsLoader : MonoBehaviour foreach (TextAsset jsonTextFileStats in levelStatsFiles) { LevelStat levelStat = LevelStat.CreateFromJSON(jsonTextFileStats.text); + levelStat.JsonName = jsonTextFileStats.name; levelStatsMap[levelStat.JsonName] = levelStat; } diff --git a/Assets/Scripts/Player.cs b/Assets/Scripts/Player.cs index 473bd9d..35e1acb 100644 --- a/Assets/Scripts/Player.cs +++ b/Assets/Scripts/Player.cs @@ -10,7 +10,6 @@ public class Player : MonoBehaviour public LevelsLoader levelsLoader; public bool isColliding = true; - public AudioSource audioSource; private bool hasStarted = false; private bool canJump = true; @@ -18,10 +17,6 @@ public class Player : MonoBehaviour public void Start() { levelsLoader = GameObject.FindGameObjectWithTag("LevelsLoader").GetComponent(); - levelsLoader.IncreaseTotalAttempts(); - - audioSource.clip = Resources.Load(Path.Combine("Musics", levelsLoader.levelCurrent.musicName)); - audioSource.Play(); var mainModule = particle.main; mainModule.simulationSpace = ParticleSystemSimulationSpace.World; @@ -56,7 +51,6 @@ public class Player : MonoBehaviour } UpdateParticlePositionAndRotation(); - UpdateParticleSystemSpeed(); } private void Jump() @@ -84,12 +78,6 @@ public class Player : MonoBehaviour particle.transform.rotation = Quaternion.Euler(0, 0, 150.464f); } - private void UpdateParticleSystemSpeed() - { - var velocityOverLifetime = particle.velocityOverLifetime; - velocityOverLifetime.x = rigidBody.linearVelocity.x; - } - public void OnCollisionEnter2D(Collision2D collision) { isColliding = true; From f305cd6c1f23b2e434f512b507407484cd4cbd03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o=20LUDWIG?= Date: Mon, 3 Mar 2025 11:25:29 +0100 Subject: [PATCH 03/11] feat: handle dynamically the winner wall (#40) --- Assets/Resources/Levels/BackOnTrack.json | 14 +- Assets/Resources/Prefabs/WinnerWall.prefab | 136 +++++++++++++++++ .../Resources/Prefabs/WinnerWall.prefab.meta | 7 + Assets/Scenes/LevelScene.unity | 137 +----------------- Assets/Scripts/LevelLoader.cs | 80 +++++----- 5 files changed, 200 insertions(+), 174 deletions(-) create mode 100644 Assets/Resources/Prefabs/WinnerWall.prefab create mode 100644 Assets/Resources/Prefabs/WinnerWall.prefab.meta diff --git a/Assets/Resources/Levels/BackOnTrack.json b/Assets/Resources/Levels/BackOnTrack.json index 38089e0..7026e1f 100644 --- a/Assets/Resources/Levels/BackOnTrack.json +++ b/Assets/Resources/Levels/BackOnTrack.json @@ -1,5 +1,17 @@ { "name": "Back on Track", "musicName": "BackOnTrack", - "order": 2 + "order": 2, + "elements": [ + { + "type": 1, + "x": -6.684000015258789, + "y": -2.8970000743865969 + }, + { + "type": 1, + "x": -3.059999942779541, + "y": -2.930000066757202 + } + ] } diff --git a/Assets/Resources/Prefabs/WinnerWall.prefab b/Assets/Resources/Prefabs/WinnerWall.prefab new file mode 100644 index 0000000..49f1812 --- /dev/null +++ b/Assets/Resources/Prefabs/WinnerWall.prefab @@ -0,0 +1,136 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &230614802678176698 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6101474696094060898} + - component: {fileID: 2586486806421690950} + - component: {fileID: 4807228918295367566} + m_Layer: 0 + m_Name: WinnerWall + m_TagString: Win + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6101474696094060898 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 230614802678176698} + serializedVersion: 2 + m_LocalRotation: {x: -0.027460787, y: -0.027460786, z: 0.70657337, w: 0.70657337} + m_LocalPosition: {x: 40.61, y: -5.69, z: 0} + m_LocalScale: {x: 10, y: 0.8581, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: -4.451, z: 90} +--- !u!212 &2586486806421690950 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 230614802678176698} + 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: -2257217325195158302, guid: a192a62ef32304b4182909c80a175f39, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 5.12, y: 5.12} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 +--- !u!61 &4807228918295367566 +BoxCollider2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 230614802678176698} + 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.5, y: 0.5} + oldSize: {x: 5.12, y: 5.12} + newSize: {x: 5.12, y: 5.12} + adaptiveTilingThreshold: 0.5 + drawMode: 0 + adaptiveTiling: 0 + m_AutoTiling: 0 + m_Size: {x: 5.12, y: 5.12} + m_EdgeRadius: 0 diff --git a/Assets/Resources/Prefabs/WinnerWall.prefab.meta b/Assets/Resources/Prefabs/WinnerWall.prefab.meta new file mode 100644 index 0000000..919ee8c --- /dev/null +++ b/Assets/Resources/Prefabs/WinnerWall.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: b4ab610574c1d61afb90b28c5d673fe1 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/LevelScene.unity b/Assets/Scenes/LevelScene.unity index 9ce63cb..4e45f20 100644 --- a/Assets/Scenes/LevelScene.unity +++ b/Assets/Scenes/LevelScene.unity @@ -5493,6 +5493,8 @@ MonoBehaviour: m_EditorClassIdentifier: levelsLoader: {fileID: 0} audioSource: {fileID: 1999482188} + obstaclePrefab: {fileID: 0} + spikePrefab: {fileID: 0} --- !u!4 &1999482187 Transform: m_ObjectHideFlags: 0 @@ -5605,140 +5607,6 @@ AudioSource: m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 ---- !u!1 &2062107675 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2062107678} - - component: {fileID: 2062107677} - - component: {fileID: 2062107676} - m_Layer: 0 - m_Name: WinnerWall - m_TagString: Win - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!61 &2062107676 -BoxCollider2D: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2062107675} - 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.5, y: 0.5} - oldSize: {x: 5.12, y: 5.12} - newSize: {x: 5.12, y: 5.12} - adaptiveTilingThreshold: 0.5 - drawMode: 0 - adaptiveTiling: 0 - m_AutoTiling: 0 - m_Size: {x: 5.12, y: 5.12} - m_EdgeRadius: 0 ---- !u!212 &2062107677 -SpriteRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2062107675} - 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: -2257217325195158302, guid: a192a62ef32304b4182909c80a175f39, type: 3} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_FlipX: 0 - m_FlipY: 0 - m_DrawMode: 0 - m_Size: {x: 5.12, y: 5.12} - m_AdaptiveModeThreshold: 0.5 - m_SpriteTileMode: 0 - m_WasSpriteAssigned: 1 - m_MaskInteraction: 0 - m_SpriteSortPoint: 0 ---- !u!4 &2062107678 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2062107675} - serializedVersion: 2 - m_LocalRotation: {x: -0.027460787, y: -0.027460786, z: 0.70657337, w: 0.70657337} - m_LocalPosition: {x: 40.61, y: -5.69, z: 0} - m_LocalScale: {x: 10, y: 0.8581, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: -4.451, z: 90} --- !u!1660057539 &9223372036854775807 SceneRoots: m_ObjectHideFlags: 0 @@ -5746,5 +5614,4 @@ SceneRoots: - {fileID: 519420032} - {fileID: 1267397458} - {fileID: 1235900594} - - {fileID: 2062107678} - {fileID: 1999482187} diff --git a/Assets/Scripts/LevelLoader.cs b/Assets/Scripts/LevelLoader.cs index 35e590d..b07d002 100644 --- a/Assets/Scripts/LevelLoader.cs +++ b/Assets/Scripts/LevelLoader.cs @@ -7,51 +7,55 @@ public class LevelLoader : MonoBehaviour public AudioSource audioSource; public GameObject obstaclePrefab; public GameObject spikePrefab; + public GameObject winnerWall; - void Start() + private GameObject GetPrefab(LevelElement.Type type) + { + if (type == LevelElement.Type.Spike) + { + return spikePrefab; + } + return obstaclePrefab; + } + + private void LoadAudio() + { + audioSource.clip = Resources.Load(Path.Combine("Musics", levelsLoader.levelCurrent.musicName)); + audioSource.Play(); + } + + private void LoadElements() + { + obstaclePrefab = Resources.Load("Prefabs/Obstacle"); + spikePrefab = Resources.Load("Prefabs/Spike"); + winnerWall = Resources.Load("Prefabs/WinnerWall"); + + Level current = levelsLoader.levelCurrent; + foreach (var element in current.elements) + { + GameObject prefab = GetPrefab(element.type); + Instantiate(prefab, new Vector3(element.x, element.y, 0), Quaternion.identity); + } + + LevelElement lastElement = current.elements[^1]; + float lastX = 15; + if (lastElement != null) + { + lastX += lastElement.x; + } + Instantiate(winnerWall, new Vector3(lastX, 0, 0), Quaternion.Euler(0, 0, 90)); + } + + public void Start() { levelsLoader = GameObject.FindGameObjectWithTag("LevelsLoader").GetComponent(); levelsLoader.IncreaseTotalAttempts(); - audioSource.clip = Resources.Load(Path.Combine("Musics", levelsLoader.levelCurrent.musicName)); - audioSource.Play(); - - obstaclePrefab = Resources.Load("Prefabs/Obstacle"); - spikePrefab = Resources.Load("Prefabs/Spike"); - - Level current = levelsLoader.levelCurrent; - // Debug.Log("Level: " + current.name); - // for (int i = 0; i < current.elements.Count; i++) - // { - // LevelElement element = current.elements[i]; - // Debug.Log("Element: " + element.type + " " + element.x + " " + element.y); - // } - - for (int index = 0; index < current.elements.Count; index++) - { - LevelElement element = current.elements[index]; - GameObject prefab = obstaclePrefab; - - if (element.type == LevelElement.Type.Spike) - { - prefab = spikePrefab; - } - - Instantiate(prefab, new Vector3(element.x, element.y, 0), Quaternion.identity); - } - - // // Obstacle - // // x=-6.684, y=-2.897, 0 - // // scale=0.96055, 0.2326, 1 - // Instantiate(obstaclePrefab, new Vector3(-6.684f, -2.897f, 0), Quaternion.identity); - - // // Spike - // // -3.06, -2.93 - // // scale=0.15, 0.15, 1 - // Instantiate(spikePrefab, new Vector3(-3.06f, -2.93f, 0), Quaternion.identity); + LoadAudio(); + LoadElements(); } - void Update() + public void Update() { } From 7fd8691033b58bfc48259cad23cf627fbc72c087 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o=20LUDWIG?= Date: Mon, 3 Mar 2025 11:55:22 +0100 Subject: [PATCH 04/11] refactor: simplify instantiate prefabs (#41) --- Assets/Resources/Levels/BackOnTrack.json | 4 ++-- Assets/Resources/Levels/StereoMadness.json | 4 ++-- Assets/Scripts/Level.cs | 8 +------- Assets/Scripts/LevelLoader.cs | 17 +++-------------- 4 files changed, 8 insertions(+), 25 deletions(-) diff --git a/Assets/Resources/Levels/BackOnTrack.json b/Assets/Resources/Levels/BackOnTrack.json index 7026e1f..61091f2 100644 --- a/Assets/Resources/Levels/BackOnTrack.json +++ b/Assets/Resources/Levels/BackOnTrack.json @@ -4,12 +4,12 @@ "order": 2, "elements": [ { - "type": 1, + "type": "Spike", "x": -6.684000015258789, "y": -2.8970000743865969 }, { - "type": 1, + "type": "Spike", "x": -3.059999942779541, "y": -2.930000066757202 } diff --git a/Assets/Resources/Levels/StereoMadness.json b/Assets/Resources/Levels/StereoMadness.json index 8156463..13c2eec 100644 --- a/Assets/Resources/Levels/StereoMadness.json +++ b/Assets/Resources/Levels/StereoMadness.json @@ -4,12 +4,12 @@ "order": 1, "elements": [ { - "type": 0, + "type": "Obstacle", "x": -6.684000015258789, "y": -2.8970000743865969 }, { - "type": 1, + "type": "Spike", "x": -3.059999942779541, "y": -2.930000066757202 } diff --git a/Assets/Scripts/Level.cs b/Assets/Scripts/Level.cs index 24e547b..635a3a7 100644 --- a/Assets/Scripts/Level.cs +++ b/Assets/Scripts/Level.cs @@ -6,13 +6,7 @@ using System.Runtime.Serialization; [System.Serializable] public class LevelElement { - public enum Type - { - Obstacle = 0, - Spike = 1 - } - - public Type type; + public string type; public float x; public float y; } diff --git a/Assets/Scripts/LevelLoader.cs b/Assets/Scripts/LevelLoader.cs index b07d002..4a564b3 100644 --- a/Assets/Scripts/LevelLoader.cs +++ b/Assets/Scripts/LevelLoader.cs @@ -5,17 +5,10 @@ public class LevelLoader : MonoBehaviour { public LevelsLoader levelsLoader; public AudioSource audioSource; - public GameObject obstaclePrefab; - public GameObject spikePrefab; - public GameObject winnerWall; - private GameObject GetPrefab(LevelElement.Type type) + private GameObject GetPrefab(string type) { - if (type == LevelElement.Type.Spike) - { - return spikePrefab; - } - return obstaclePrefab; + return Resources.Load("Prefabs/" + type); } private void LoadAudio() @@ -26,10 +19,6 @@ public class LevelLoader : MonoBehaviour private void LoadElements() { - obstaclePrefab = Resources.Load("Prefabs/Obstacle"); - spikePrefab = Resources.Load("Prefabs/Spike"); - winnerWall = Resources.Load("Prefabs/WinnerWall"); - Level current = levelsLoader.levelCurrent; foreach (var element in current.elements) { @@ -43,7 +32,7 @@ public class LevelLoader : MonoBehaviour { lastX += lastElement.x; } - Instantiate(winnerWall, new Vector3(lastX, 0, 0), Quaternion.Euler(0, 0, 90)); + Instantiate(GetPrefab("WinnerWall"), new Vector3(lastX, 0, 0), Quaternion.Euler(0, 0, 90)); } public void Start() From 7918d310b6450edef1269bc1fa784e649bbd7964 Mon Sep 17 00:00:00 2001 From: djelalb <122933761+djelalb@users.noreply.github.com> Date: Tue, 4 Mar 2025 08:54:58 +0100 Subject: [PATCH 05/11] feat: start of Stereo Madness level (#42) Co-authored-by: Djelal BOUDJI --- Assets/InGame/KillZoneImage.png | Bin 0 -> 7617 bytes Assets/InGame/KillZoneImage.png.meta | 143 +++++++++++++ Assets/Resources/Levels/StereoMadness.json | 154 +++++++++++++- Assets/Resources/Prefabs/KillZone.prefab | 136 ++++++++++++ ...tacle.prefab.meta => KillZone.prefab.meta} | 2 +- .../{Obstacle.prefab => ObstacleBloc.prefab} | 196 ++++++++--------- .../Prefabs/ObstacleBloc.prefab.meta | 7 + Assets/Resources/Prefabs/SmallSpike.prefab | 197 ++++++++++++++++++ .../Resources/Prefabs/SmallSpike.prefab.meta | 7 + Assets/Resources/Prefabs/Spike.prefab | 24 +-- Assets/Resources/Prefabs/Spike.prefab.meta | 2 +- Assets/Scenes/LevelScene.unity | 4 +- Assets/Scripts/Level.cs | 2 + Assets/Scripts/LevelLoader.cs | 8 +- 14 files changed, 761 insertions(+), 121 deletions(-) create mode 100644 Assets/InGame/KillZoneImage.png create mode 100644 Assets/InGame/KillZoneImage.png.meta create mode 100644 Assets/Resources/Prefabs/KillZone.prefab rename Assets/Resources/Prefabs/{Obstacle.prefab.meta => KillZone.prefab.meta} (74%) rename Assets/Resources/Prefabs/{Obstacle.prefab => ObstacleBloc.prefab} (83%) create mode 100644 Assets/Resources/Prefabs/ObstacleBloc.prefab.meta create mode 100644 Assets/Resources/Prefabs/SmallSpike.prefab create mode 100644 Assets/Resources/Prefabs/SmallSpike.prefab.meta diff --git a/Assets/InGame/KillZoneImage.png b/Assets/InGame/KillZoneImage.png new file mode 100644 index 0000000000000000000000000000000000000000..fdb7c1bc28057aa394eccf48b918f822379c0b8e GIT binary patch literal 7617 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 Gfc+1ex2GBa literal 0 HcmV?d00001 diff --git a/Assets/InGame/KillZoneImage.png.meta b/Assets/InGame/KillZoneImage.png.meta new file mode 100644 index 0000000..63cd1f1 --- /dev/null +++ b/Assets/InGame/KillZoneImage.png.meta @@ -0,0 +1,143 @@ +fileFormatVersion: 2 +guid: dd4610d7d9b8044408246e077691bc42 +TextureImporter: + internalIDToNameTable: + - first: + 213: -5560715151396007323 + second: obstacle_geometry_dash_0 + 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: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 2 + 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: 0 + swizzle: 50462976 + cookieLightType: 0 + 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: 0 + - 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: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: obstacle_geometry_dash_0 + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 177 + height: 53 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 56298ef180f54d2b0800000000000000 + internalID: -5560715151396007323 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: + obstacle_geometry_dash_0: -5560715151396007323 + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Levels/StereoMadness.json b/Assets/Resources/Levels/StereoMadness.json index 13c2eec..352fd01 100644 --- a/Assets/Resources/Levels/StereoMadness.json +++ b/Assets/Resources/Levels/StereoMadness.json @@ -4,14 +4,158 @@ "order": 1, "elements": [ { - "type": "Obstacle", - "x": -6.684000015258789, - "y": -2.8970000743865969 + "type": "Spike", + "x": -9.0, + "y": -3.200000047683716, + "scaleX": -1.0, + "scaleY": -1.0 + }, + { + "type": "SmallSpike", + "x": 0.20000004768371583, + "y": -3.4000000953674318, + "scaleX": -1.0, + "scaleY": -1.0 }, { "type": "Spike", - "x": -3.059999942779541, - "y": -2.930000066757202 + "x": 1.0, + "y": -3.200000047683716, + "scaleX": -1.0, + "scaleY": -1.0 + }, + { + "type": "Spike", + "x": 7.0, + "y": -3.200000047683716, + "scaleX": -1.0, + "scaleY": -1.0 + }, + { + "type": "Spike", + "x": 8.0, + "y": -3.200000047683716, + "scaleX": -1.0, + "scaleY": -1.0 + }, + { + "type": "ObstacleBloc", + "x": 9.0, + "y": -3.0, + "scaleX": -1.0, + "scaleY": -1.0 + }, + { + "type": "ObstacleBloc", + "x": 12.5, + "y": -3.0, + "scaleX": -1.0, + "scaleY": -1.0 + }, + { + "type": "ObstacleBloc", + "x": 12.5, + "y": -2.0, + "scaleX": -1.0, + "scaleY": -1.0 + }, + { + "type": "ObstacleBloc", + "x": 16.0, + "y": -3.0, + "scaleX": -1.0, + "scaleY": -1.0 + }, + { + "type": "ObstacleBloc", + "x": 16.0, + "y": -2.0, + "scaleX": -1.0, + "scaleY": -1.0 + }, + { + "type": "ObstacleBloc", + "x": 16.0, + "y": -1.0, + "scaleX": -1.0, + "scaleY": -1.0 + }, + { + "type": "Spike", + "x": 25.0, + "y": -3.200000047683716, + "scaleX": -1.0, + "scaleY": -1.0 + }, + { + "type": "Spike", + "x": 26.0, + "y": -3.200000047683716, + "scaleX": -1.0, + "scaleY": -1.0 + }, + { + "type": "KillZone", + "x": 42.0, + "y": -3.200000047683716, + "scaleX": -1.0, + "scaleY": -1.0 + }, + { + "type": "KillZone", + "x": 43.70000076293945, + "y": -3.200000047683716, + "scaleX": -1.0, + "scaleY": -1.0 + }, + { + "type": "ObstacleBloc", + "x": 36.0, + "y": -3.0, + "scaleX": 2.0, + "scaleY": -1.0 + }, + { + "type": "ObstacleBloc", + "x": 49.70000076293945, + "y": -3.0, + "scaleX": 2.0, + "scaleY": -1.0 + }, + { + "type": "Spike", + "x": 49.70000076293945, + "y": -2.200000047683716, + "scaleX": -1.0, + "scaleY": -1.0 + }, + { + "type": "KillZone", + "x": 55.70000076293945, + "y": -3.200000047683716, + "scaleX": -1.0, + "scaleY": -1.0 + }, + { + "type": "KillZone", + "x": 57.400001525878909, + "y": -3.200000047683716, + "scaleX": -1.0, + "scaleY": -1.0 + }, + { + "type": "ObstacleBloc", + "x": 63.400001525878909, + "y": -2.299999952316284, + "scaleX": 2.0, + "scaleY": 0.5 + }, + { + "type": "Spike", + "x": 63.400001525878909, + "y": -0.699999988079071, + "scaleX": -1.0, + "scaleY": -1.0 } ] } diff --git a/Assets/Resources/Prefabs/KillZone.prefab b/Assets/Resources/Prefabs/KillZone.prefab new file mode 100644 index 0000000..d86d480 --- /dev/null +++ b/Assets/Resources/Prefabs/KillZone.prefab @@ -0,0 +1,136 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &3303019787601773946 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8145151656722207896} + - component: {fileID: 8945696570255837577} + - component: {fileID: 6873087963452101195} + m_Layer: 0 + m_Name: KillZone + m_TagString: Kill + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8145151656722207896 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3303019787601773946} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -1.198476, y: -3.2, z: 0} + m_LocalScale: {x: 1, y: 1.2, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!212 &8945696570255837577 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3303019787601773946} + 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: -5560715151396007323, guid: dd4610d7d9b8044408246e077691bc42, 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.77, y: 0.53} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 +--- !u!61 &6873087963452101195 +BoxCollider2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3303019787601773946} + 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.5, y: 0.5} + oldSize: {x: 1.77, y: 0.53} + newSize: {x: 1.77, y: 0.53} + adaptiveTilingThreshold: 0.5 + drawMode: 0 + adaptiveTiling: 0 + m_AutoTiling: 0 + m_Size: {x: 1.77, y: 0.53} + m_EdgeRadius: 0 diff --git a/Assets/Resources/Prefabs/Obstacle.prefab.meta b/Assets/Resources/Prefabs/KillZone.prefab.meta similarity index 74% rename from Assets/Resources/Prefabs/Obstacle.prefab.meta rename to Assets/Resources/Prefabs/KillZone.prefab.meta index 1a82ed3..68ddea6 100644 --- a/Assets/Resources/Prefabs/Obstacle.prefab.meta +++ b/Assets/Resources/Prefabs/KillZone.prefab.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: ded5ba9868ed45d64adf56ff6f9f8d80 +guid: 1a584e4b0804402409437bd308422f32 PrefabImporter: externalObjects: {} userData: diff --git a/Assets/Resources/Prefabs/Obstacle.prefab b/Assets/Resources/Prefabs/ObstacleBloc.prefab similarity index 83% rename from Assets/Resources/Prefabs/Obstacle.prefab rename to Assets/Resources/Prefabs/ObstacleBloc.prefab index 10040ea..705e410 100644 --- a/Assets/Resources/Prefabs/Obstacle.prefab +++ b/Assets/Resources/Prefabs/ObstacleBloc.prefab @@ -1,6 +1,6 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: ---- !u!1 &4503133877144714992 +--- !u!1 &1790982024455392374 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -8,39 +8,39 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 5012884470156408499} - - component: {fileID: 8308996464851343268} + - component: {fileID: 8817250240787629228} + - component: {fileID: 2237815875453143941} m_Layer: 0 - m_Name: Obstacle + m_Name: ObstacleBloc m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &5012884470156408499 +--- !u!4 &8817250240787629228 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4503133877144714992} + m_GameObject: {fileID: 1790982024455392374} serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -6.684, y: -2.897, z: 0} - m_LocalScale: {x: 0.96055, y: 0.2326, z: 1} + m_LocalPosition: {x: -11.511677, y: -3.178352, z: 0} + m_LocalScale: {x: 0.2, y: 0.2, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 753406095052540359} - - {fileID: 3772212889498300441} + - {fileID: 8663662970111901296} + - {fileID: 6149087321496611903} m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!212 &8308996464851343268 +--- !u!212 &2237815875453143941 SpriteRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4503133877144714992} + m_GameObject: {fileID: 1790982024455392374} m_Enabled: 1 m_CastShadows: 0 m_ReceiveShadows: 0 @@ -89,7 +89,7 @@ SpriteRenderer: m_WasSpriteAssigned: 1 m_MaskInteraction: 0 m_SpriteSortPoint: 0 ---- !u!1 &5192728607521336247 +--- !u!1 &1882526919763485512 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -97,86 +97,8 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 753406095052540359} - - component: {fileID: 4745569766689628624} - m_Layer: 0 - m_Name: ObstacleSafer - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &753406095052540359 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5192728607521336247} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 5012884470156408499} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!61 &4745569766689628624 -BoxCollider2D: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5192728607521336247} - 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.004009247, y: 1.7748187} - 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: 5.121194, y: 1.4569769} - m_EdgeRadius: 0 ---- !u!1 &7427412648610411495 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3772212889498300441} - - component: {fileID: 8331097993010127203} + - component: {fileID: 6149087321496611903} + - component: {fileID: 7507909787795606721} m_Layer: 0 m_Name: ObstacleKiller m_TagString: Kill @@ -184,28 +106,28 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &3772212889498300441 +--- !u!4 &6149087321496611903 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7427412648610411495} + m_GameObject: {fileID: 1882526919763485512} serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 5012884470156408499} + m_Father: {fileID: 8817250240787629228} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!61 &8331097993010127203 +--- !u!61 &7507909787795606721 BoxCollider2D: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7427412648610411495} + m_GameObject: {fileID: 1882526919763485512} m_Enabled: 1 serializedVersion: 3 m_Density: 1 @@ -245,3 +167,81 @@ BoxCollider2D: m_AutoTiling: 0 m_Size: {x: 5.1211915, y: 2.672097} m_EdgeRadius: 0 +--- !u!1 &4179475610744468388 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8663662970111901296} + - component: {fileID: 168714429622599452} + m_Layer: 0 + m_Name: ObstacleSafer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8663662970111901296 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4179475610744468388} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8817250240787629228} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!61 &168714429622599452 +BoxCollider2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4179475610744468388} + 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.004009247, y: 1.7748187} + 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: 5.121194, y: 1.4569769} + m_EdgeRadius: 0 diff --git a/Assets/Resources/Prefabs/ObstacleBloc.prefab.meta b/Assets/Resources/Prefabs/ObstacleBloc.prefab.meta new file mode 100644 index 0000000..20bda69 --- /dev/null +++ b/Assets/Resources/Prefabs/ObstacleBloc.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 3b4ca5c432a93494a8a9e48bb0508895 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Prefabs/SmallSpike.prefab b/Assets/Resources/Prefabs/SmallSpike.prefab new file mode 100644 index 0000000..0b73e97 --- /dev/null +++ b/Assets/Resources/Prefabs/SmallSpike.prefab @@ -0,0 +1,197 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &5502732007395363677 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1401542451836727739} + - component: {fileID: 2559451938602690220} + - component: {fileID: 7239319486350951539} + m_Layer: 0 + m_Name: SmallSpike + m_TagString: Kill + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1401542451836727739 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5502732007395363677} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -6.8, y: -3.4, z: 0} + m_LocalScale: {x: 0.091284685, y: 0.024152879, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!212 &2559451938602690220 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5502732007395363677} + 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: 5761849248444590345, guid: 23159a719d47ecd4ea9ccf80790555c2, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 8.39, y: 9.62} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 +--- !u!60 &7239319486350951539 +PolygonCollider2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5502732007395363677} + 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.5, y: 0.5} + oldSize: {x: 8.39, y: 9.62} + newSize: {x: 8.39, y: 9.62} + adaptiveTilingThreshold: 0.5 + drawMode: 0 + adaptiveTiling: 0 + m_AutoTiling: 0 + m_Points: + m_Paths: + - - {x: 4.185, y: -3.99} + - {x: 4.185, y: -3.81} + - {x: 4.1549997, y: -3.7099998} + - {x: 4.085, y: -3.56} + - {x: 3.965, y: -3.29} + - {x: 3.665, y: -2.62} + - {x: 2.605, y: -0.24} + - {x: 1.5949999, y: 2.03} + - {x: 0.615, y: 4.23} + - {x: 0.445, y: 4.61} + - {x: 0.345, y: 4.74} + - {x: 0.24499999, y: 4.7799997} + - {x: 0.205, y: 4.79} + - {x: 0.055, y: 4.79} + - {x: -0.074999996, y: 4.73} + - {x: -0.145, y: 4.66} + - {x: -0.205, y: 4.5499997} + - {x: -0.53499997, y: 3.86} + - {x: -0.655, y: 3.61} + - {x: -0.755, y: 3.3999999} + - {x: -0.865, y: 3.1699998} + - {x: -0.865, y: 3.1499999} + - {x: -1.0849999, y: 2.71} + - {x: -1.295, y: 2.27} + - {x: -1.405, y: 2.04} + - {x: -1.505, y: 1.8299999} + - {x: -2.715, y: -0.7} + - {x: -2.715, y: -0.71999997} + - {x: -2.935, y: -1.16} + - {x: -3.0149999, y: -1.3299999} + - {x: -3.215, y: -1.75} + - {x: -3.335, y: -2} + - {x: -3.995, y: -3.3799999} + - {x: -4.125, y: -3.6499999} + - {x: -4.1549997, y: -3.6999998} + - {x: -4.185, y: -3.78} + - {x: -4.185, y: -3.98} + - {x: -4.085, y: -4.13} + - {x: -4.005, y: -4.17} + - {x: -3.915, y: -4.21} + - {x: -3.7549999, y: -4.2} + - {x: -3.735, y: -4.17} + - {x: -2.705, y: -4.17} + - {x: -2.695, y: -4.18} + - {x: -1.615, y: -4.18} + - {x: -1.605, y: -4.19} + - {x: -0.78499997, y: -4.19} + - {x: -0.775, y: -4.2} + - {x: 0.24499999, y: -4.2} + - {x: 0.255, y: -4.21} + - {x: 1.355, y: -4.21} + - {x: 1.365, y: -4.22} + - {x: 2.435, y: -4.22} + - {x: 2.445, y: -4.23} + - {x: 3.5049999, y: -4.23} + - {x: 3.5149999, y: -4.24} + - {x: 3.865, y: -4.24} + - {x: 3.955, y: -4.22} + - {x: 4.045, y: -4.18} + - {x: 4.1549997, y: -4.08} + m_UseDelaunayMesh: 0 diff --git a/Assets/Resources/Prefabs/SmallSpike.prefab.meta b/Assets/Resources/Prefabs/SmallSpike.prefab.meta new file mode 100644 index 0000000..4d3b933 --- /dev/null +++ b/Assets/Resources/Prefabs/SmallSpike.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 328a6917309b34a4dbc0113faad99599 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Prefabs/Spike.prefab b/Assets/Resources/Prefabs/Spike.prefab index d7a0044..e5b91b2 100644 --- a/Assets/Resources/Prefabs/Spike.prefab +++ b/Assets/Resources/Prefabs/Spike.prefab @@ -1,6 +1,6 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: ---- !u!1 &7777828896977100680 +--- !u!1 &3517635612602830264 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -8,9 +8,9 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 8115733835563602594} - - component: {fileID: 4668755637508042186} - - component: {fileID: 5986636574179340540} + - component: {fileID: 7215742951984187912} + - component: {fileID: 5356060014974583179} + - component: {fileID: 4888909563487497377} m_Layer: 0 m_Name: Spike m_TagString: Kill @@ -18,28 +18,28 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &8115733835563602594 +--- !u!4 &7215742951984187912 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7777828896977100680} + m_GameObject: {fileID: 3517635612602830264} serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -3.06, y: -2.93, z: 0} - m_LocalScale: {x: 0.15, y: 0.15, z: 1} + m_LocalPosition: {x: -12.5657, y: -3.1584, z: 0} + m_LocalScale: {x: 0.09923127, y: 0.074616805, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!212 &4668755637508042186 +--- !u!212 &5356060014974583179 SpriteRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7777828896977100680} + m_GameObject: {fileID: 3517635612602830264} m_Enabled: 1 m_CastShadows: 0 m_ReceiveShadows: 0 @@ -88,13 +88,13 @@ SpriteRenderer: m_WasSpriteAssigned: 1 m_MaskInteraction: 0 m_SpriteSortPoint: 0 ---- !u!60 &5986636574179340540 +--- !u!60 &4888909563487497377 PolygonCollider2D: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7777828896977100680} + m_GameObject: {fileID: 3517635612602830264} m_Enabled: 1 serializedVersion: 3 m_Density: 1 diff --git a/Assets/Resources/Prefabs/Spike.prefab.meta b/Assets/Resources/Prefabs/Spike.prefab.meta index c40cdf9..7209386 100644 --- a/Assets/Resources/Prefabs/Spike.prefab.meta +++ b/Assets/Resources/Prefabs/Spike.prefab.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 6106ddf26cd56b5ceb9034abdb003e42 +guid: 8de2a8abb160fad45bd4a9b9b8432900 PrefabImporter: externalObjects: {} userData: diff --git a/Assets/Scenes/LevelScene.unity b/Assets/Scenes/LevelScene.unity index 4e45f20..7af927b 100644 --- a/Assets/Scenes/LevelScene.unity +++ b/Assets/Scenes/LevelScene.unity @@ -5085,7 +5085,7 @@ Transform: m_GameObject: {fileID: 1011717286} serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.06, y: -0.01, z: 100} + m_LocalPosition: {x: 0.04, y: -0.09, z: 100} m_LocalScale: {x: 5.1, y: 5.1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] @@ -5493,8 +5493,6 @@ MonoBehaviour: m_EditorClassIdentifier: levelsLoader: {fileID: 0} audioSource: {fileID: 1999482188} - obstaclePrefab: {fileID: 0} - spikePrefab: {fileID: 0} --- !u!4 &1999482187 Transform: m_ObjectHideFlags: 0 diff --git a/Assets/Scripts/Level.cs b/Assets/Scripts/Level.cs index 635a3a7..1988aea 100644 --- a/Assets/Scripts/Level.cs +++ b/Assets/Scripts/Level.cs @@ -9,6 +9,8 @@ public class LevelElement public string type; public float x; public float y; + public float scaleX = -1; + public float scaleY = -1; } [System.Serializable] diff --git a/Assets/Scripts/LevelLoader.cs b/Assets/Scripts/LevelLoader.cs index 4a564b3..ee76bbe 100644 --- a/Assets/Scripts/LevelLoader.cs +++ b/Assets/Scripts/LevelLoader.cs @@ -23,7 +23,13 @@ public class LevelLoader : MonoBehaviour foreach (var element in current.elements) { GameObject prefab = GetPrefab(element.type); - Instantiate(prefab, new Vector3(element.x, element.y, 0), Quaternion.identity); + GameObject instance = Instantiate(prefab, new Vector3(element.x, element.y, 0), Quaternion.identity); + + Vector3 originalScale = instance.transform.localScale; + float newScaleX = element.scaleX > 0 ? element.scaleX : originalScale.x; + float newScaleY = element.scaleY > 0 ? element.scaleY : originalScale.y; + + instance.transform.localScale = new Vector3(newScaleX, newScaleY, originalScale.z); } LevelElement lastElement = current.elements[^1]; From 8c29e86ca659fc38ce1493ca64f0411f7c47c49f Mon Sep 17 00:00:00 2001 From: djelalb <122933761+djelalb@users.noreply.github.com> Date: Wed, 5 Mar 2025 16:55:48 +0100 Subject: [PATCH 06/11] feat: work in progress for Stereo Madness level (#43) Co-authored-by: Djelal BOUDJI --- Assets/Resources/Levels/StereoMadness.json | 67 +++++++-- ...stacleBloc.prefab => ObstacleBlock.prefab} | 49 ++++++- ....prefab.meta => ObstacleBlock.prefab.meta} | 2 +- .../Prefabs/SmallObstacleBlock.prefab | 136 ++++++++++++++++++ .../Prefabs/SmallObstacleBlock.prefab.meta | 7 + Assets/Scripts/PlayerCamera.cs | 19 ++- 6 files changed, 266 insertions(+), 14 deletions(-) rename Assets/Resources/Prefabs/{ObstacleBloc.prefab => ObstacleBlock.prefab} (84%) rename Assets/Resources/Prefabs/{ObstacleBloc.prefab.meta => ObstacleBlock.prefab.meta} (74%) create mode 100644 Assets/Resources/Prefabs/SmallObstacleBlock.prefab create mode 100644 Assets/Resources/Prefabs/SmallObstacleBlock.prefab.meta diff --git a/Assets/Resources/Levels/StereoMadness.json b/Assets/Resources/Levels/StereoMadness.json index 352fd01..a84bc2d 100644 --- a/Assets/Resources/Levels/StereoMadness.json +++ b/Assets/Resources/Levels/StereoMadness.json @@ -39,42 +39,56 @@ "scaleY": -1.0 }, { - "type": "ObstacleBloc", + "type": "ObstacleBlock", "x": 9.0, "y": -3.0, "scaleX": -1.0, "scaleY": -1.0 }, { - "type": "ObstacleBloc", + "type": "KillZone", + "x": 10.800000190734864, + "y": -3.200000047683716, + "scaleX": -1.0, + "scaleY": -1.0 + }, + { + "type": "ObstacleBlock", "x": 12.5, "y": -3.0, "scaleX": -1.0, "scaleY": -1.0 }, { - "type": "ObstacleBloc", + "type": "ObstacleBlock", "x": 12.5, "y": -2.0, "scaleX": -1.0, "scaleY": -1.0 }, { - "type": "ObstacleBloc", + "type": "KillZone", + "x": 14.199999809265137, + "y": -3.200000047683716, + "scaleX": -1.0, + "scaleY": -1.0 + }, + { + "type": "ObstacleBlock", "x": 16.0, "y": -3.0, "scaleX": -1.0, "scaleY": -1.0 }, { - "type": "ObstacleBloc", + "type": "ObstacleBlock", "x": 16.0, "y": -2.0, "scaleX": -1.0, "scaleY": -1.0 }, { - "type": "ObstacleBloc", + "type": "ObstacleBlock", "x": 16.0, "y": -1.0, "scaleX": -1.0, @@ -109,14 +123,14 @@ "scaleY": -1.0 }, { - "type": "ObstacleBloc", + "type": "ObstacleBlock", "x": 36.0, "y": -3.0, "scaleX": 2.0, "scaleY": -1.0 }, { - "type": "ObstacleBloc", + "type": "ObstacleBlock", "x": 49.70000076293945, "y": -3.0, "scaleX": 2.0, @@ -144,7 +158,7 @@ "scaleY": -1.0 }, { - "type": "ObstacleBloc", + "type": "ObstacleBlock", "x": 63.400001525878909, "y": -2.299999952316284, "scaleX": 2.0, @@ -156,6 +170,41 @@ "y": -0.699999988079071, "scaleX": -1.0, "scaleY": -1.0 + }, + { + "type": "SmallObstacleBlock", + "x": 71.80000305175781, + "y": -0.10000000149011612, + "scaleX": -1.0, + "scaleY": -1.0 + }, + { + "type": "SmallObstacleBlock", + "x": 75.69999694824219, + "y": 1.399999976158142, + "scaleX": -1.0, + "scaleY": -1.0 + }, + { + "type": "SmallObstacleBlock", + "x": 79.5999984741211, + "y": 2.700000047683716, + "scaleX": -1.0, + "scaleY": -1.0 + }, + { + "type": "SmallObstacleBlock", + "x": 83.5, + "y": 4.0, + "scaleX": -1.0, + "scaleY": -1.0 + }, + { + "type": "SmallObstacleBlock", + "x": 87.4000015258789, + "y": 5.300000190734863, + "scaleX": -1.0, + "scaleY": -1.0 } ] } diff --git a/Assets/Resources/Prefabs/ObstacleBloc.prefab b/Assets/Resources/Prefabs/ObstacleBlock.prefab similarity index 84% rename from Assets/Resources/Prefabs/ObstacleBloc.prefab rename to Assets/Resources/Prefabs/ObstacleBlock.prefab index 705e410..07c1598 100644 --- a/Assets/Resources/Prefabs/ObstacleBloc.prefab +++ b/Assets/Resources/Prefabs/ObstacleBlock.prefab @@ -10,8 +10,9 @@ GameObject: m_Component: - component: {fileID: 8817250240787629228} - component: {fileID: 2237815875453143941} + - component: {fileID: 4992961836766527843} m_Layer: 0 - m_Name: ObstacleBloc + m_Name: ObstacleBlock m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -89,6 +90,52 @@ SpriteRenderer: m_WasSpriteAssigned: 1 m_MaskInteraction: 0 m_SpriteSortPoint: 0 +--- !u!61 &4992961836766527843 +BoxCollider2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1790982024455392374} + 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.5, y: 0.5} + oldSize: {x: 5.14, y: 5.14} + newSize: {x: 5.14, y: 5.14} + adaptiveTilingThreshold: 0.5 + drawMode: 0 + adaptiveTiling: 0 + m_AutoTiling: 0 + m_Size: {x: 5.14, y: 5.14} + m_EdgeRadius: 0 --- !u!1 &1882526919763485512 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Resources/Prefabs/ObstacleBloc.prefab.meta b/Assets/Resources/Prefabs/ObstacleBlock.prefab.meta similarity index 74% rename from Assets/Resources/Prefabs/ObstacleBloc.prefab.meta rename to Assets/Resources/Prefabs/ObstacleBlock.prefab.meta index 20bda69..a07f076 100644 --- a/Assets/Resources/Prefabs/ObstacleBloc.prefab.meta +++ b/Assets/Resources/Prefabs/ObstacleBlock.prefab.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 3b4ca5c432a93494a8a9e48bb0508895 +guid: dd285a9498603a54c96ad07ca4b71792 PrefabImporter: externalObjects: {} userData: diff --git a/Assets/Resources/Prefabs/SmallObstacleBlock.prefab b/Assets/Resources/Prefabs/SmallObstacleBlock.prefab new file mode 100644 index 0000000..fb5519a --- /dev/null +++ b/Assets/Resources/Prefabs/SmallObstacleBlock.prefab @@ -0,0 +1,136 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &2519134808436458680 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2286968971515576394} + - component: {fileID: 3126039836224747003} + - component: {fileID: 7184260430798707271} + m_Layer: 0 + m_Name: SmallObstacleBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2286968971515576394 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2519134808436458680} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 12.002766, y: 3.1724167, z: 0} + m_LocalScale: {x: 0.2, y: 0.1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!212 &3126039836224747003 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2519134808436458680} + 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: 5988276385878164123, guid: f5e8531ea5d7ff8428546fe8683ebdb3, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 5.14, y: 5.14} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 +--- !u!61 &7184260430798707271 +BoxCollider2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2519134808436458680} + 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.5, y: 0.5} + oldSize: {x: 5.14, y: 5.14} + newSize: {x: 5.14, y: 5.14} + adaptiveTilingThreshold: 0.5 + drawMode: 0 + adaptiveTiling: 0 + m_AutoTiling: 0 + m_Size: {x: 5.14, y: 5.14} + m_EdgeRadius: 0 diff --git a/Assets/Resources/Prefabs/SmallObstacleBlock.prefab.meta b/Assets/Resources/Prefabs/SmallObstacleBlock.prefab.meta new file mode 100644 index 0000000..ae9bb3f --- /dev/null +++ b/Assets/Resources/Prefabs/SmallObstacleBlock.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f72a9121f3b777940967f68c64745002 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/PlayerCamera.cs b/Assets/Scripts/PlayerCamera.cs index 41fa162..870f927 100644 --- a/Assets/Scripts/PlayerCamera.cs +++ b/Assets/Scripts/PlayerCamera.cs @@ -3,10 +3,23 @@ using UnityEngine; public class PlayerCamera : MonoBehaviour { public GameObject playerObject; + public const float MIN_Y_FOLLOW = 2.0f; + private float initialY; - public void Update() + private void Start() { - transform.position = new Vector3(playerObject.transform.position.x, transform.position.y, transform.position.z); - // transform.position = new Vector3(player.transform.position.x, player.transform.position.y, transform.position.z); + initialY = transform.position.y; + } + + private void Update() + { + float targetY = initialY; + + if (playerObject.transform.position.y > MIN_Y_FOLLOW) + { + targetY = playerObject.transform.position.y; + } + + transform.position = new Vector3(playerObject.transform.position.x, targetY, transform.position.z); } } From 28e56eeab70390c04221aa73ab398c171f003160 Mon Sep 17 00:00:00 2001 From: djelalb <122933761+djelalb@users.noreply.github.com> Date: Mon, 17 Mar 2025 11:49:13 +0100 Subject: [PATCH 07/11] feat: rocket mode (#44) Co-authored-by: Djelal BOUDJI --- Assets/InGame/PortalsSkin.meta | 8 + .../InGame/PortalsSkin/CubePortalLabelled.png | Bin 0 -> 14411 bytes .../PortalsSkin/CubePortalLabelled.png.meta | 142 ++++++++++++++++ .../PortalsSkin/GravityPortalALabelled.png | Bin 0 -> 7699 bytes .../GravityPortalALabelled.png.meta | 142 ++++++++++++++++ .../PortalsSkin/GravityPortalBLabelled.png | Bin 0 -> 12235 bytes .../GravityPortalBLabelled.png.meta | 142 ++++++++++++++++ .../InGame/PortalsSkin/ShipPortalLabelled.png | Bin 0 -> 14562 bytes .../PortalsSkin/ShipPortalLabelled.png.meta | 142 ++++++++++++++++ Assets/InGame/Ship.png | Bin 0 -> 25733 bytes Assets/InGame/Ship.png.meta | 142 ++++++++++++++++ Assets/Resources/Levels/BackOnTrack.json | 8 +- Assets/Resources/Levels/Test.json | 6 + Assets/Resources/Levels/Test.json.meta | 7 + Assets/Resources/Prefabs/Portals.meta | 8 + .../Prefabs/Portals/CubePortal.prefab | 136 +++++++++++++++ .../Prefabs/Portals/CubePortal.prefab.meta | 7 + .../Prefabs/Portals/ShipPortal.prefab | 136 +++++++++++++++ .../Prefabs/Portals/ShipPortal.prefab.meta | 7 + Assets/Resources/Shapes.meta | 8 + Assets/Resources/Shapes/BaseSquare.png | Bin 0 -> 21322 bytes Assets/Resources/Shapes/BaseSquare.png.meta | 156 ++++++++++++++++++ Assets/Resources/Shapes/Ship.png | Bin 0 -> 25733 bytes Assets/Resources/Shapes/Ship.png.meta | 143 ++++++++++++++++ Assets/Scenes/LevelScene.unity | 5 - Assets/Scripts/GameMode.meta | 8 + Assets/Scripts/GameMode/IGameMode.cs | 8 + Assets/Scripts/GameMode/IGameMode.cs.meta | 2 + Assets/Scripts/GameMode/NormalGameMode.cs | 78 +++++++++ .../Scripts/GameMode/NormalGameMode.cs.meta | 2 + Assets/Scripts/GameMode/ShipGameMode.cs | 43 +++++ Assets/Scripts/GameMode/ShipGameMode.cs.meta | 2 + Assets/Scripts/Player.cs | 114 +++++-------- ProjectSettings/TagManager.asset | 3 + 34 files changed, 1528 insertions(+), 77 deletions(-) create mode 100644 Assets/InGame/PortalsSkin.meta create mode 100644 Assets/InGame/PortalsSkin/CubePortalLabelled.png create mode 100644 Assets/InGame/PortalsSkin/CubePortalLabelled.png.meta create mode 100644 Assets/InGame/PortalsSkin/GravityPortalALabelled.png create mode 100644 Assets/InGame/PortalsSkin/GravityPortalALabelled.png.meta create mode 100644 Assets/InGame/PortalsSkin/GravityPortalBLabelled.png create mode 100644 Assets/InGame/PortalsSkin/GravityPortalBLabelled.png.meta create mode 100644 Assets/InGame/PortalsSkin/ShipPortalLabelled.png create mode 100644 Assets/InGame/PortalsSkin/ShipPortalLabelled.png.meta create mode 100644 Assets/InGame/Ship.png create mode 100644 Assets/InGame/Ship.png.meta create mode 100644 Assets/Resources/Levels/Test.json create mode 100644 Assets/Resources/Levels/Test.json.meta create mode 100644 Assets/Resources/Prefabs/Portals.meta create mode 100644 Assets/Resources/Prefabs/Portals/CubePortal.prefab create mode 100644 Assets/Resources/Prefabs/Portals/CubePortal.prefab.meta create mode 100644 Assets/Resources/Prefabs/Portals/ShipPortal.prefab create mode 100644 Assets/Resources/Prefabs/Portals/ShipPortal.prefab.meta create mode 100644 Assets/Resources/Shapes.meta create mode 100644 Assets/Resources/Shapes/BaseSquare.png create mode 100644 Assets/Resources/Shapes/BaseSquare.png.meta create mode 100644 Assets/Resources/Shapes/Ship.png create mode 100644 Assets/Resources/Shapes/Ship.png.meta create mode 100644 Assets/Scripts/GameMode.meta create mode 100644 Assets/Scripts/GameMode/IGameMode.cs create mode 100644 Assets/Scripts/GameMode/IGameMode.cs.meta create mode 100644 Assets/Scripts/GameMode/NormalGameMode.cs create mode 100644 Assets/Scripts/GameMode/NormalGameMode.cs.meta create mode 100644 Assets/Scripts/GameMode/ShipGameMode.cs create mode 100644 Assets/Scripts/GameMode/ShipGameMode.cs.meta diff --git a/Assets/InGame/PortalsSkin.meta b/Assets/InGame/PortalsSkin.meta new file mode 100644 index 0000000..12271d9 --- /dev/null +++ b/Assets/InGame/PortalsSkin.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 91421876b7b414242b94823de55bec9c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/InGame/PortalsSkin/CubePortalLabelled.png b/Assets/InGame/PortalsSkin/CubePortalLabelled.png new file mode 100644 index 0000000000000000000000000000000000000000..3d6851ae23df0d3290ca259589e0581e09fdf6ea GIT binary patch literal 14411 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 literal 0 HcmV?d00001 diff --git a/Assets/InGame/PortalsSkin/CubePortalLabelled.png.meta b/Assets/InGame/PortalsSkin/CubePortalLabelled.png.meta new file mode 100644 index 0000000..a4ff3c9 --- /dev/null +++ b/Assets/InGame/PortalsSkin/CubePortalLabelled.png.meta @@ -0,0 +1,142 @@ +fileFormatVersion: 2 +guid: 2eeb2639073421549a957b59aa116784 +TextureImporter: + internalIDToNameTable: + - first: + 213: -799402021850825835 + second: CubePortalLabelled_0 + 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: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 2 + 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: 0 + swizzle: 50462976 + cookieLightType: 0 + 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: 0 + - 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: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: CubePortalLabelled_0 + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 60 + height: 106 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 59b3ad6b814f7e4f0800000000000000 + internalID: -799402021850825835 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/InGame/PortalsSkin/GravityPortalALabelled.png b/Assets/InGame/PortalsSkin/GravityPortalALabelled.png new file mode 100644 index 0000000000000000000000000000000000000000..a934d5a291e7aa5b2bd829109eb396902eacf66c GIT binary patch literal 7699 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�!a`Vf3v_8{!bY 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 c$ku3j^q*Dh~A^)mM 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 literal 0 HcmV?d00001 diff --git a/Assets/Resources/Shapes/BaseSquare.png.meta b/Assets/Resources/Shapes/BaseSquare.png.meta new file mode 100644 index 0000000..2d6b423 --- /dev/null +++ b/Assets/Resources/Shapes/BaseSquare.png.meta @@ -0,0 +1,156 @@ +fileFormatVersion: 2 +guid: 5cc2a94ea387e024a876d225efcfd7fb +TextureImporter: + internalIDToNameTable: + - first: + 213: -5986989983176976689 + second: BaseSquare_0 + 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: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 2 + 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: 0 + swizzle: 50462976 + cookieLightType: 0 + 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: 0 + - 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: 0 + - serializedVersion: 4 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: BaseSquare_0 + rect: + serializedVersion: 2 + x: 35 + y: 23 + width: 79 + height: 79 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: fc61aeaa450f9eca0800000000000000 + internalID: -5986989983176976689 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: + BaseSquare_0: -5986989983176976689 + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Shapes/Ship.png b/Assets/Resources/Shapes/Ship.png new file mode 100644 index 0000000000000000000000000000000000000000..7938dfe2f1ca53201125565c0a12adf1d4a439ad GIT binary patch literal 25733 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 c$ku3j^q*Dh~A^)mM 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 + Transform = transform; + Particle = GetComponentInChildren(); + SpriteRenderer = GetComponentInChildren(); + LevelsLoader = GameObject.FindGameObjectWithTag("LevelsLoader").GetComponent(); + } public void Start() { - levelsLoader = GameObject.FindGameObjectWithTag("LevelsLoader").GetComponent(); - - var mainModule = particle.main; + var mainModule = Particle.main; mainModule.simulationSpace = ParticleSystemSimulationSpace.World; - particle.transform.parent = null; + Particle.transform.parent = null; Invoke(nameof(EnableInput), 0.1f); + + CurrentGameMode = new NormalGameMode(); } private void EnableInput() { - hasStarted = true; + HasStarted = true; } public void Update() { - rigidBody.linearVelocity = new Vector2(8.6f, rigidBody.linearVelocity.y); - - if (hasStarted && isColliding && Input.GetKey(KeyCode.Space) && canJump) - { - Jump(); - } - - if (!IsJumping()) - { - AlignRotation(); - particle.gameObject.SetActive(true); - } - else - { - particle.gameObject.SetActive(false); - transform.Rotate(Vector3.back * 360 * Time.deltaTime); - } - - UpdateParticlePositionAndRotation(); - } - - private void Jump() - { - rigidBody.linearVelocity = new Vector2(rigidBody.linearVelocity.x, 0); - rigidBody.AddForce(Vector2.up * 26.6581f, ForceMode2D.Impulse); - levelsLoader.IncreaseTotalJumps(); - } - - private bool IsJumping() - { - return !isColliding; - } - - private void AlignRotation() - { - Vector3 rotation = transform.rotation.eulerAngles; - rotation.z = Mathf.Round(rotation.z / 90) * 90; - transform.rotation = Quaternion.Euler(rotation); - } - - private void UpdateParticlePositionAndRotation() - { - particle.transform.position = transform.position + new Vector3(-0.19f, -0.64f, -10); - particle.transform.rotation = Quaternion.Euler(0, 0, 150.464f); + CurrentGameMode.Update(this); } public void OnCollisionEnter2D(Collision2D collision) { - isColliding = true; - canJump = true; - - if (collision.gameObject.CompareTag("Kill")) - { - SceneManager.LoadScene(SceneManager.GetActiveScene().name); - } - - if (collision.gameObject.CompareTag("Win")) - { - SceneManager.LoadScene("HomeScene"); - } + CurrentGameMode.OnCollisionEnter(this, collision); } public void OnCollisionExit2D(Collision2D collision) { - isColliding = false; + CurrentGameMode.OnCollisionExit(this, collision); + } + + private void OnTriggerEnter2D(Collider2D collision) + { + if (collision.CompareTag("ShipPortal")) + { + SpriteRenderer.sprite = Resources.Load("Shapes/Ship"); + ChangeGameMode(new ShipGameMode()); + } + else if (collision.CompareTag("CubePortal")) + { + SpriteRenderer.sprite = Resources.Load("Shapes/BaseSquare"); + ChangeGameMode(new NormalGameMode()); + } + } + + public void ChangeGameMode(IGameMode newMode) + { + CurrentGameMode = newMode; } } diff --git a/ProjectSettings/TagManager.asset b/ProjectSettings/TagManager.asset index d9200ab..dc18c70 100644 --- a/ProjectSettings/TagManager.asset +++ b/ProjectSettings/TagManager.asset @@ -7,6 +7,9 @@ TagManager: - Kill - Win - LevelsLoader + - LevelLoader + - CubePortal + - ShipPortal layers: - Default - TransparentFX From a9bd2a0048c5fcbe566144dbfee97023806ccde2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o=20LUDWIG?= Date: Mon, 17 Mar 2025 11:49:34 +0100 Subject: [PATCH 08/11] feat: stats display (#45) --- Assets/Scenes/HomeScene.unity | 8 +- Assets/Scenes/SelectLevelScene.unity | 895 +++++++++--------- .../Scripts/LevelsSelect/LevelProgression.cs | 25 + .../LevelsSelect/LevelProgression.cs.meta | 2 + .../LevelsSelect/LevelTotalAttempts.cs | 28 + .../LevelsSelect/LevelTotalAttempts.cs.meta | 2 + .../Scripts/LevelsSelect/LevelTotalJumps.cs | 28 + .../LevelsSelect/LevelTotalJumps.cs.meta | 2 + 8 files changed, 526 insertions(+), 464 deletions(-) create mode 100644 Assets/Scripts/LevelsSelect/LevelProgression.cs create mode 100644 Assets/Scripts/LevelsSelect/LevelProgression.cs.meta create mode 100644 Assets/Scripts/LevelsSelect/LevelTotalAttempts.cs create mode 100644 Assets/Scripts/LevelsSelect/LevelTotalAttempts.cs.meta create mode 100644 Assets/Scripts/LevelsSelect/LevelTotalJumps.cs create mode 100644 Assets/Scripts/LevelsSelect/LevelTotalJumps.cs.meta diff --git a/Assets/Scenes/HomeScene.unity b/Assets/Scenes/HomeScene.unity index 9a3e794..ef891e5 100644 --- a/Assets/Scenes/HomeScene.unity +++ b/Assets/Scenes/HomeScene.unity @@ -506,7 +506,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} m_Name: m_EditorClassIdentifier: - m_UiScaleMode: 0 + m_UiScaleMode: 1 m_ReferencePixelsPerUnit: 100 m_ScaleFactor: 1 m_ReferenceResolution: {x: 800, y: 600} @@ -671,6 +671,12 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 4c3543e79f987af40bbd4a51c0a334c3, type: 3} m_Name: m_EditorClassIdentifier: + levels: [] + levelCurrent: + name: + musicName: + order: 0 + elements: [] --- !u!4 &1832520163 Transform: m_ObjectHideFlags: 0 diff --git a/Assets/Scenes/SelectLevelScene.unity b/Assets/Scenes/SelectLevelScene.unity index 728f5f7..bedb997 100644 --- a/Assets/Scenes/SelectLevelScene.unity +++ b/Assets/Scenes/SelectLevelScene.unity @@ -156,7 +156,7 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: 55} + m_AnchoredPosition: {x: 14.6, y: 47.8} m_SizeDelta: {x: 375, y: 110} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &1255457 @@ -265,7 +265,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 3617637b5b720115a8f1a856cb43f8a5, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!1 &91128433 +--- !u!1 &92159574 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -273,134 +273,92 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 91128434} - - component: {fileID: 91128436} - - component: {fileID: 91128435} - m_Layer: 5 - m_Name: NormalMode + - component: {fileID: 92159575} + - component: {fileID: 92159577} + - component: {fileID: 92159576} + - component: {fileID: 92159578} + m_Layer: 0 + m_Name: LevelTotalJumps m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!224 &91128434 +--- !u!224 &92159575 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 91128433} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} + m_GameObject: {fileID: 92159574} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -2.9565997} + m_LocalScale: {x: 0.41666663, y: 0.41666663, z: 0.41666663} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1153106989} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: -0.00001359, y: -46.539} - m_SizeDelta: {x: 152.4576, y: 25.094} + m_AnchoredPosition: {x: -0.000013351, y: -98.7} + m_SizeDelta: {x: 629.6868, y: 98.2373} m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &91128435 +--- !u!114 &92159576 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 91128433} + m_GameObject: {fileID: 92159574} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Color: {r: 0, g: 0, b: 0, a: 1} m_RaycastTarget: 1 m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_text: NORMAL MODE - m_isRightToLeft: 0 - m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} - m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} - m_fontSharedMaterials: [] - m_fontMaterial: {fileID: 0} - m_fontMaterials: [] - m_fontColor32: - serializedVersion: 2 - rgba: 4294967295 - m_fontColor: {r: 1, g: 1, b: 1, a: 1} - m_enableVertexGradient: 0 - m_colorMode: 3 - m_fontColorGradient: - topLeft: {r: 1, g: 1, b: 1, a: 1} - topRight: {r: 1, g: 1, b: 1, a: 1} - bottomLeft: {r: 1, g: 1, b: 1, a: 1} - bottomRight: {r: 1, g: 1, b: 1, a: 1} - m_fontColorGradientPreset: {fileID: 0} - m_spriteAsset: {fileID: 0} - m_tintAllSprites: 0 - m_StyleSheet: {fileID: 0} - m_TextStyleHashCode: -1183493901 - m_overrideHtmlColors: 0 - m_faceColor: - serializedVersion: 2 - rgba: 4294967295 - m_fontSize: 18 - m_fontSizeBase: 18 - m_fontWeight: 400 - m_enableAutoSizing: 0 - m_fontSizeMin: 18 - m_fontSizeMax: 72 - m_fontStyle: 1 - m_HorizontalAlignment: 1 - m_VerticalAlignment: 256 - m_textAlignment: 65535 - m_characterSpacing: 0 - m_wordSpacing: 0 - m_lineSpacing: 0 - m_lineSpacingMax: 0 - m_paragraphSpacing: 0 - m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 - m_wordWrappingRatios: 0.4 - m_overflowMode: 0 - m_linkedTextComponent: {fileID: 0} - parentLinkedComponent: {fileID: 0} - m_enableKerning: 0 - m_ActiveFontFeatures: 6e72656b - m_enableExtraPadding: 0 - checkPaddingRequired: 0 - m_isRichText: 1 - m_EmojiFallbackSupport: 1 - m_parseCtrlCharacters: 1 - m_isOrthographic: 1 - m_isCullingEnabled: 0 - m_horizontalMapping: 0 - m_verticalMapping: 0 - m_uvLineOffset: 0 - m_geometrySortingOrder: 0 - m_IsTextObjectScaleStatic: 0 - m_VertexBufferAutoSizeReduction: 0 - m_useMaxVisibleDescender: 1 - m_pageToDisplay: 1 - m_margin: {x: 0, y: 0, z: 0, w: 0} - m_isUsingLegacyAnimationComponent: 0 - m_isVolumetricText: 0 - m_hasFontAssetChanged: 0 - m_baseMaterial: {fileID: 0} - m_maskOffset: {x: 0, y: 0, z: 0, w: 0} ---- !u!222 &91128436 + m_FontData: + m_Font: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, type: 3} + m_FontSize: 56 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 56 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'Total Jumps:' +--- !u!222 &92159577 CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 91128433} + m_GameObject: {fileID: 92159574} m_CullTransparentMesh: 1 +--- !u!114 &92159578 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 92159574} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 90096cf0341a3ac178de4db506d4205c, type: 3} + m_Name: + m_EditorClassIdentifier: + levelTotalJumpsText: {fileID: 92159576} + levelsLoader: {fileID: 0} --- !u!1 &253164520 GameObject: m_ObjectHideFlags: 0 @@ -616,6 +574,175 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &633505916 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 633505917} + - component: {fileID: 633505919} + - component: {fileID: 633505918} + m_Layer: 5 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &633505917 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 633505916} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1153106989} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0.00012207031, y: 0.000061035156} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &633505918 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 633505916} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: -5548395039409485977, guid: ecd79b659cb6568498b28bf44ff6074b, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &633505919 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 633505916} + m_CullTransparentMesh: 1 +--- !u!1 &760653958 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 760653959} + - component: {fileID: 760653961} + - component: {fileID: 760653960} + - component: {fileID: 760653962} + m_Layer: 0 + m_Name: LevelTotalAttempts + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &760653959 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 760653958} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -2.9565997} + m_LocalScale: {x: 0.41666663, y: 0.41666663, z: 0.41666663} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1153106989} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -22.8, y: -49.119} + m_SizeDelta: {x: 629.6868, y: 98.2373} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &760653960 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 760653958} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, type: 3} + m_FontSize: 56 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 56 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'Total Attempts:' +--- !u!222 &760653961 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 760653958} + m_CullTransparentMesh: 1 +--- !u!114 &760653962 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 760653958} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c2e1b06afdba22e2e801e20c56a99a30, type: 3} + m_Name: + m_EditorClassIdentifier: + levelTotalAttemptsText: {fileID: 760653960} + levelsLoader: {fileID: 0} --- !u!1 &954359120 GameObject: m_ObjectHideFlags: 0 @@ -708,8 +835,8 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: b9d2aa88c034d40f187d6ff84705da65, type: 3} m_Name: m_EditorClassIdentifier: - levelsLoader: {fileID: 0} levelNameText: {fileID: 954359124} + levelsLoader: {fileID: 0} --- !u!1 &976210033 GameObject: m_ObjectHideFlags: 0 @@ -747,7 +874,7 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: -369.9035, y: 0} + m_AnchoredPosition: {x: -292.6, y: 47.8} m_SizeDelta: {x: 114.9513, y: 51.8448} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &976210035 @@ -856,138 +983,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 2c53cba3260b30d02b79e69a3198546c, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!1 &1094616661 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1094616662} - - component: {fileID: 1094616665} - - component: {fileID: 1094616664} - - component: {fileID: 1094616663} - m_Layer: 5 - m_Name: LevelStats - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &1094616662 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1094616661} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1153106989} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 390, y: 150} - m_SizeDelta: {x: 30, y: 30} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &1094616663 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1094616661} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 3 - m_WrapAround: 0 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_SelectedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_SelectedTrigger: Selected - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 1094616664} - m_OnClick: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 0} - m_TargetAssemblyTypeName: SelectLevelMenu, Assembly-CSharp - m_MethodName: LevelStatsBtn - m_Mode: 1 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 ---- !u!114 &1094616664 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1094616661} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 6693083200273925831, guid: 4cc2ad05a74922248a49910d3aaa5442, type: 3} - m_Type: 0 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!222 &1094616665 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1094616661} - m_CullTransparentMesh: 1 + levelsLoader: {fileID: 0} --- !u!1 &1099679056 GameObject: m_ObjectHideFlags: 0 @@ -1024,7 +1020,7 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: -180} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: -390, y: 150} + m_AnchoredPosition: {x: -357.4, y: 152.4} m_SizeDelta: {x: 50, y: 50} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &1099679058 @@ -1164,14 +1160,15 @@ RectTransform: m_LocalScale: {x: 0, y: 0, z: 0} m_ConstrainProportionsScale: 0 m_Children: + - {fileID: 633505917} - {fileID: 1255456} - {fileID: 1099679057} - {fileID: 976210034} - {fileID: 1364527282} - - {fileID: 1094616662} - - {fileID: 91128434} - - {fileID: 1174740938} - m_Father: {fileID: 1170341695} + - {fileID: 760653959} + - {fileID: 92159575} + - {fileID: 1571276505} + m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -1207,7 +1204,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} m_Name: m_EditorClassIdentifier: - m_UiScaleMode: 0 + m_UiScaleMode: 1 m_ReferencePixelsPerUnit: 100 m_ScaleFactor: 1 m_ReferenceResolution: {x: 800, y: 600} @@ -1241,235 +1238,6 @@ Canvas: m_SortingLayerID: 0 m_SortingOrder: 0 m_TargetDisplay: 0 ---- !u!1 &1170341692 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1170341695} - - component: {fileID: 1170341694} - - component: {fileID: 1170341693} - m_Layer: 0 - m_Name: Main Camera - m_TagString: LevelLoader - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!81 &1170341693 -AudioListener: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1170341692} - m_Enabled: 1 ---- !u!20 &1170341694 -Camera: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1170341692} - 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 &1170341695 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1170341692} - 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: - - {fileID: 1153106989} - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1174740937 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1174740938} - - component: {fileID: 1174740940} - - component: {fileID: 1174740939} - m_Layer: 5 - m_Name: PracticeMode - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &1174740938 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1174740937} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1153106989} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: -0.00001359, y: -103.54} - m_SizeDelta: {x: 166.0412, y: 25.094} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &1174740939 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1174740937} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_text: PRACTICE MODE - m_isRightToLeft: 0 - m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} - m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} - m_fontSharedMaterials: [] - m_fontMaterial: {fileID: 0} - m_fontMaterials: [] - m_fontColor32: - serializedVersion: 2 - rgba: 4294967295 - m_fontColor: {r: 1, g: 1, b: 1, a: 1} - m_enableVertexGradient: 0 - m_colorMode: 3 - m_fontColorGradient: - topLeft: {r: 1, g: 1, b: 1, a: 1} - topRight: {r: 1, g: 1, b: 1, a: 1} - bottomLeft: {r: 1, g: 1, b: 1, a: 1} - bottomRight: {r: 1, g: 1, b: 1, a: 1} - m_fontColorGradientPreset: {fileID: 0} - m_spriteAsset: {fileID: 0} - m_tintAllSprites: 0 - m_StyleSheet: {fileID: 0} - m_TextStyleHashCode: -1183493901 - m_overrideHtmlColors: 0 - m_faceColor: - serializedVersion: 2 - rgba: 4294967295 - m_fontSize: 18 - m_fontSizeBase: 18 - m_fontWeight: 400 - m_enableAutoSizing: 0 - m_fontSizeMin: 18 - m_fontSizeMax: 72 - m_fontStyle: 1 - m_HorizontalAlignment: 1 - m_VerticalAlignment: 256 - m_textAlignment: 65535 - m_characterSpacing: 0 - m_wordSpacing: 0 - m_lineSpacing: 0 - m_lineSpacingMax: 0 - m_paragraphSpacing: 0 - m_charWidthMaxAdj: 0 - m_TextWrappingMode: 1 - m_wordWrappingRatios: 0.4 - m_overflowMode: 0 - m_linkedTextComponent: {fileID: 0} - parentLinkedComponent: {fileID: 0} - m_enableKerning: 0 - m_ActiveFontFeatures: 6e72656b - m_enableExtraPadding: 0 - checkPaddingRequired: 0 - m_isRichText: 1 - m_EmojiFallbackSupport: 1 - m_parseCtrlCharacters: 1 - m_isOrthographic: 1 - m_isCullingEnabled: 0 - m_horizontalMapping: 0 - m_verticalMapping: 0 - m_uvLineOffset: 0 - m_geometrySortingOrder: 0 - m_IsTextObjectScaleStatic: 0 - m_VertexBufferAutoSizeReduction: 0 - m_useMaxVisibleDescender: 1 - m_pageToDisplay: 1 - m_margin: {x: 0, y: 0, z: 0, w: 0} - m_isUsingLegacyAnimationComponent: 0 - m_isVolumetricText: 0 - m_hasFontAssetChanged: 0 - m_baseMaterial: {fileID: 0} - m_maskOffset: {x: 0, y: 0, z: 0, w: 0} ---- !u!222 &1174740940 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1174740937} - m_CullTransparentMesh: 1 --- !u!1 &1228295457 GameObject: m_ObjectHideFlags: 0 @@ -1643,8 +1411,8 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 389, y: 0} - m_SizeDelta: {x: 76.7583, y: 51.8448} + m_AnchoredPosition: {x: 320, y: 47.8} + m_SizeDelta: {x: 114.95, y: 51.8448} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &1364527283 MonoBehaviour: @@ -1752,9 +1520,210 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: c34ef065650ba0802be580828cc0d474, type: 3} m_Name: m_EditorClassIdentifier: + levelsLoader: {fileID: 0} +--- !u!1 &1571276504 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1571276505} + - component: {fileID: 1571276507} + - component: {fileID: 1571276506} + - component: {fileID: 1571276508} + m_Layer: 0 + m_Name: LevelProgression + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1571276505 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1571276504} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -2.9565997} + m_LocalScale: {x: 0.41666663, y: 0.41666663, z: 0.41666663} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1153106989} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -0.000013351, y: -147.36} + m_SizeDelta: {x: 629.6868, y: 98.2373} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1571276506 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1571276504} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, type: 3} + m_FontSize: 56 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 56 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'Progression:' +--- !u!222 &1571276507 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1571276504} + m_CullTransparentMesh: 1 +--- !u!114 &1571276508 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1571276504} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f53ed5a09d2704999b0f112382f62309, type: 3} + m_Name: + m_EditorClassIdentifier: + levelProgressionText: {fileID: 1571276506} + levelsLoader: {fileID: 0} +--- !u!1 &1975177171 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1975177175} + - component: {fileID: 1975177174} + - component: {fileID: 1975177173} + - component: {fileID: 1975177172} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1975177172 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1975177171} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a1cd6b406f139414086355a222af717e, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!81 &1975177173 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1975177171} + m_Enabled: 1 +--- !u!20 &1975177174 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1975177171} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 4 + 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 &1975177175 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1975177171} + 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!1660057539 &9223372036854775807 SceneRoots: m_ObjectHideFlags: 0 m_Roots: - - {fileID: 1170341695} + - {fileID: 1975177175} + - {fileID: 1153106989} - {fileID: 276417674} diff --git a/Assets/Scripts/LevelsSelect/LevelProgression.cs b/Assets/Scripts/LevelsSelect/LevelProgression.cs new file mode 100644 index 0000000..989ca26 --- /dev/null +++ b/Assets/Scripts/LevelsSelect/LevelProgression.cs @@ -0,0 +1,25 @@ +using UnityEngine; +using UnityEngine.UI; + +public class LevelProgression : MonoBehaviour +{ + public Text levelProgressionText; + + public LevelsLoader levelsLoader; + + private string GetText() + { + return "Progression: "; + } + + public void Start() + { + levelsLoader = GameObject.FindGameObjectWithTag("LevelsLoader").GetComponent(); + levelProgressionText.text = GetText(); + } + + public void Update() + { + levelProgressionText.text = GetText(); + } +} diff --git a/Assets/Scripts/LevelsSelect/LevelProgression.cs.meta b/Assets/Scripts/LevelsSelect/LevelProgression.cs.meta new file mode 100644 index 0000000..5d780cf --- /dev/null +++ b/Assets/Scripts/LevelsSelect/LevelProgression.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: f53ed5a09d2704999b0f112382f62309 \ No newline at end of file diff --git a/Assets/Scripts/LevelsSelect/LevelTotalAttempts.cs b/Assets/Scripts/LevelsSelect/LevelTotalAttempts.cs new file mode 100644 index 0000000..d10aee8 --- /dev/null +++ b/Assets/Scripts/LevelsSelect/LevelTotalAttempts.cs @@ -0,0 +1,28 @@ +using System; +using UnityEngine; +using UnityEngine.UI; + +public class LevelTotalAttempts : MonoBehaviour +{ + public Text levelTotalAttemptsText; + + public LevelsLoader levelsLoader; + + private string GetText() + { + int number = levelsLoader.levelCurrent.TotalAttempts; + FormattableString message = $"{number:N0}"; + return "Total Attempts: " + FormattableString.Invariant(message); + } + + public void Start() + { + levelsLoader = GameObject.FindGameObjectWithTag("LevelsLoader").GetComponent(); + levelTotalAttemptsText.text = GetText(); + } + + public void Update() + { + levelTotalAttemptsText.text = GetText(); + } +} diff --git a/Assets/Scripts/LevelsSelect/LevelTotalAttempts.cs.meta b/Assets/Scripts/LevelsSelect/LevelTotalAttempts.cs.meta new file mode 100644 index 0000000..9b7540f --- /dev/null +++ b/Assets/Scripts/LevelsSelect/LevelTotalAttempts.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: c2e1b06afdba22e2e801e20c56a99a30 \ No newline at end of file diff --git a/Assets/Scripts/LevelsSelect/LevelTotalJumps.cs b/Assets/Scripts/LevelsSelect/LevelTotalJumps.cs new file mode 100644 index 0000000..b3b73c0 --- /dev/null +++ b/Assets/Scripts/LevelsSelect/LevelTotalJumps.cs @@ -0,0 +1,28 @@ +using System; +using UnityEngine; +using UnityEngine.UI; + +public class LevelTotalJumps : MonoBehaviour +{ + public Text levelTotalJumpsText; + + public LevelsLoader levelsLoader; + + private string GetText() + { + int number = levelsLoader.levelCurrent.TotalJumps; + FormattableString message = $"{number:N0}"; + return "Total Jumps: " + FormattableString.Invariant(message); + } + + public void Start() + { + levelsLoader = GameObject.FindGameObjectWithTag("LevelsLoader").GetComponent(); + levelTotalJumpsText.text = GetText(); + } + + public void Update() + { + levelTotalJumpsText.text = GetText(); + } +} diff --git a/Assets/Scripts/LevelsSelect/LevelTotalJumps.cs.meta b/Assets/Scripts/LevelsSelect/LevelTotalJumps.cs.meta new file mode 100644 index 0000000..19842c1 --- /dev/null +++ b/Assets/Scripts/LevelsSelect/LevelTotalJumps.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 90096cf0341a3ac178de4db506d4205c \ No newline at end of file From 872772d3f07df9f2621d0912749946bd4be02556 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o=20LUDWIG?= Date: Mon, 17 Mar 2025 18:28:27 +0100 Subject: [PATCH 09/11] feat: level progression (#46) --- .../PortalsSkin/CubePortalLabelled.png.meta | 16 +- .../GravityPortalALabelled.png.meta | 16 +- .../GravityPortalBLabelled.png.meta | 16 +- .../PortalsSkin/ShipPortalLabelled.png.meta | 16 +- Assets/InGame/Ship.png.meta | 16 +- Assets/Resources/Levels/Test.json | 6 - Assets/Resources/Levels/Test.json.meta | 7 - Assets/Scenes/LevelScene.unity | 1556 ++++++++++++++++- Assets/Scenes/SelectLevelScene.unity | 4 +- Assets/Scripts/Level.cs | 17 + Assets/Scripts/LevelLoader.cs | 14 +- Assets/Scripts/LevelStat.cs | 1 + Assets/Scripts/LevelsLoader.cs | 27 +- .../Scripts/LevelsSelect/LevelProgression.cs | 2 +- Assets/Scripts/PauseMenu.cs | 33 + Assets/Scripts/PauseMenu.cs.meta | 2 + Assets/Scripts/Player.cs | 1 + ProjectSettings/TagManager.asset | 2 - 18 files changed, 1717 insertions(+), 35 deletions(-) delete mode 100644 Assets/Resources/Levels/Test.json delete mode 100644 Assets/Resources/Levels/Test.json.meta create mode 100644 Assets/Scripts/PauseMenu.cs create mode 100644 Assets/Scripts/PauseMenu.cs.meta diff --git a/Assets/InGame/PortalsSkin/CubePortalLabelled.png.meta b/Assets/InGame/PortalsSkin/CubePortalLabelled.png.meta index a4ff3c9..b2f764d 100644 --- a/Assets/InGame/PortalsSkin/CubePortalLabelled.png.meta +++ b/Assets/InGame/PortalsSkin/CubePortalLabelled.png.meta @@ -96,6 +96,19 @@ TextureImporter: ignorePlatformSupport: 0 androidETC2FallbackOverride: 0 forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 spriteSheet: serializedVersion: 2 sprites: @@ -134,7 +147,8 @@ TextureImporter: secondaryTextures: [] spriteCustomMetadata: entries: [] - nameFileIdTable: {} + nameFileIdTable: + CubePortalLabelled_0: -799402021850825835 mipmapLimitGroupName: pSDRemoveMatte: 0 userData: diff --git a/Assets/InGame/PortalsSkin/GravityPortalALabelled.png.meta b/Assets/InGame/PortalsSkin/GravityPortalALabelled.png.meta index e85c852..b4b68c4 100644 --- a/Assets/InGame/PortalsSkin/GravityPortalALabelled.png.meta +++ b/Assets/InGame/PortalsSkin/GravityPortalALabelled.png.meta @@ -96,6 +96,19 @@ TextureImporter: ignorePlatformSupport: 0 androidETC2FallbackOverride: 0 forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 spriteSheet: serializedVersion: 2 sprites: @@ -134,7 +147,8 @@ TextureImporter: secondaryTextures: [] spriteCustomMetadata: entries: [] - nameFileIdTable: {} + nameFileIdTable: + GravityPortalALabelled_0: 4275758854765845916 mipmapLimitGroupName: pSDRemoveMatte: 0 userData: diff --git a/Assets/InGame/PortalsSkin/GravityPortalBLabelled.png.meta b/Assets/InGame/PortalsSkin/GravityPortalBLabelled.png.meta index a6096c0..82a064d 100644 --- a/Assets/InGame/PortalsSkin/GravityPortalBLabelled.png.meta +++ b/Assets/InGame/PortalsSkin/GravityPortalBLabelled.png.meta @@ -96,6 +96,19 @@ TextureImporter: ignorePlatformSupport: 0 androidETC2FallbackOverride: 0 forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 spriteSheet: serializedVersion: 2 sprites: @@ -134,7 +147,8 @@ TextureImporter: secondaryTextures: [] spriteCustomMetadata: entries: [] - nameFileIdTable: {} + nameFileIdTable: + GravityPortalBLabelled_0: -3032260323236093396 mipmapLimitGroupName: pSDRemoveMatte: 0 userData: diff --git a/Assets/InGame/PortalsSkin/ShipPortalLabelled.png.meta b/Assets/InGame/PortalsSkin/ShipPortalLabelled.png.meta index 3186745..3e4c3cb 100644 --- a/Assets/InGame/PortalsSkin/ShipPortalLabelled.png.meta +++ b/Assets/InGame/PortalsSkin/ShipPortalLabelled.png.meta @@ -96,6 +96,19 @@ TextureImporter: ignorePlatformSupport: 0 androidETC2FallbackOverride: 0 forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 spriteSheet: serializedVersion: 2 sprites: @@ -134,7 +147,8 @@ TextureImporter: secondaryTextures: [] spriteCustomMetadata: entries: [] - nameFileIdTable: {} + nameFileIdTable: + ShipPortalLabelled_0: -1834338360412052916 mipmapLimitGroupName: pSDRemoveMatte: 0 userData: diff --git a/Assets/InGame/Ship.png.meta b/Assets/InGame/Ship.png.meta index 5af83be..a4c5891 100644 --- a/Assets/InGame/Ship.png.meta +++ b/Assets/InGame/Ship.png.meta @@ -96,6 +96,19 @@ TextureImporter: ignorePlatformSupport: 0 androidETC2FallbackOverride: 0 forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 spriteSheet: serializedVersion: 2 sprites: @@ -134,7 +147,8 @@ TextureImporter: secondaryTextures: [] spriteCustomMetadata: entries: [] - nameFileIdTable: {} + nameFileIdTable: + Ship_0: -8820715720815460284 mipmapLimitGroupName: pSDRemoveMatte: 0 userData: diff --git a/Assets/Resources/Levels/Test.json b/Assets/Resources/Levels/Test.json deleted file mode 100644 index 3ff842f..0000000 --- a/Assets/Resources/Levels/Test.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "Test Level", - "musicName": "BackOnTrack", - "order": 3, - "elements": [] -} diff --git a/Assets/Resources/Levels/Test.json.meta b/Assets/Resources/Levels/Test.json.meta deleted file mode 100644 index e4df934..0000000 --- a/Assets/Resources/Levels/Test.json.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 43f43717f2648714d94051fe07bc3f15 -TextScriptImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scenes/LevelScene.unity b/Assets/Scenes/LevelScene.unity index 4a25efb..d24e94a 100644 --- a/Assets/Scenes/LevelScene.unity +++ b/Assets/Scenes/LevelScene.unity @@ -119,6 +119,161 @@ NavMeshSettings: debug: m_Flags: 0 m_NavMeshData: {fileID: 0} +--- !u!1 &245275147 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 245275148} + - component: {fileID: 245275150} + - component: {fileID: 245275149} + m_Layer: 5 + m_Name: Progression + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &245275148 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 245275147} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1371294550} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 18.8, y: 204} + m_SizeDelta: {x: -714.7935, y: -373.22357} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &245275149 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 245275147} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, type: 3} + m_FontSize: 28 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 0% +--- !u!222 &245275150 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 245275147} + m_CullTransparentMesh: 1 +--- !u!1 &487176671 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 487176672} + - component: {fileID: 487176674} + - component: {fileID: 487176673} + m_Layer: 5 + m_Name: Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &487176672 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 487176671} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2029501212} + m_Father: {fileID: 892725782} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -123.31501, y: -114.70998} + m_SizeDelta: {x: 662.6567, y: 383.29} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &487176673 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 487176671} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 0.92156863} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &487176674 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 487176671} + m_CullTransparentMesh: 1 --- !u!1 &519420028 GameObject: m_ObjectHideFlags: 0 @@ -226,6 +381,164 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: playerObject: {fileID: 1267397455} +--- !u!1 &521952199 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 521952202} + - component: {fileID: 521952201} + - component: {fileID: 521952200} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &521952200 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 521952199} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 01614664b831546d2ae94a42149d80ac, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SendPointerHoverToParent: 1 + m_MoveRepeatDelay: 0.5 + m_MoveRepeatRate: 0.1 + m_XRTrackingOrigin: {fileID: 0} + m_ActionsAsset: {fileID: -944628639613478452, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + m_PointAction: {fileID: -1654692200621890270, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + m_MoveAction: {fileID: -8784545083839296357, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + m_SubmitAction: {fileID: 392368643174621059, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + m_CancelAction: {fileID: 7727032971491509709, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + m_LeftClickAction: {fileID: 3001919216989983466, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + m_MiddleClickAction: {fileID: -2185481485913320682, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + m_RightClickAction: {fileID: -4090225696740746782, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + m_ScrollWheelAction: {fileID: 6240969308177333660, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + m_TrackedDevicePositionAction: {fileID: 6564999863303420839, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + m_TrackedDeviceOrientationAction: {fileID: 7970375526676320489, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + m_DeselectOnBackgroundClick: 1 + m_PointerBehavior: 0 + m_CursorLockBehavior: 0 + m_ScrollDeltaPerTick: 6 +--- !u!114 &521952201 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 521952199} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 10 +--- !u!4 &521952202 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 521952199} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &613701312 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 613701313} + - component: {fileID: 613701316} + - component: {fileID: 613701315} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &613701313 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 613701312} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1038445496} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &613701315 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 613701312} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, type: 3} + m_FontSize: 28 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Pause +--- !u!222 &613701316 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 613701312} + m_CullTransparentMesh: 1 --- !u!1 &725779773 GameObject: m_ObjectHideFlags: 0 @@ -5059,6 +5372,159 @@ ParticleSystem: m_PostInfinity: 2 m_RotationOrder: 4 vectorLabel1_3: W +--- !u!1 &892725781 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 892725782} + - component: {fileID: 892725783} + m_Layer: 5 + m_Name: PauseMenu + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &892725782 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 892725781} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 487176672} + - {fileID: 1452878284} + - {fileID: 988798828} + - {fileID: 1720228374} + - {fileID: 1362394567} + - {fileID: 1269654000} + - {fileID: 1464555240} + m_Father: {fileID: 1371294550} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 117.00001, y: 102.99999} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &892725783 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 892725781} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe007f250f006dae5b98ae5c5a87113b, type: 3} + m_Name: + m_EditorClassIdentifier: + pauseMenu: {fileID: 892725781} + pauseButton: {fileID: 1038445495} + levelLoader: {fileID: 1999482186} +--- !u!1 &988798827 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 988798828} + - component: {fileID: 988798831} + - component: {fileID: 988798830} + - component: {fileID: 988798829} + m_Layer: 0 + m_Name: LevelTotalAttempts + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &988798828 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 988798827} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -2.9565992} + m_LocalScale: {x: 0.4166666, y: 0.4166666, z: 0.4166666} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1358193270} + m_Father: {fileID: 892725782} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -166, y: -274} + m_SizeDelta: {x: 629.6868, y: 98.2373} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &988798829 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 988798827} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c2e1b06afdba22e2e801e20c56a99a30, type: 3} + m_Name: + m_EditorClassIdentifier: + levelTotalAttemptsText: {fileID: 988798830} + levelsLoader: {fileID: 0} +--- !u!114 &988798830 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 988798827} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, type: 3} + m_FontSize: 56 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 56 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'Total Attempts:' +--- !u!222 &988798831 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 988798827} + m_CullTransparentMesh: 1 --- !u!1 &1011717286 GameObject: m_ObjectHideFlags: 0 @@ -5146,6 +5612,174 @@ SpriteRenderer: m_WasSpriteAssigned: 1 m_MaskInteraction: 0 m_SpriteSortPoint: 0 +--- !u!1 &1038445495 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1038445496} + - component: {fileID: 1038445499} + - component: {fileID: 1038445498} + - component: {fileID: 1038445497} + m_Layer: 5 + m_Name: PauseButton + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1038445496 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1038445495} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 613701313} + m_Father: {fileID: 1371294550} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 357.3993, y: 186.61183} + m_SizeDelta: {x: 85.2064, y: 76.7764} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1038445497 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1038445495} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1038445498} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 892725783} + m_TargetAssemblyTypeName: PauseMenu, Assembly-CSharp + m_MethodName: Pause + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &1038445498 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1038445495} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1038445499 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1038445495} + m_CullTransparentMesh: 1 +--- !u!1 &1203849681 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1203849682} + m_Layer: 0 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1203849682 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1203849681} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1362394567} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} --- !u!1 &1235900592 GameObject: m_ObjectHideFlags: 0 @@ -5456,6 +6090,888 @@ BoxCollider2D: m_AutoTiling: 0 m_Size: {x: 0.79, y: 0.79} m_EdgeRadius: 0 +--- !u!1 &1269653999 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1269654000} + - component: {fileID: 1269654003} + - component: {fileID: 1269654002} + - component: {fileID: 1269654001} + m_Layer: 5 + m_Name: Home + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1269654000 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1269653999} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1340105509} + m_Father: {fileID: 892725782} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -218, y: 0} + m_SizeDelta: {x: 134.2251, y: 110} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1269654001 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1269653999} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1269654002} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 892725783} + m_TargetAssemblyTypeName: PauseMenu, Assembly-CSharp + m_MethodName: Home + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &1269654002 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1269653999} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1269654003 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1269653999} + m_CullTransparentMesh: 1 +--- !u!1 &1304099969 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1304099970} + - component: {fileID: 1304099973} + - component: {fileID: 1304099972} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1304099970 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1304099969} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1464555240} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1304099972 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1304099969} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, type: 3} + m_FontSize: 32 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Continue +--- !u!222 &1304099973 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1304099969} + m_CullTransparentMesh: 1 +--- !u!1 &1340105508 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1340105509} + - component: {fileID: 1340105512} + - component: {fileID: 1340105511} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1340105509 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1340105508} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1269654000} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1340105511 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1340105508} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, type: 3} + m_FontSize: 32 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Home +--- !u!222 &1340105512 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1340105508} + m_CullTransparentMesh: 1 +--- !u!1 &1358193269 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1358193270} + m_Layer: 0 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1358193270 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1358193269} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 988798828} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &1362394566 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1362394567} + - component: {fileID: 1362394570} + - component: {fileID: 1362394569} + - component: {fileID: 1362394568} + m_Layer: 0 + m_Name: LevelTotalJumps + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1362394567 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1362394566} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -2.9565992} + m_LocalScale: {x: 0.4166666, y: 0.4166666, z: 0.4166666} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1203849682} + m_Father: {fileID: 892725782} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -166, y: -175.76} + m_SizeDelta: {x: 629.6868, y: 98.2373} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1362394568 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1362394566} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 90096cf0341a3ac178de4db506d4205c, type: 3} + m_Name: + m_EditorClassIdentifier: + levelTotalJumpsText: {fileID: 1362394569} + levelsLoader: {fileID: 0} +--- !u!114 &1362394569 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1362394566} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, type: 3} + m_FontSize: 56 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 56 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'Total Jumps:' +--- !u!222 &1362394570 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1362394566} + m_CullTransparentMesh: 1 +--- !u!1 &1371294546 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1371294550} + - component: {fileID: 1371294549} + - component: {fileID: 1371294548} + - component: {fileID: 1371294547} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1371294547 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1371294546} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &1371294548 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1371294546} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 1 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 + m_PresetInfoIsWorld: 0 +--- !u!223 &1371294549 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1371294546} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 + m_AdditionalShaderChannelsFlag: 0 + m_UpdateRectTransformForStandalone: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &1371294550 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1371294546} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 892725782} + - {fileID: 1038445496} + - {fileID: 245275148} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!1 &1452878283 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1452878284} + - component: {fileID: 1452878287} + - component: {fileID: 1452878286} + - component: {fileID: 1452878285} + m_Layer: 5 + m_Name: LevelName + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1452878284 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1452878283} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 892725782} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -102, y: -110} + m_SizeDelta: {x: 132.8068, y: 10} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1452878285 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1452878283} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b9d2aa88c034d40f187d6ff84705da65, type: 3} + m_Name: + m_EditorClassIdentifier: + levelNameText: {fileID: 1452878286} + levelsLoader: {fileID: 0} +--- !u!114 &1452878286 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1452878283} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, type: 3} + m_FontSize: 32 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Level +--- !u!222 &1452878287 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1452878283} + m_CullTransparentMesh: 1 +--- !u!1 &1464555239 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1464555240} + - component: {fileID: 1464555243} + - component: {fileID: 1464555242} + - component: {fileID: 1464555241} + m_Layer: 5 + m_Name: Continue + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1464555240 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1464555239} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1304099970} + m_Father: {fileID: 892725782} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 134.2251, y: 110} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1464555241 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1464555239} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1464555242} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 892725783} + m_TargetAssemblyTypeName: PauseMenu, Assembly-CSharp + m_MethodName: Resume + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &1464555242 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1464555239} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1464555243 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1464555239} + m_CullTransparentMesh: 1 +--- !u!1 &1560669020 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1560669021} + m_Layer: 0 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1560669021 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1560669020} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1720228374} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &1720228373 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1720228374} + - component: {fileID: 1720228377} + - component: {fileID: 1720228376} + - component: {fileID: 1720228375} + m_Layer: 0 + m_Name: LevelProgression + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1720228374 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1720228373} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -2.9565992} + m_LocalScale: {x: 0.4166666, y: 0.4166666, z: 0.4166666} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1560669021} + m_Father: {fileID: 892725782} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -208.7, y: -220.6} + m_SizeDelta: {x: 629.6868, y: 79.9371} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1720228375 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1720228373} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f53ed5a09d2704999b0f112382f62309, type: 3} + m_Name: + m_EditorClassIdentifier: + levelProgressionText: {fileID: 1720228376} + levelsLoader: {fileID: 0} +--- !u!114 &1720228376 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1720228373} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, type: 3} + m_FontSize: 56 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 56 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'Progression Max:' +--- !u!222 &1720228377 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1720228373} + m_CullTransparentMesh: 1 --- !u!1 &1999482185 GameObject: m_ObjectHideFlags: 0 @@ -5469,7 +6985,7 @@ GameObject: - component: {fileID: 1999482188} m_Layer: 0 m_Name: LevelLoader - m_TagString: Untagged + m_TagString: LevelLoader m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 @@ -5488,6 +7004,7 @@ MonoBehaviour: m_EditorClassIdentifier: levelsLoader: {fileID: 0} audioSource: {fileID: 1999482188} + progressionText: {fileID: 245275149} --- !u!4 &1999482187 Transform: m_ObjectHideFlags: 0 @@ -5600,6 +7117,41 @@ AudioSource: m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 +--- !u!1 &2029501211 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2029501212} + m_Layer: 5 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2029501212 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2029501211} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 487176672} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} --- !u!1660057539 &9223372036854775807 SceneRoots: m_ObjectHideFlags: 0 @@ -5608,3 +7160,5 @@ SceneRoots: - {fileID: 1267397458} - {fileID: 1235900594} - {fileID: 1999482187} + - {fileID: 1371294550} + - {fileID: 521952202} diff --git a/Assets/Scenes/SelectLevelScene.unity b/Assets/Scenes/SelectLevelScene.unity index bedb997..9266995 100644 --- a/Assets/Scenes/SelectLevelScene.unity +++ b/Assets/Scenes/SelectLevelScene.unity @@ -1556,7 +1556,7 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: -0.000013351, y: -147.36} + m_AnchoredPosition: {x: -52.318, y: -147.36} m_SizeDelta: {x: 629.6868, y: 98.2373} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &1571276506 @@ -1592,7 +1592,7 @@ MonoBehaviour: m_HorizontalOverflow: 0 m_VerticalOverflow: 0 m_LineSpacing: 1 - m_Text: 'Progression:' + m_Text: 'Progression Max:' --- !u!222 &1571276507 CanvasRenderer: m_ObjectHideFlags: 0 diff --git a/Assets/Scripts/Level.cs b/Assets/Scripts/Level.cs index 1988aea..5145300 100644 --- a/Assets/Scripts/Level.cs +++ b/Assets/Scripts/Level.cs @@ -16,9 +16,12 @@ public class LevelElement [System.Serializable] public class Level { + public static readonly int LAST_X = 15; public string JsonName { get; set; } public int TotalJumps { get; set; } public int TotalAttempts { get; set; } + public int ProgressionPercent { get; set; } + public int ProgressionPercentMax { get; set; } public string name; public string musicName; @@ -26,6 +29,20 @@ public class Level public List elements; + public float LastX + { + get + { + LevelElement lastElement = elements[^1]; + float lastX = LAST_X; + if (lastElement != null) + { + lastX += lastElement.x; + } + return lastX; + } + } + public static Level CreateFromJSON(string jsonString) { return JsonUtility.FromJson(jsonString); diff --git a/Assets/Scripts/LevelLoader.cs b/Assets/Scripts/LevelLoader.cs index ee76bbe..25f89ae 100644 --- a/Assets/Scripts/LevelLoader.cs +++ b/Assets/Scripts/LevelLoader.cs @@ -1,10 +1,12 @@ using UnityEngine; +using UnityEngine.UI; using System.IO; public class LevelLoader : MonoBehaviour { public LevelsLoader levelsLoader; public AudioSource audioSource; + public Text progressionText; private GameObject GetPrefab(string type) { @@ -31,14 +33,7 @@ public class LevelLoader : MonoBehaviour instance.transform.localScale = new Vector3(newScaleX, newScaleY, originalScale.z); } - - LevelElement lastElement = current.elements[^1]; - float lastX = 15; - if (lastElement != null) - { - lastX += lastElement.x; - } - Instantiate(GetPrefab("WinnerWall"), new Vector3(lastX, 0, 0), Quaternion.Euler(0, 0, 90)); + Instantiate(GetPrefab("WinnerWall"), new Vector3(current.LastX, 0, 0), Quaternion.Euler(0, 0, 90)); } public void Start() @@ -52,6 +47,7 @@ public class LevelLoader : MonoBehaviour public void Update() { - + Level current = levelsLoader.levelCurrent; + progressionText.text = current.ProgressionPercent + "%"; } } diff --git a/Assets/Scripts/LevelStat.cs b/Assets/Scripts/LevelStat.cs index 80d5b0e..3ff3b76 100644 --- a/Assets/Scripts/LevelStat.cs +++ b/Assets/Scripts/LevelStat.cs @@ -7,6 +7,7 @@ public class LevelStat public int totalJumps; public int totalAttempts; + public int progressionPercent; public static LevelStat CreateFromJSON(string jsonString) { diff --git a/Assets/Scripts/LevelsLoader.cs b/Assets/Scripts/LevelsLoader.cs index c29cd6e..df58186 100644 --- a/Assets/Scripts/LevelsLoader.cs +++ b/Assets/Scripts/LevelsLoader.cs @@ -1,6 +1,7 @@ using UnityEngine; using System.Collections.Generic; using System.IO; +using System; public class LevelsLoader : MonoBehaviour { @@ -33,11 +34,14 @@ public class LevelsLoader : MonoBehaviour level.JsonName = jsonTextFile.name; level.TotalAttempts = 0; level.TotalJumps = 0; + level.ProgressionPercent = 0; + level.ProgressionPercentMax = 0; if (levelStatsMap.TryGetValue(level.JsonName, out LevelStat levelStat)) { - level.TotalJumps = levelStat.totalJumps; level.TotalAttempts = levelStat.totalAttempts; + level.TotalJumps = levelStat.totalJumps; + level.ProgressionPercentMax = levelStat.progressionPercent; } else { @@ -59,7 +63,8 @@ public class LevelsLoader : MonoBehaviour { JsonName = levelCurrent.JsonName, totalJumps = levelCurrent.TotalJumps, - totalAttempts = levelCurrent.TotalAttempts + totalAttempts = levelCurrent.TotalAttempts, + progressionPercent = levelCurrent.ProgressionPercentMax, }; string levelStatJson = JsonUtility.ToJson(levelStat, true) + "\n"; File.WriteAllText(Path.Combine(Application.dataPath, "Resources", "LevelsStats", levelCurrent.JsonName + ".json"), levelStatJson); @@ -88,4 +93,22 @@ public class LevelsLoader : MonoBehaviour levelCurrent.TotalAttempts += 1; SaveLevelCurrent(); } + + public int CalculateCurrentProgressionPercent(Vector3 playerPosition) + { + float lastX = levelCurrent.LastX; + GameObject winnerWallPrefab = Resources.Load("Prefabs/WinnerWall"); + float winnerWallWidth = winnerWallPrefab.GetComponent().bounds.size.x; + float marginError = 0.5f; + float totalDistance = lastX - (winnerWallWidth / 2) - marginError; + + float rawPercentage = (playerPosition.x / totalDistance) * 100; + int clampedPercentage = Mathf.Clamp(Mathf.RoundToInt(rawPercentage), 0, 100); + + levelCurrent.ProgressionPercent = clampedPercentage; + levelCurrent.ProgressionPercentMax = Math.Max(levelCurrent.ProgressionPercentMax, levelCurrent.ProgressionPercent); + SaveLevelCurrent(); + + return clampedPercentage; + } } diff --git a/Assets/Scripts/LevelsSelect/LevelProgression.cs b/Assets/Scripts/LevelsSelect/LevelProgression.cs index 989ca26..61438b7 100644 --- a/Assets/Scripts/LevelsSelect/LevelProgression.cs +++ b/Assets/Scripts/LevelsSelect/LevelProgression.cs @@ -9,7 +9,7 @@ public class LevelProgression : MonoBehaviour private string GetText() { - return "Progression: "; + return "Progression Max: " + levelsLoader.levelCurrent.ProgressionPercentMax + "%"; } public void Start() diff --git a/Assets/Scripts/PauseMenu.cs b/Assets/Scripts/PauseMenu.cs new file mode 100644 index 0000000..cc0cdc0 --- /dev/null +++ b/Assets/Scripts/PauseMenu.cs @@ -0,0 +1,33 @@ +using UnityEngine; +using UnityEngine.SceneManagement; + +public class PauseMenu : MonoBehaviour +{ + public GameObject pauseMenu; + public GameObject pauseButton; + public LevelLoader levelLoader; + + public void Pause() + { + Time.timeScale = 0; + levelLoader.audioSource.Pause(); + + pauseMenu.SetActive(true); + pauseButton.SetActive(false); + } + + public void Home() + { + Time.timeScale = 1; + SceneManager.LoadScene("HomeScene"); + } + + public void Resume() + { + Time.timeScale = 1; + levelLoader.audioSource.Play(); + + pauseMenu.SetActive(false); + pauseButton.SetActive(true); + } +} diff --git a/Assets/Scripts/PauseMenu.cs.meta b/Assets/Scripts/PauseMenu.cs.meta new file mode 100644 index 0000000..818ef19 --- /dev/null +++ b/Assets/Scripts/PauseMenu.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: fe007f250f006dae5b98ae5c5a87113b \ No newline at end of file diff --git a/Assets/Scripts/Player.cs b/Assets/Scripts/Player.cs index ccd14ab..3064cc1 100644 --- a/Assets/Scripts/Player.cs +++ b/Assets/Scripts/Player.cs @@ -42,6 +42,7 @@ public class Player : MonoBehaviour public void Update() { CurrentGameMode.Update(this); + LevelsLoader.CalculateCurrentProgressionPercent(transform.position); } public void OnCollisionEnter2D(Collision2D collision) diff --git a/ProjectSettings/TagManager.asset b/ProjectSettings/TagManager.asset index dc18c70..487363c 100644 --- a/ProjectSettings/TagManager.asset +++ b/ProjectSettings/TagManager.asset @@ -8,8 +8,6 @@ TagManager: - Win - LevelsLoader - LevelLoader - - CubePortal - - ShipPortal layers: - Default - TransparentFX From 58f774fc7e1d15bc417670444f656fbdff372f28 Mon Sep 17 00:00:00 2001 From: djelalb <122933761+djelalb@users.noreply.github.com> Date: Mon, 17 Mar 2025 18:29:15 +0100 Subject: [PATCH 10/11] feat: ship rotation (#47) Co-authored-by: Djelal BOUDJI --- Assets/Scripts/GameMode/ShipGameMode.cs | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/Assets/Scripts/GameMode/ShipGameMode.cs b/Assets/Scripts/GameMode/ShipGameMode.cs index 7464855..aa4b7e0 100644 --- a/Assets/Scripts/GameMode/ShipGameMode.cs +++ b/Assets/Scripts/GameMode/ShipGameMode.cs @@ -7,6 +7,10 @@ public class ShipGameMode : IGameMode private const float JumpForce = 26.6581f; private const KeyCode JumpKey = KeyCode.Space; + private const float UpperAngle = 45f; + private const float LowerAngle = -45f; + private const float RotationLerpSpeed = 5f; + public void Update(Player player) { player.RigidBody.linearVelocity = new Vector2(HorizontalSpeed, player.RigidBody.linearVelocity.y); @@ -15,6 +19,21 @@ public class ShipGameMode : IGameMode { Jump(player); } + + float targetAngle = Input.GetKey(JumpKey) ? UpperAngle : LowerAngle; + float currentAngle = player.Transform.rotation.eulerAngles.z; + if (currentAngle > 180f) + currentAngle -= 360f; + float newAngle = Mathf.Lerp(currentAngle, targetAngle, RotationLerpSpeed * Time.deltaTime); + player.Transform.rotation = Quaternion.Euler(0, 0, newAngle); + + UpdateParticlePositionAndRotation(player); + } + + private void UpdateParticlePositionAndRotation(Player player) + { + player.Particle.transform.position = player.Transform.position + new Vector3(-0.19f, -0.64f, -10); + player.Particle.transform.rotation = Quaternion.Euler(0, 0, 150.464f); } private void Jump(Player player) @@ -29,11 +48,17 @@ public class ShipGameMode : IGameMode if (collision.gameObject.CompareTag("Kill")) { SceneManager.LoadScene(SceneManager.GetActiveScene().name); + return; } if (collision.gameObject.CompareTag("Win")) { SceneManager.LoadScene("HomeScene"); + return; } + + float currentAngle = player.Transform.rotation.eulerAngles.z; + float shortestAngle = Mathf.DeltaAngle(currentAngle, 0); + player.Transform.rotation = Quaternion.RotateTowards(player.Transform.rotation, Quaternion.Euler(0, 0, 0), Mathf.Abs(shortestAngle)); } public void OnCollisionExit(Player player, Collision2D collision) From d57cc647aa4d991f9af7f54b538c91a74b55ae41 Mon Sep 17 00:00:00 2001 From: djelalb <122933761+djelalb@users.noreply.github.com> Date: Mon, 24 Mar 2025 19:00:31 +0100 Subject: [PATCH 11/11] feat: import JSON level (#48) --- Assets/Scenes/HomeScene.unity | 270 ++++++ Assets/Scenes/ImportScene.unity | 1057 +++++++++++++++++++++ Assets/Scenes/ImportScene.unity.meta | 7 + Assets/Scripts/GameMode/ShipGameMode.cs | 1 - Assets/Scripts/JSONImporter.cs | 128 +++ Assets/Scripts/JSONImporter.cs.meta | 2 + Assets/Scripts/LevelsLoader.cs | 8 + Assets/Scripts/MainMenu.cs | 5 + Packages/manifest.json | 1 + Packages/packages-lock.json | 7 + ProjectSettings/EditorBuildSettings.asset | 3 + 11 files changed, 1488 insertions(+), 1 deletion(-) create mode 100644 Assets/Scenes/ImportScene.unity create mode 100644 Assets/Scenes/ImportScene.unity.meta create mode 100644 Assets/Scripts/JSONImporter.cs create mode 100644 Assets/Scripts/JSONImporter.cs.meta diff --git a/Assets/Scenes/HomeScene.unity b/Assets/Scenes/HomeScene.unity index ef891e5..d078ae1 100644 --- a/Assets/Scenes/HomeScene.unity +++ b/Assets/Scenes/HomeScene.unity @@ -556,6 +556,7 @@ RectTransform: - {fileID: 2125521633} - {fileID: 466663504} - {fileID: 29896390} + - {fileID: 666344588} m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} @@ -563,6 +564,139 @@ RectTransform: m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0, y: 0} +--- !u!1 &666344587 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 666344588} + - component: {fileID: 666344591} + - component: {fileID: 666344590} + - component: {fileID: 666344589} + m_Layer: 5 + m_Name: Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &666344588 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 666344587} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1899869499} + m_Father: {fileID: 481473977} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: -130.8} + m_SizeDelta: {x: 160, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &666344589 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 666344587} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 666344590} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1888054989} + m_TargetAssemblyTypeName: MainMenu, Assembly-CSharp + m_MethodName: OpenImport + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &666344590 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 666344587} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &666344591 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 666344587} + m_CullTransparentMesh: 1 --- !u!1 &948896765 GameObject: m_ObjectHideFlags: 0 @@ -797,6 +931,142 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: a1cd6b406f139414086355a222af717e, type: 3} m_Name: m_EditorClassIdentifier: +--- !u!1 &1899869498 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1899869499} + - component: {fileID: 1899869501} + - component: {fileID: 1899869500} + m_Layer: 5 + m_Name: Text (TMP) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1899869499 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1899869498} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 666344588} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1899869500 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1899869498} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: Import + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4281479730 + m_fontColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 24 + m_fontSizeBase: 24 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 0 + m_ActiveFontFeatures: 6e72656b + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_EmojiFallbackSupport: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &1899869501 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1899869498} + m_CullTransparentMesh: 1 --- !u!1 &2125521632 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Scenes/ImportScene.unity b/Assets/Scenes/ImportScene.unity new file mode 100644 index 0000000..ccb8a70 --- /dev/null +++ b/Assets/Scenes/ImportScene.unity @@ -0,0 +1,1057 @@ +%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 &77506300 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 77506301} + - component: {fileID: 77506304} + - component: {fileID: 77506305} + - component: {fileID: 77506302} + m_Layer: 5 + m_Name: StatusText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &77506301 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 77506300} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1442014941} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 84.74307, y: 105.52587} + m_SizeDelta: {x: 29.4862, y: 43.7482} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &77506302 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 77506300} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: "Aucun fichier import\xE9." + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 18 + m_fontSizeBase: 18 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 256 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 0 + m_ActiveFontFeatures: 6e72656b + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_EmojiFallbackSupport: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: -156.4479, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &77506304 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 77506300} + m_CullTransparentMesh: 1 +--- !u!114 &77506305 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 77506300} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: baf97ea8555b6214299a38be9fe1724f, type: 3} + m_Name: + m_EditorClassIdentifier: + statusText: {fileID: 77506302} +--- !u!1 &162069546 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 162069549} + - component: {fileID: 162069548} + - component: {fileID: 162069547} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &162069547 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 162069546} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 01614664b831546d2ae94a42149d80ac, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SendPointerHoverToParent: 1 + m_MoveRepeatDelay: 0.5 + m_MoveRepeatRate: 0.1 + m_XRTrackingOrigin: {fileID: 0} + m_ActionsAsset: {fileID: -944628639613478452, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + m_PointAction: {fileID: -1654692200621890270, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + m_MoveAction: {fileID: -8784545083839296357, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + m_SubmitAction: {fileID: 392368643174621059, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + m_CancelAction: {fileID: 7727032971491509709, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + m_LeftClickAction: {fileID: 3001919216989983466, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + m_MiddleClickAction: {fileID: -2185481485913320682, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + m_RightClickAction: {fileID: -4090225696740746782, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + m_ScrollWheelAction: {fileID: 6240969308177333660, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + m_TrackedDevicePositionAction: {fileID: 6564999863303420839, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + m_TrackedDeviceOrientationAction: {fileID: 7970375526676320489, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + m_DeselectOnBackgroundClick: 1 + m_PointerBehavior: 0 + m_CursorLockBehavior: 0 + m_ScrollDeltaPerTick: 6 +--- !u!114 &162069548 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 162069546} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 10 +--- !u!4 &162069549 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 162069546} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &244257726 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 244257727} + - component: {fileID: 244257729} + - component: {fileID: 244257728} + m_Layer: 5 + m_Name: Text (TMP) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &244257727 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 244257726} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 885044259} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &244257728 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 244257726} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: Import + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4281479730 + m_fontColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 24 + m_fontSizeBase: 24 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 0 + m_ActiveFontFeatures: 6e72656b + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_EmojiFallbackSupport: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &244257729 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 244257726} + m_CullTransparentMesh: 1 +--- !u!1 &773247538 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 773247539} + - component: {fileID: 773247541} + - component: {fileID: 773247540} + m_Layer: 5 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &773247539 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 773247538} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1442014941} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &773247540 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 773247538} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: -5548395039409485977, guid: ecd79b659cb6568498b28bf44ff6074b, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &773247541 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 773247538} + m_CullTransparentMesh: 1 +--- !u!1 &837005987 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 837005990} + - component: {fileID: 837005989} + - component: {fileID: 837005988} + 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 &837005988 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 837005987} + m_Enabled: 1 +--- !u!20 &837005989 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 837005987} + 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 &837005990 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 837005987} + 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!1 &885044258 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 885044259} + - component: {fileID: 885044263} + - component: {fileID: 885044262} + - component: {fileID: 885044261} + - component: {fileID: 885044260} + m_Layer: 5 + m_Name: ImportButton + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &885044259 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 885044258} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 244257727} + m_Father: {fileID: 1442014941} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 36.861893} + m_SizeDelta: {x: 160, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &885044260 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 885044258} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: baf97ea8555b6214299a38be9fe1724f, type: 3} + m_Name: + m_EditorClassIdentifier: + statusText: {fileID: 0} +--- !u!114 &885044261 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 885044258} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 885044262} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 885044260} + m_TargetAssemblyTypeName: JSONImporter, Assembly-CSharp + m_MethodName: ImportJSON + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &885044262 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 885044258} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &885044263 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 885044258} + m_CullTransparentMesh: 1 +--- !u!1 &955286177 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 955286178} + - component: {fileID: 955286182} + - component: {fileID: 955286181} + - component: {fileID: 955286180} + - component: {fileID: 955286179} + m_Layer: 5 + m_Name: HomeButton + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &955286178 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 955286177} + m_LocalRotation: {x: -0, y: -0, z: -1, w: 0} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1442014941} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: -180} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -357.39996, y: 152.4} + m_SizeDelta: {x: 50, y: 50} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &955286179 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 955286177} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ef2acea012085a3bb9a981fc334afaec, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &955286180 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 955286177} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 955286181} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 955286179} + m_TargetAssemblyTypeName: LevelHomeButton, Assembly-CSharp + m_MethodName: GoToHome + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &955286181 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 955286177} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: -2614270113051161491, guid: 1a4b9963b2ecc314094fb85c0b9c147a, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &955286182 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 955286177} + m_CullTransparentMesh: 1 +--- !u!1 &1442014937 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1442014941} + - component: {fileID: 1442014940} + - component: {fileID: 1442014939} + - component: {fileID: 1442014938} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1442014938 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1442014937} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &1442014939 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1442014937} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 1 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 + m_PresetInfoIsWorld: 0 +--- !u!223 &1442014940 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1442014937} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 + m_AdditionalShaderChannelsFlag: 25 + m_UpdateRectTransformForStandalone: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &1442014941 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1442014937} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 773247539} + - {fileID: 77506301} + - {fileID: 885044259} + - {fileID: 955286178} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 837005990} + - {fileID: 1442014941} + - {fileID: 162069549} diff --git a/Assets/Scenes/ImportScene.unity.meta b/Assets/Scenes/ImportScene.unity.meta new file mode 100644 index 0000000..71e9dc2 --- /dev/null +++ b/Assets/Scenes/ImportScene.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 079203ac02d460d48a1208a03134d373 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/GameMode/ShipGameMode.cs b/Assets/Scripts/GameMode/ShipGameMode.cs index aa4b7e0..dba3589 100644 --- a/Assets/Scripts/GameMode/ShipGameMode.cs +++ b/Assets/Scripts/GameMode/ShipGameMode.cs @@ -63,6 +63,5 @@ public class ShipGameMode : IGameMode public void OnCollisionExit(Player player, Collision2D collision) { - // rien pour l'instant } } diff --git a/Assets/Scripts/JSONImporter.cs b/Assets/Scripts/JSONImporter.cs new file mode 100644 index 0000000..a36c1af --- /dev/null +++ b/Assets/Scripts/JSONImporter.cs @@ -0,0 +1,128 @@ +using UnityEngine; +using System.IO; +using System.Collections; +using SimpleFileBrowser; +using UnityEngine.SceneManagement; +using TMPro; + +public class JSONImporter : MonoBehaviour +{ + public TMP_Text statusText; + + private void Awake() + { + if (statusText == null) + { + GameObject statusObj = GameObject.Find("StatusText"); + if (statusObj != null) + { + statusText = statusObj.GetComponent(); + if (statusText != null) + { + Debug.Log("✅ StatusText found and assigned automatically!"); + } + else + { + Debug.LogError("⚠️ 'StatusText' was found but does not have a TMP_Text component!"); + } + } + else + { + Debug.LogError("⚠️ No GameObject named 'StatusText' found in the scene. Please create a TextMeshPro element and name it 'StatusText'."); + } + } + } + + private void Start() + { + if (statusText != null) + { + statusText.text = "Ready to import..."; + statusText.color = Color.white; + } + else + { + Debug.LogError("statusText is not assigned!"); + } + } + + public void ImportJSON() + { + Debug.Log("Button clicked, starting import..."); + if (statusText != null) + { + statusText.text = "Importing..."; + statusText.color = Color.yellow; + } + StartCoroutine(ShowFileBrowser()); + } + + private IEnumerator ShowFileBrowser() + { + yield return FileBrowser.WaitForLoadDialog(FileBrowser.PickMode.Files, false, null, null, "Select JSON File", "Load"); + + if (FileBrowser.Success) + { + string sourcePath = FileBrowser.Result[0]; + + if (Path.GetExtension(sourcePath).ToLower() != ".json") + { + UpdateStatus("Invalid file. Please select a JSON file.", Color.red); + yield break; + } + + string fileName = Path.GetFileName(sourcePath); + string destinationPath = Path.Combine(Application.dataPath, "Resources/Levels", fileName); + + bool success = false; + try + { + File.Copy(sourcePath, destinationPath, true); + success = true; + } + catch (IOException e) + { + Debug.LogError("Error copying file: " + e.Message); + } + + if (success) + { + UpdateStatus("Import successful!", Color.green); + } + else + { + UpdateStatus("Import error.", Color.red); + } + +#if UNITY_EDITOR + UnityEditor.AssetDatabase.Refresh(); +#endif + LevelsLoader loader = Object.FindAnyObjectByType(); + if (loader != null) + { + loader.RefreshLevels(); + } + } + else + { + UpdateStatus("No file selected.", Color.red); + } + yield return null; + } + + private void UpdateStatus(string message, Color color) + { + if (statusText != null) + { + statusText.text = message; + statusText.color = color; + statusText.gameObject.SetActive(false); + statusText.gameObject.SetActive(true); + Canvas.ForceUpdateCanvases(); + } + else + { + Debug.LogError("statusText is NULL!"); + } + } +} diff --git a/Assets/Scripts/JSONImporter.cs.meta b/Assets/Scripts/JSONImporter.cs.meta new file mode 100644 index 0000000..c90aee4 --- /dev/null +++ b/Assets/Scripts/JSONImporter.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: baf97ea8555b6214299a38be9fe1724f \ No newline at end of file diff --git a/Assets/Scripts/LevelsLoader.cs b/Assets/Scripts/LevelsLoader.cs index df58186..9446925 100644 --- a/Assets/Scripts/LevelsLoader.cs +++ b/Assets/Scripts/LevelsLoader.cs @@ -111,4 +111,12 @@ public class LevelsLoader : MonoBehaviour return clampedPercentage; } + + public void RefreshLevels() + { + levels.Clear(); + LoadAllLevels(); + if (levels.Count > 0) + levelCurrent = levels[0]; + } } diff --git a/Assets/Scripts/MainMenu.cs b/Assets/Scripts/MainMenu.cs index 8e1ab8c..0f68105 100644 --- a/Assets/Scripts/MainMenu.cs +++ b/Assets/Scripts/MainMenu.cs @@ -8,6 +8,11 @@ public class MainMenu : MonoBehaviour SceneManager.LoadSceneAsync("SelectLevelScene"); } + public void OpenImport() + { + SceneManager.LoadSceneAsync("ImportScene"); + } + public void OpenSettings() { // SceneManager.LoadSceneAsync(?); diff --git a/Packages/manifest.json b/Packages/manifest.json index 97f6d1d..8f7ecf5 100644 --- a/Packages/manifest.json +++ b/Packages/manifest.json @@ -10,6 +10,7 @@ "com.unity.timeline": "1.8.7", "com.unity.ugui": "2.0.0", "com.unity.visualscripting": "1.9.4", + "com.yasirkula.simplefilebrowser": "https://github.com/yasirkula/UnitySimpleFileBrowser.git", "com.unity.modules.accessibility": "1.0.0", "com.unity.modules.ai": "1.0.0", "com.unity.modules.androidjni": "1.0.0", diff --git a/Packages/packages-lock.json b/Packages/packages-lock.json index bc894d8..d8514f5 100644 --- a/Packages/packages-lock.json +++ b/Packages/packages-lock.json @@ -245,6 +245,13 @@ }, "url": "https://packages.unity.com" }, + "com.yasirkula.simplefilebrowser": { + "version": "https://github.com/yasirkula/UnitySimpleFileBrowser.git", + "depth": 0, + "source": "git", + "dependencies": {}, + "hash": "07398a29da28adc0f074b5a364e5f209cf20285e" + }, "com.unity.modules.accessibility": { "version": "1.0.0", "depth": 0, diff --git a/ProjectSettings/EditorBuildSettings.asset b/ProjectSettings/EditorBuildSettings.asset index 82792d5..88fc271 100644 --- a/ProjectSettings/EditorBuildSettings.asset +++ b/ProjectSettings/EditorBuildSettings.asset @@ -8,6 +8,9 @@ EditorBuildSettings: - enabled: 1 path: Assets/Scenes/HomeScene.unity guid: 023463cec7054304da66bb038a734d7a + - enabled: 1 + path: Assets/Scenes/ImportScene.unity + guid: 079203ac02d460d48a1208a03134d373 - enabled: 1 path: Assets/Scenes/SelectLevelScene.unity guid: ff897c289bbe86f499c0c88b6177ab5c