From ed5d3cd222abf17e8aae0168f81e0e4cde36d6b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o=20LUDWIG?= Date: Mon, 3 Feb 2025 16:56:46 +0100 Subject: [PATCH] feat: json loader (Work In Progress) --- Assets/LevelLoader.cs | 38 +++++++ Assets/LevelLoader.cs.meta | 2 + Assets/Levels.meta | 8 ++ Assets/Levels/back-on-track.json | 13 +++ Assets/Levels/back-on-track.json.meta | 7 ++ Assets/Scenes/SelectLevelScene.unity | 158 +++++++++++--------------- Assets/Scripts/Level.cs | 16 +++ Assets/Scripts/Level.cs.meta | 2 + Assets/SelectLevelMenu.cs | 3 + 9 files changed, 154 insertions(+), 93 deletions(-) create mode 100644 Assets/LevelLoader.cs create mode 100644 Assets/LevelLoader.cs.meta create mode 100644 Assets/Levels.meta create mode 100644 Assets/Levels/back-on-track.json create mode 100644 Assets/Levels/back-on-track.json.meta create mode 100644 Assets/Scripts/Level.cs create mode 100644 Assets/Scripts/Level.cs.meta diff --git a/Assets/LevelLoader.cs b/Assets/LevelLoader.cs new file mode 100644 index 0000000..8ef16ce --- /dev/null +++ b/Assets/LevelLoader.cs @@ -0,0 +1,38 @@ +using UnityEngine; +using UnityEngine.UI; +using System.IO; +using System.Text.Json; + +public class LevelLoader : MonoBehaviour +{ + [SerializeField] + public Text levelNameText; + + void Start() + { + levelNameText.text = "Coucou"; + string filePath = "level.json"; + + if (File.Exists(filePath)) + { + string json = File.ReadAllText(filePath); + Level level = JsonSerializer.Deserialize(json, new JsonSerializerOptions { PropertyNameCaseInsensitive = true }); + + Console.WriteLine($"Name: {level.Name}"); + Console.WriteLine($"MusicPath: {level.MusicPath}"); + Console.WriteLine($"TotalJumps: {level.TotalJumps}"); + Console.WriteLine($"TotalAttempts: {level.TotalAttempts}"); + Console.WriteLine($"KilledCount: {level.KilledCount}"); + } + else + { + Console.WriteLine("JSON file not found."); + } + + } + + void Update() + { + + } +} diff --git a/Assets/LevelLoader.cs.meta b/Assets/LevelLoader.cs.meta new file mode 100644 index 0000000..f980ce4 --- /dev/null +++ b/Assets/LevelLoader.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 4c3543e79f987af40bbd4a51c0a334c3 \ No newline at end of file diff --git a/Assets/Levels.meta b/Assets/Levels.meta new file mode 100644 index 0000000..4e9fbec --- /dev/null +++ b/Assets/Levels.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8a276afa778b9651581567c4c5bd8c7c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Levels/back-on-track.json b/Assets/Levels/back-on-track.json new file mode 100644 index 0000000..765836b --- /dev/null +++ b/Assets/Levels/back-on-track.json @@ -0,0 +1,13 @@ +{ + "name": "Back on Track", + "music": "", + "elements": [ + { + "type": "Spike", + "position": { + "x": 0, + "y": 0 + } + } + ] +} diff --git a/Assets/Levels/back-on-track.json.meta b/Assets/Levels/back-on-track.json.meta new file mode 100644 index 0000000..c62c5f3 --- /dev/null +++ b/Assets/Levels/back-on-track.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f32c76b542365930aa0e19dff76d20c7 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/SelectLevelScene.unity b/Assets/Scenes/SelectLevelScene.unity index 78d0d32..0eb353d 100644 --- a/Assets/Scenes/SelectLevelScene.unity +++ b/Assets/Scenes/SelectLevelScene.unity @@ -613,9 +613,10 @@ GameObject: m_Component: - component: {fileID: 954359121} - component: {fileID: 954359123} - - component: {fileID: 954359122} + - component: {fileID: 954359125} + - component: {fileID: 954359124} m_Layer: 5 - m_Name: Text (TMP) + m_Name: Text m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -640,97 +641,6 @@ RectTransform: m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &954359122 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 954359120} - 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: Level - 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 &954359123 CanvasRenderer: m_ObjectHideFlags: 0 @@ -739,6 +649,53 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 954359120} m_CullTransparentMesh: 1 +--- !u!114 &954359124 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 954359120} + 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: Level +--- !u!114 &954359125 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 954359120} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4c3543e79f987af40bbd4a51c0a334c3, type: 3} + m_Name: + m_EditorClassIdentifier: + levelNameText: {fileID: 954359124} --- !u!1 &976210033 GameObject: m_ObjectHideFlags: 0 @@ -1148,6 +1105,7 @@ GameObject: - component: {fileID: 1153106992} - component: {fileID: 1153106991} - component: {fileID: 1153106990} + - component: {fileID: 1153106993} m_Layer: 5 m_Name: Canvas m_TagString: Untagged @@ -1244,6 +1202,19 @@ Canvas: m_SortingLayerID: 0 m_SortingOrder: 0 m_TargetDisplay: 0 +--- !u!114 &1153106993 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1153106988} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 78914afaa50342f4fbc6b2f0d1a6c036, type: 3} + m_Name: + m_EditorClassIdentifier: + levelNameText: {fileID: 0} --- !u!1 &1170341692 GameObject: m_ObjectHideFlags: 0 @@ -1350,6 +1321,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 78914afaa50342f4fbc6b2f0d1a6c036, type: 3} m_Name: m_EditorClassIdentifier: + levelNameText: {fileID: 0} --- !u!1 &1174740937 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Scripts/Level.cs b/Assets/Scripts/Level.cs new file mode 100644 index 0000000..127f202 --- /dev/null +++ b/Assets/Scripts/Level.cs @@ -0,0 +1,16 @@ +using System.Runtime.Serialization; + +[DataContract] +public class Level +{ + [DataMember] + public string Name { get; set; } + + [DataMember] + public string MusicPath { get; set; } + + [DataMember] + public int TotalJumps { get; set; } + public int TotalAttempts { get; set; } + public int KilledCount { get; set; } +} diff --git a/Assets/Scripts/Level.cs.meta b/Assets/Scripts/Level.cs.meta new file mode 100644 index 0000000..976af79 --- /dev/null +++ b/Assets/Scripts/Level.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: d646b99f5a21a91c88669a5e4d774f06 \ No newline at end of file diff --git a/Assets/SelectLevelMenu.cs b/Assets/SelectLevelMenu.cs index 4fe7942..85c0f6b 100644 --- a/Assets/SelectLevelMenu.cs +++ b/Assets/SelectLevelMenu.cs @@ -1,8 +1,11 @@ using UnityEngine; +using UnityEngine.UI; using UnityEngine.SceneManagement; public class SelectLevelMenu : MonoBehaviour { + public Text levelNameText; + public void PlayLevel() { SceneManager.LoadScene("LevelScene");