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] 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(); } }