diff --git a/Achievments/Backend.meta b/Achievments/Backend.meta new file mode 100644 index 0000000..a5e7f74 --- /dev/null +++ b/Achievments/Backend.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3541d03056defb3468d957da0b69a7b9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Achievments/Backend/LoacalBaackend.meta b/Achievments/Backend/LoacalBaackend.meta new file mode 100644 index 0000000..46efe33 --- /dev/null +++ b/Achievments/Backend/LoacalBaackend.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e0226747b74e86c4b8e89d01e9eeeb3f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Achievments/Backend/LoacalBaackend/LoaclBackendConfig.cs b/Achievments/Backend/LoacalBaackend/LoaclBackendConfig.cs new file mode 100644 index 0000000..27b9b2a --- /dev/null +++ b/Achievments/Backend/LoacalBaackend/LoaclBackendConfig.cs @@ -0,0 +1,129 @@ +using NEG.Utils.Achievments.AchievmentTypes; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using UnityEngine; + +namespace NEG.Utils.Achievments +{ + public class LoaclBackendConfig : ScriptableObject, IAchievmentBackendConfig + { + [SerializeField] + private string saveLocation; + + public IAchievmentBackend ConstructBackend() + { + + } + } + + public class LocalBackend : IAchievmentBackend + { + private string saveLocation; + + public LocalBackend(string saveLocation) + { + this.saveLocation = saveLocation; + } + + public void AchievmentCompleted(AchievmentData achievment) + { + string id = achievment.Achievment.Id; + JObject jobj = LoadJson(); + + JToken token = jobj[id]; + + if (token is not JObject achievmentObj) + { + achievmentObj = new JObject(); + } + + achievmentObj["completed"] = true; + + token.Replace(achievmentObj); + + SaveJson(jobj); + } + + public void AchievmentStateChanged(AchievmentData achievment) + { + string id = achievment.Achievment.Id; + JObject jobj = LoadJson(); + + JToken token = jobj[id]; + + if (token is not JObject achievmentObj) + { + achievmentObj = new JObject(); + } + + switch (achievment) + { + case IntAchievmentData intAchievment: + achievmentObj["data"] = intAchievment.CurrentProgress; + break; + case FloatAchievmentData floatAchievment: + achievmentObj["data"] = floatAchievment.CurrentProgress; + break; + case ToggleAchievmentData toggleAchievment: + achievmentObj["data"] = toggleAchievment.IsCompleted; + break; + } + + + token.Replace(achievmentObj); + + SaveJson(jobj); + } + + public AchievmentData GetStoredAchivment(AchievmentDefinition definition) + { + JObject jobj = LoadJson(); + + JToken token = jobj[definition.Id]; + + if (token is not JObject) + { + return null; + } + + AchievmentData achievment = definition.Construct(); + + switch (achievment) + { + case IntAchievmentData intAchievment: + intAchievment.CurrentProgress = (int)token["data"]; + break; + case FloatAchievmentData floatAchievment: + floatAchievment.CurrentProgress = (float)token["data"]; + break; + case ToggleAchievmentData toggleAchievment: + toggleAchievment.CompletionState = (bool)token["data"]; + break; + } + + return achievment; + } + + private JObject LoadJson() + { + if (Directory.Exists(Path.GetDirectoryName(saveLocation)) && File.Exists(saveLocation)) + { + return JObject.Parse(File.ReadAllText(saveLocation)); + } + return new JObject(); + } + + private void SaveJson(JObject obj) + { + if (!Directory.Exists(Path.GetDirectoryName(saveLocation))) + { + Directory.CreateDirectory(Path.GetDirectoryName(saveLocation)); + } + + File.WriteAllText(saveLocation, obj.ToString(Formatting.Indented)); + } + } +} \ No newline at end of file diff --git a/Achievments/Backend/LoacalBaackend/LoaclBackendConfig.cs.meta b/Achievments/Backend/LoacalBaackend/LoaclBackendConfig.cs.meta new file mode 100644 index 0000000..39bcb87 --- /dev/null +++ b/Achievments/Backend/LoacalBaackend/LoaclBackendConfig.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6a1257a87feec064697193df412554d4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: