using System.Collections; using System.Collections.Generic; using UnityEngine; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System.IO; using System.Linq; using System; public static class JsonConfig { public static bool hasInitialized = false; public static JObject config; private static void ensureInitialization() { if (hasInitialized) return; loadFile(); hasInitialized = true; } private static string getFileName() { return Application.dataPath + "/../config.json"; } private static void saveFile() { if (JsonConfigBehavior.instance != null) JsonConfigBehavior.saveFile(); } public static IEnumerator saveFileWait() { yield return new WaitForSeconds(1.5f); // sort(config); File.WriteAllText(getFileName(), config.ToString()); } private static void loadFile() { if (File.Exists(getFileName())) config = JObject.Parse(File.ReadAllText(getFileName())); else { config = new JObject(); saveFile(); } } private static void sort(JObject jObj) { var props = jObj.Properties().ToList(); foreach (var prop in props) { prop.Remove(); } foreach (var prop in props.OrderBy(p=>p.Name)) { jObj.Add(prop); if(prop.Value is JObject) sort((JObject)prop.Value); } } public static void DeleteAll() { ensureInitialization(); config.RemoveAll(); saveFile(); } public static void DeleteKey(string key) { ensureInitialization(); config.Remove(key); saveFile(); } public static bool HasKey(string key) { ensureInitialization(); return config.ContainsKey(key); } public static void SetBoolean(string key, bool boolean) { ensureInitialization(); config[key] = boolean; saveFile(); } public static void SetString(string key, string text) { ensureInitialization(); config[key] = text; saveFile(); } public static void SetInt(string key, int number) { ensureInitialization(); config[key] = number; saveFile(); } public static void SetDouble(string key, double number) { ensureInitialization(); config[key] = number; saveFile(); } public static void SetFloatArray(string key, float[] numbers) { ensureInitialization(); config[key] = JArray.FromObject(numbers); saveFile(); } public static void SetVector3(string key, Vector3 vector) { SetFloatArray(key, new float[] { vector.x, vector.y, vector.z }); } public static void SetQuaternion(string key, Quaternion quaternion) { SetFloatArray(key, new float[] { quaternion.x, quaternion.y, quaternion.z, quaternion.w }); } public static void SetJObject(string key, JObject value) { ensureInitialization(); config[key] = JObject.FromObject(value); saveFile(); } public static bool GetBoolean(string key) { ensureInitialization(); return config.Value(key); } public static string GetString(string key) { ensureInitialization(); return config.Value(key); } public static int GetInt(string key) { ensureInitialization(); return config.Value(key); } public static double GetDouble(string key) { ensureInitialization(); return config.Value(key); } public static float[] GetFloatArray(string key) { ensureInitialization(); return config.Value(key).ToObject(); } public static Vector3 GetVector3(string key) { return new Vector3(GetFloatArray(key)[0], GetFloatArray(key)[1], GetFloatArray(key)[2]); } public static Quaternion GetQuaternion(string key) { return new Quaternion(GetFloatArray(key)[0], GetFloatArray(key)[1], GetFloatArray(key)[2], GetFloatArray(key)[3]); } public static JObject GetJObject(string key) { ensureInitialization(); return config.Value(key); } }